it-swarm.com.de

Wie versende ich eine E-Mail über Django?

In meinem settings.py Habe ich Folgendes:

EMAIL_BACKEND = 'Django.core.mail.backends.smtp.EmailBackend'

# Host for sending e-mail.
EMAIL_Host = 'localhost'

# Port for sending e-mail.
EMAIL_PORT = 1025

# Optional SMTP authentication information for EMAIL_Host.
EMAIL_Host_USER = ''
EMAIL_Host_PASSWORD = ''
EMAIL_USE_TLS = False

Mein E-Mail-Code:

from Django.core.mail import EmailMessage
email = EmailMessage('Hello', 'World', to=['[email protected]'])
email.send()

Wenn ich einen Debug-Server über python -m smtpd -n -c DebuggingServer localhost:1025 Einrichte, kann ich die E-Mail natürlich in meinem Terminal sehen.

Wie sende ich die E-Mail jedoch tatsächlich nicht an den Debugging-Server, sondern an [email protected]?

Lassen Sie mich nach dem Lesen Ihrer Antworten etwas klarstellen:

  1. Können Sie localhost (einfacher Ubuntu-PC) nicht zum Versenden von E-Mails verwenden?

  2. Ich dachte in Django 1.3 send_mail() ist etwas veraltet und EmailMessage.send() wird stattdessen verwendet?

143
Derek

Senden Sie die E-Mail an einen echten SMTP-Server. Wenn Sie keine eigene Firma gründen möchten, können Sie Firmen finden, die eine für Sie führen, wie z. B. Google.

Ich verwende Google Mail als SMTP-Server für Django. Viel einfacher als mit Postfix oder einem anderen Server umzugehen. Ich befasse mich nicht mit der Verwaltung von E-Mail-Servern.

In settings.py:

EMAIL_USE_TLS = True
EMAIL_Host = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_Host_USER = '[email protected]'
EMAIL_Host_PASSWORD = 'password'

[~ # ~] Hinweis [~ # ~] : 2016 lässt Google Mail dies standardmäßig nicht mehr zu. Sie können entweder einen externen Dienst wie Sendgrid verwenden oder diesem Tutorial von Google folgen, um die Sicherheit zu verringern, aber diese Option zulassen: https://support.google.com/accounts/answer/6010255

160
Jordan
  1. Erstelle ein Projekt: Django-admin.py startproject gmail
  2. Bearbeite settings.py mit folgendem Code:

    EMAIL_BACKEND = 'Django.core.mail.backends.smtp.EmailBackend'
    EMAIL_USE_TLS = True
    EMAIL_Host = 'smtp.gmail.com'
    EMAIL_Host_USER = '[email protected]'
    EMAIL_Host_PASSWORD = 'email_password'
    EMAIL_PORT = 587
    
  3. Interaktiven Modus ausführen: python manage.py Shell

  4. Importieren Sie das EmailMessage-Modul:

    from Django.core.mail import EmailMessage
    
  5. Senden Sie die E-Mail:

    email = EmailMessage('Subject', 'Body', to=['[email protected]'])
    email.send()
    

Weitere Informationen finden Sie unter send_mail und EmailMessage Funktionen in Dokumenten .

UPDATE für Google Mail

Auch wenn Sie Probleme beim Versenden von E-Mails über Google Mail haben, lesen Sie diese Anleitungen von Google.

Wechseln Sie in Ihren Google-Kontoeinstellungen zu Security > Account permissions > Access for less secure apps und aktivieren Sie diese Option.

Außerdem erstelle ein App-spezifisches Passwort für dein Google Mail-Konto nachdem du aktiviert hast Bestätigung in zwei Schritten dafür.

Dann solltest du app specific password in den Einstellungen verwenden. Also ändere die folgende Zeile:

    EMAIL_Host_PASSWORD = 'your_email_app_specific_password'

Auch wenn Sie daran interessiert sind, HTML-E-Mails zu senden, überprüfen Sie dies .

32
Alex Jolig

Wenn die obigen Lösungen für Django Version 1.7 nicht funktionieren, versuchen Sie Folgendes

in settings.py add

#For email
EMAIL_BACKEND = 'Django.core.mail.backends.smtp.EmailBackend'

EMAIL_USE_TLS = True

EMAIL_Host = 'smtp.gmail.com'

EMAIL_Host_USER = '[email protected]'

#Must generate specific password for your app in [gmail settings][1]
EMAIL_Host_PASSWORD = 'app_specific_password'

EMAIL_PORT = 587

#This did the trick
DEFAULT_FROM_EMAIL = EMAIL_Host_USER

Die letzte Zeile hat den Trick für Django 1.7

13
Cognoscis

Meine Seite wird auf Godaddy gehostet und ich habe eine private E-Mail-Adresse auf derselben Seite registriert. Dies sind die Einstellungen, die für mich gearbeitet haben:

In settings.py:

EMAIL_Host = 'mail.domain.com'
EMAIL_Host_USER = '[email protected]'
EMAIL_Host_PASSWORD = 'abcdef'
DEFAULT_FROM_EMAIL = '[email protected]'
SERVER_EMAIL = '[email protected]'
EMAIL_PORT = 25
EMAIL_USE_TLS = False

In Shell:

from Django.core.mail import EmailMessage
email = EmailMessage('Subject', 'Body', to=['[email protected]'])
email.send()

Dann bekam ich "1" als O/P, d. H. Erfolg. Und ich habe die Mail auch erhalten. :)

