Как отправить письмо по расписанию с помощью 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.