Как отправить письмо по расписанию с помощью Crontab в Django

Мне нравится отправлять электронные письма по расписанию в Django с помощью Crontab. Я сделал очень простое приложение, чтобы проверить, как я могу отправлять электронное письмо через каждые минуты (просто для тестирования). Я думаю, что я делаю что-то не так, потому что я не могу получить почту.

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

then

python3 manage.py runserver

Мой почтовый сервер настроен нормально, все остальные письма отправляются, но я не могу получить эти письма, ничего не происходит. Мне не нравится использовать Celery или Django Q.

Посмотрите на django-mailer:

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

Он может заменить стандартный почтовый бэкенд и хранит очередь сообщений в базе данных (поэтому Celery не нужен).

Вы просто планируете команду управления им через обычный cron и это практически все.

Вы можете использовать встроенные команды Django, чтобы избежать сторонних интеграций или внешних библиотек. Например, вы можете добавить следующее в файл my_app/management/commands/my_scheduled_job.py:

from django.core.management.base import BaseCommand

class Command(BaseCommand):
    def handle(self, *args, **options):
        # ... do the job here

и затем вы можете просто настроить команду crontab как обычно, например, каждый день в 8 вечера:

0 20 * * * python manage.py my_scheduled_job

Здесь дополнительная информация о пользовательских командах Django.

Вернуться на верх