wake-up-neo.net

Django E-Mail senden

Ich weiß, dass es 20 ähnliche Fragen gibt wie ich, aber ich habe schon über einen Tag lang versucht, E-Mails zur Arbeit mit Django zu bekommen. 

Ich erhalte folgende Fehlermeldung: [Errno 111] Connection refused, wenn ich versuche, eine E-Mail zu senden

Hier erstelle ich die E-Mail und versuche, sie in meiner Ansicht zu senden:

try:
    msg = EmailMessage(subject, message, from_email, [receiver])
    msg.content_subtype = "html"
    msg.send()

Meine Einstellungsdatei lautet wie folgt:

EMAIL_Host = "localhost"
DEFAULT_FROM_EMAIL = "[email protected]"
EMAIL_PORT = 25
EMAIL_BACKEND = "Django.core.mail.backends.smtp.EmailBackend"

Ich habe es mit dem Versenden von Tests mit python -m smtpd -n -c DebuggingServer localhost:1025 versucht und hatte Erfolg, aber wenn es darauf ankommt, es wirklich zu tun, kein Erfolg. 

Wenn ich versuche, send_mail von der Shell aus zu machen, bekomme ich diesen Traceback:

>>> from Django.core.mail import send_mail
>>> send_mail('Test', 'Test', '[email protected]', ['[email protected]'])
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.6/dist-packages/Django/core/mail/__init__.py", line 61, in send_mail
    connection=connection).send()
  File "/usr/local/lib/python2.6/dist-packages/Django/core/mail/message.py", line 251, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/usr/local/lib/python2.6/dist-packages/Django/core/mail/backends/smtp.py", line 79, in send_messages
    new_conn_created = self.open()
  File "/usr/local/lib/python2.6/dist-packages/Django/core/mail/backends/smtp.py", line 42, in open
    local_hostname=DNS_NAME.get_fqdn())
  File "/usr/lib/python2.6/smtplib.py", line 239, in __init__
    (code, msg) = self.connect(Host, port)
  File "/usr/lib/python2.6/smtplib.py", line 295, in connect
    self.sock = self._get_socket(Host, port, self.timeout)
  File "/usr/lib/python2.6/smtplib.py", line 273, in _get_socket
    return socket.create_connection((port, Host), timeout)
  File "/usr/lib/python2.6/socket.py", line 561, in create_connection
    raise error, msg
error: [Errno 111] Connection refused

Ich scheine damit einfach nicht weiter zu kommen. Jede Hilfe oder Beratung wäre sehr dankbar. Vielen Dank

Wenn es noch etwas gibt, was Sie gerne sehen würden, kommentieren Sie es einfach.

31
Luke

Versuchen Sie, ein Google Mail-Konto zu verwenden? Vielleicht probier das dann aus:

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

Dann probiere test (Django <1.4) durch

python manage.py Shell
>>> from Django.core.mail import send_mail
>>> send_mail('test email', 'hello world', to=['[email protected]'])

Und wenn Sie Django 1.4 verwenden, verwenden Sie folgendes:

python manage.py Shell
>>> from Django.core.mail import send_mail
>>> send_mail('test email', 'hello world', '[email protected]', ['[email protected]'])

Wenn Sie kein Google Mail-Konto verwenden und weiterhin Probleme bekommen, fügen Sie einfach EMAIL_Host_USER und EMAIL_Host_PASSWORD zu dem hinzu, was Sie haben . Wenn Sie immer noch Probleme haben, blockiert Sie Ihr Netzwerk. Firewalls auf Ihrem Betriebssystem oder Router.

Danke an knite für die aktualisierte Syntax. Wirf ihm einen +1 und danke an Pranavk, dass er mich über die Syntaxänderung in Django 1.4 informiert hat

68
darren

Erstellen Sie zuerst ein anwendungsspezifisches Passwort

  1. Besuchen Sie Ihre Google-Kontosicherheitsseite .
  2. Klicken Sie im Feld 2-Step Verification auf Settings (Wenn keine Verknüpfung mit den Einstellungen vorhanden ist, möchten Sie möglicherweise eine neue erstellen. Schritt 3 und 4 können übersprungen werden).
  3. Klicken Sie auf die Registerkarte für App-specific passwords.
  4. Klicken Sie auf Manage your application specific passwords.
  5. Geben Sie im Abschnitt Application-specific passwords einen beschreibenden Namen für die Anwendung ein, die Sie autorisieren möchten, beispielsweise "Django gmail", und klicken Sie auf die Schaltfläche Generate application-specific password.
  6. notieren Sie sich das Passwort. zum Beispiel: smbumqjiurmqrywn password

Fügen Sie dann die entsprechenden Werte zu settings.py hinzu:

EMAIL_Host = 'smtp.gmail.com'
EMAIL_Host_USER = '[email protected]'
EMAIL_Host_PASSWORD = 'Application spectific password(for eg: smbumqjiurmqrywn)'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

Sie können die Shell zum Testen verwenden:

python manage.py Shell
>>> from Django.core.mail import send_mail
>>> send_mail('Test', 'This is a test', '[email protected]', ['[email protected]'],
     fail_silently=False)
35
simple_human

@mongoose_za hat eine großartige Antwort, aber die Syntax ist in Django 1.4+ etwas anders.

Anstatt:

send_mail('test email', 'hello world', to=['[email protected]'])

benutzen

send_mail('test email', 'hello world', '[email protected]', ['[email protected]'])

Die ersten vier Argumente sind erforderlich: Betreff, Nachricht, from_email und Empfängerliste.

17
knite
  1. Aktivieren Sie Pop3 in den Google Mail-Einstellungen.
  2. erstellen Sie ein anwendungsspezifisches Passwort für diese Django-Anwendung. (http://support.google.com/accounts/bin/answer.py?hl=de&answer=185833)
4
ameya1984

Ich würde GMail vermeiden. Es funktioniert für ein paar E-Mails, aber danach werden Sie möglicherweise feststellen, dass alle Ihre E-Mails abgelehnt werden oder von Spam abgestellt werden. Ich habe Amazons "SES" -Service mit Django-SES verwendet, um dieses Problem zu lösen.

3
Rich Jones

Verwenden Sie in settings.py smtp als Backend und nicht Konsole

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

legen Sie die folgenden minimalen Einstellungen in der Datei settings.py oder local_settings.py auf Ihrem Server ab. 

EMAIL_Host = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

anstelle von smtp.gmail.com, das viele Einschränkungen auferlegt, können Sie einen eigenen Mail-Server verwenden. 

sie können dies tun, indem Sie Ihren eigenen Mailserver installieren:

Sudo apt-get install sendmail
0
user993563