Ho un'applicazione Django che invia un'email. Il server di produzione ha un server di posta elettronica, ma la mia casella locale no. Mi piacerebbe essere in grado di testare l'invio di e-mail localmente. C'è un modo in cui posso avere Django non inviarlo tramite il server di posta elettronica e stampare semplicemente su un file o una console?Test di invio e-mail senza server e-mail
risposta
Puoi configure your application to use the Console Backend per l'invio di e-mail. Scrive le e-mail allo standard invece di inviarle.
Cambia la tua settings.py per includere questa linea:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Non dimenticare di rimuoverlo per la produzione.
Meglio ancora, mettilo in un file di impostazioni di sviluppo e non aggiungerlo alla produzione. – leech
O, ancora meglio, [farlo con le variabili di ambiente] (http:/12/1994.net/config). – meshy
Se stai usando ['mail_admins'] (https://docs.djangoproject.com/en/stable/topics/email/#mail-admins), ricorda di impostare [' ADMINS'] (https: // docs .djangoproject.com/it/stable/ref/settings/# std: setting-ADMINS) a qualcosa, altrimenti niente verrà stampato su stdout. Allo stesso modo per 'mail_managers'. – Flimm
Python ha un piccolo server SMTP built-in. Si può iniziare in una seconda console con questo comando:
python -m smtpd -n -c DebuggingServer localhost:1025
Questo sarà sufficiente stampare tutti i messaggi inviati al localhost:1025
nella console.
è necessario configurare Django per utilizzare questo server nel settings.py
:
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
Nota che il tuo l'app può generare un'eccezione se tenta di inviare un'e-mail quando il server di posta elettronica non è avviato. 'fail_silently = False' è il valore predefinito per' send_mail'. –
Mentre la risposta di Daniel Hepper è indubbiamente quella corretta rispetto alla domanda posta, mi piace questa risposta meglio perché è una soluzione generale che funziona indipendentemente dall'ambiente. (Upvotes su entrambi però, ovviamente.) – Teekin
È possibile configurare l'applicazione per scrivere e-mail su file temporanei invece di inviarli (simile alla risposta di Daniel Hepper).
EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = 'tmp/email-messages/'
Questo salva ogni nuovo messaggio come un file separato. Utile se invii un sacco di email e non vuoi dover usare lo scrollback.
Questo è davvero fantastico da sapere. Grazie. – Teekin
Se i test si estendono da django.test.testcases.TestCase, nulla deve essere fatto. Django sostituirà l'EmailBackend in uno "speciale". Quindi è possibile verificare che cosa sarebbe era stato inviato in questo modo:
def testMethodThatSendAEmail(self):
...
from django.core import mail
object.method_that_send_email(to='[email protected]')
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].to, ['[email protected]'])
...#etc
L'oggetto posta in uscita è un oggetto speciale che vengono iniettati nella posta quando si esegue test di manage.py pitone.
C'è un app freddo per questo Caktus https://github.com/caktus/django-email-bandit Basta aggiungere questo al file settings.py:
EMAIL_BACKEND = 'bandit.backends.smtp.HijackSMTPBackend'
BANDIT_EMAIL = '[email protected]'
in cima alla vostra e-mail e-mail setttings..All sarà deviato a 'your_email @ esempio .com'
felice codifica ...
Questa elabora la risposta da Benjamin. Un modo per testare le e-mail se non ho un server di posta locale come Postfix, Sendmail o Exim installato è di eseguire il server di posta Python. È possibile eseguire sulla porta 25 con sudo, o semplicemente utilizzare una porta> 1024 (porte riservate):
python -m smtpd -n -c DebuggingServer localhost:1025
#sudo python -m smtpd -n -c DebuggingServer localhost:25
Per il test con il codice di Django applicazione corrente, è possibile modificare settings.py temporaneamente per includere questo al botom:
EMAIL_HOST, EMAIL_PORT, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD = 'localhost', 1025, None, None
Adesso prova le e-mail o puoi farlo in ./manage.shell py in un'altra finestra del terminale in questo modo:
python manage.py shell
e incollare questo codice per inviare una e-mail:
from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', '[email protected]',['[email protected]'], fail_silently=False)
Non c'è bisogno di utilizzare qualsiasi email reali in quanto vedrete tutto nel vostro terminale. Puoi scaricarlo nel contenitore appropriato come .html per ulteriori test.
- 1. Invio trasmissioni Email
- 2. test Django email backend
- 3. Invio di email tramite email.mime.multipart in Python
- 4. Invio di email HTML in django
- 5. Invio di email html con script JQuery
- 6. Invio di email Devise tramite Resque
- 7. Creazione server Python Email (ricezione)
- 8. Email Django
- 9. Invio di email da PHPMailer utilizzando i proxy Indirizzi IP
- 10. Come inviare email da PHP senza server SMTP installato?
- 11. Invio di email da Django tramite SMTP ospitato
- 12. Modulo di contatto email senza PHP
- 13. Invio email in GO, impossibile impostare l'intestazione Return-Path
- 14. Invio di email Python TypeError: stringa o buffer previsto
- 15. Invia email asincrona con phpmailer
- 16. Invio di email HTML tramite PHP: incluso il file HTML
- 17. Invio di email tramite Mailgun con il pacchetto NodeMailer
- 18. Elimina email sul server utilizzando javax.mail
- 19. email hyperlinkbutton
- 20. Asp.Net Identità salvare utente senza email
- 21. come confermare la fonte di email
- 22. Incorporamento di immagini alle email
- 23. Libreria client EMail
- 24. Email Convalida espressione normale
- 25. invia email asp.net C#
- 26. iphone app invia email
- 27. Invia email automatica programmaticamente
- 28. MySQL Convalida Email Records
- 29. Markup email Gmail non funziona
- 30. iphone email allegato
Il sistema operativo della tua casella locale potrebbe essere una cosa utile da sapere qui ... In realtà non è necessario un server di posta elettronica sulla scatola, tutto ciò che serve è una connessione di rete a un server di posta elettronica tramite la porta SMTP ... e possibile utente/password. – Spacedman
possibile duplicato di [Dummy SMTP Server per testare le app che inviano email] (http://stackoverflow.com/questions/1006650/dummy-smtp-server-for-testing-apps-that-send-email) –