如何在 Django 中使用 Crontab 发送定时邮件

How to send scheduled email with Crontab in Django

我喜欢使用 Crontab 在 Django 中发送预定的电子邮件。我制作了一个非常简单的应用程序来测试如何在每分钟内发送一封电子邮件(仅用于测试目的)。我想我做错了什么,因为我收不到邮件。

users/cron.py

from django.core.mail import send_mail

def my_scheduled_job():
    
    send_mail(
        'subject',
        'Here is the message.',
        'something@example.com',
        ['me@gmail.com'],
        fail_silently=False,
    )
    print('Successfully sent')

settings.py

CRONJOBS = [
    ('*/1 * * * *', 'users.cron.my_scheduled_job')
]

我是这样添加工作的:

python3 manage.py crontab add

然后

python3 manage.py runserver

我的邮件服务器配置良好,每隔一封邮件都会发送,但我收不到这些邮件,没有任何反应。我不喜欢使用 Celery 或 Django Q.

看看django-mailer:

https://github.com/pinax/django-mailer

它可以替代标准的电子邮件后端并将消息队列存储在数据库中(因此不需要 Celery)。

您只需通过常规 cron 安排它的管理命令,基本上就是这样。

您可以使用 built-in Django 命令来避免第三方集成或外部库。 例如,您可以在 my_app/management/commands/my_scheduled_job.py 文件中添加以下内容:

from django.core.mail import send_mail
from django.core.management.base import BaseCommand

class Command(BaseCommand):
    def handle(self, *args, **options):
        # ... do the job here
        send_mail(
            # ...
        )
        print('Successfully sent')

然后您可以照常配置您的 crontab 命令,例如每天晚上 8 点:

0 20 * * * python manage.py my_scheduled_job

Here 关于自定义 Django 命令的附加信息。