12
ibaggu

Sie müssen smtp als Backend in settings.py verwenden

EMAIL_BACKEND = 'Django.core.mail.backends.smtp.EmailBackend'

Wenn Sie das Backend als Konsole verwenden, erhalten Sie die Ausgabe in der Konsole

EMAIL_BACKEND = 'Django.core.mail.backends.console.EmailBackend'

Und auch unter Einstellungen dazu

EMAIL_USE_TLS = True
EMAIL_Host = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_Host_USER = '[email protected]'
EMAIL_Host_PASSWORD = 'password'

Wenn Sie hierfür gmail verwenden, richten Sie Bestätigung in zwei Schritten und anwendungsspezifisches Passwort ein und kopieren Sie das Passwort und fügen Sie es in den obigen Wert EMAIL_Host_PASSWORD ein.

10
user966588

Ich fand, dass die Verwendung von SendGrid die einfachste Methode ist, um E-Mails mit Django zu senden. So funktioniert das:

  1. Erstelle ein SendGrid-Konto (und bestätige deine E-Mail-Adresse)
  2. Fügen Sie Ihrem settings.py Folgendes hinzu: EMAIL_Host = 'smtp.sendgrid.net' EMAIL_Host_USER = '<your sendgrid username>' EMAIL_Host_PASSWORD = '<your sendgrid password>' EMAIL_PORT = 587 EMAIL_USE_TLS = True

Und du bist fertig!

So senden Sie eine E-Mail:

from Django.core.mail import send_mail
send_mail('<Your subject>', '<Your message>', '[email protected]', ['[email protected]'])

Wenn Sie möchten, dass Django Sie per E-Mail benachrichtigt werden, wenn ein interner 500-Server-Fehler auftritt, fügen Sie Ihrem settings.py Folgendes hinzu:

DEFAULT_FROM_EMAIL = '[email protected]'
ADMINS = [('<Your name>', '[email protected]')]

Das Senden von E-Mails mit SendGrid ist bis zu 12.000 E-Mails pro Monat kostenlos.

4
yndolok

Sie können "Test Mail Server Tool" verwenden, um den E-Mail-Versand auf Ihrem Computer oder localhost zu testen. Google und "Test Mail Server Tool" herunterladen und einrichten.

Dann in deiner settings.py:

EMAIL_BACKEND= 'Django.core.mail.backends.smtp.EmailBackend'
EMAIL_Host = 'localhost'
EMAIL_PORT = 25

Von Shell:

from Django.core.mail import send_mail
send_mail('subject','message','sender email',['receipient email'],    fail_silently=False)
2
Allan Guwatudde

Spät, aber:

Zusätzlich zu dem Fix DEFAULT_FROM_EMAIL, Den andere erwähnt haben, und , mit dem weniger sichere Apps auf das Konto zugreifen können, musste ich zu - navigieren. https://accounts.google.com/DisplayUnlockCaptcha während der Anmeldung als fragliches Konto Django zur endgültigen Authentifizierung.

Ich ging zu dieser URL durch einen SSH-Tunnel zum Webserver, um sicherzustellen, dass die IP-Adresse dieselbe war. Ich bin mir nicht ganz sicher, ob das notwendig ist, aber es kann nicht schaden. Sie können dies folgendermaßen tun: ssh -D 8080 -fN <username>@<Host> Und dann Ihren Webbrowser so einstellen, dass localhost:8080 Als SOCKS-Proxy verwendet wird.

2
James Johnson

Für SendGrid - Django Im Einzelnen:

SendGrid Django Text & Tabellen hier

Setzen Sie diese Variablen in

settings.py

EMAIL_Host = 'smtp.sendgrid.net'
EMAIL_Host_USER = 'sendgrid_username'
EMAIL_Host_PASSWORD = 'sendgrid_password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

in views.py

from Django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', '[email protected]', ['[email protected]'], fail_silently=False)
1
Deepak Sharma