J'ai une application Django qui envoie un e-mail. Le serveur de production dispose d'un serveur de messagerie, mais ma boîte locale ne fonctionne pas. Je voudrais être en mesure de tester l'envoi de mail en local. Est-il possible que je peux avoir django ne pas l'envoyer par le serveur de messagerie et il suffit d'imprimer vers un fichier ou une console?
Réponses
Trop de publicités?Vous pouvez configurer votre application pour utiliser la Console de Backend pour l'envoi d'e-mail. Il écrit des e-mails standard au lieu de les envoyer.
Changer votre settings.py pour inclure cette ligne:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
N'oubliez pas de l'enlever pour la production.
Python a un peu de serveur SMTP intégré. Vous pouvez commencer à vous dans une seconde console avec cette commande:
python -m smtpd -n -c DebuggingServer localhost:1025
Ce sera tout simplement l'impression de tous les mails envoyés à l' localhost:1025
dans la console.
Vous devez configurer Django pour utiliser ce serveur dans votre settings.py
:
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
Vous pouvez configurer votre application pour écrire des e-mails à des fichiers temporaires au lieu de les envoyer (similaire à Daniel Hepper de réponse).
EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = 'tmp/email-messages/'
Cela permet d'économiser chaque nouveau message dans un fichier distinct. Utile si vous envoyez des tas d'e-mails, et ne veulent pas avoir à utiliser le scrollback.
Si vos tests s'étend de django.test.cas de tests.Cas de test, puis rien ne doit être fait. Django va remplacer le EmailBackend pour une "spéciale" un. Ensuite, vous pouvez tester ce qui avait été envoyé comme ceci :
def testMethodThatSendAEmail(self):
...
from django.core import mail
object.method_that_send_email(to='me@example.com')
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].to, ['me@example.com'])
...#etc
La boîte d'envoi de l'objet est un objet spécial qui sont alors injectés dans le courrier quand python manage.py test est exécuté.
Il est cool app pour cette par caktus https://github.com/caktus/django-email-bandit Juste ajouter ceci à votre settings.py fichier:
EMAIL_BACKEND = 'bandit.backends.smtp.HijackSMTPBackend'
BANDIT_EMAIL = 'your_email@example.com'
Sur le dessus de votre e-mail paramètres..Tous les e-mails seront détournés vers 'your_email@example.com'
Heureux de codage...