Ich verwende die folgende Methode, um E-Mails von Python über SMTP zu senden. Ist es die richtige Methode oder fehlen mir Fallstricke?
from smtplib import SMTP
import datetime
debuglevel = 0
smtp = SMTP()
smtp.set_debuglevel(debuglevel)
smtp.connect('YOUR.MAIL.SERVER', 26)
smtp.login('USERNAME@DOMAIN', 'PASSWORD')
from_addr = "John Doe <[email protected]>"
to_addr = "[email protected]"
subj = "hello"
date = datetime.datetime.now().strftime( "%d/%m/%Y %H:%M" )
message_text = "Hello\nThis is a mail from your server\n\nBye\n"
msg = "From: %s\nTo: %s\nSubject: %s\nDate: %s\n\n%s"
% ( from_addr, to_addr, subj, date, message_text )
smtp.sendmail(from_addr, to_addr, msg)
smtp.quit()
Antworten:
Das Skript, das ich benutze, ist ziemlich ähnlich; Ich poste es hier als Beispiel für die Verwendung der E-Mail. * -Module zum Generieren von MIME-Nachrichten. So kann dieses Skript leicht geändert werden, um Bilder usw. anzuhängen.
Ich verlasse mich auf meinen ISP, um den Datums- / Uhrzeit-Header hinzuzufügen.
Mein ISP verlangt, dass ich zum Senden von E-Mails eine sichere SMTP-Verbindung verwende. Ich verlasse mich auf das SMTPLIB-Modul (herunterladbar unter http://www1.cs.columbia.edu/~db2501/ssmtplib.py ).
Wie in Ihrem Skript sind der Benutzername und das Kennwort (siehe Dummy-Werte unten), die zur Authentifizierung auf dem SMTP-Server verwendet werden, in der Quelle im Klartext angegeben. Dies ist eine Sicherheitsschwäche. Die beste Alternative hängt jedoch davon ab, wie sorgfältig Sie diese schützen müssen (wollen?).
=======================================
quelle
from ssmtplib import SMTP_SSL as SMTP
durchfrom smtplib import SMTP_SSL as SMTP
, und dieses Beispiel würde aus der Standard-Python-Bibliothek funktionieren.msg['To'] = ','.join(destination)
, sonst wird das Ziel nicht in Google Mail angezeigtDie Methode, die ich normalerweise benutze ... nicht viel anders, aber ein bisschen
Das ist es
quelle
from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText
Auch wenn Sie SMTP-Authentifizierung mit TLS im Gegensatz zu SSL durchführen möchten, müssen Sie nur den Port ändern (verwenden Sie 587) und smtp.starttls () ausführen. Das hat bei mir funktioniert:
quelle
Das wichtigste Problem, das ich sehe, ist, dass Sie keine Fehler behandeln: .login () und .sendmail () haben beide Ausnahmen dokumentiert, die sie auslösen können, und es scheint, dass .connect () eine Möglichkeit haben muss, dies anzuzeigen Verbindung nicht möglich - wahrscheinlich eine Ausnahme, die vom zugrunde liegenden Socket-Code ausgelöst wird.
quelle
Stellen Sie sicher, dass keine Firewalls SMTP blockieren. Als ich zum ersten Mal versuchte, eine E-Mail zu senden, wurde diese sowohl von der Windows-Firewall als auch von McAfee blockiert. Es dauerte ewig, bis beide gefunden wurden.
quelle
Was ist damit?
quelle
Der folgende Code funktioniert gut für mich:
Ref: http://www.mkyong.com/python/how-do-send-email-in-python-via-smtplib/
quelle
smtpserver.close()
Es muss sein :smtpserver.quit()
, weilclose()
die TLS-Verbindung nicht richtig beendet wird!close()
wird während aufgerufenquit()
.Sie sollten sicherstellen, dass Sie das Datum im richtigen Format formatieren - RFC2822 .
quelle
Der Beispielcode, den ich zum Senden von E-Mails über SMTP verwendet habe.
quelle
Sehen Sie all diese langen Antworten? Bitte erlauben Sie mir, mich selbst zu fördern, indem Sie alles in ein paar Zeilen tun.
Importieren und verbinden:
Dann ist es nur ein Einzeiler:
Es wird tatsächlich geschlossen, wenn es außerhalb des Gültigkeitsbereichs liegt (oder manuell geschlossen werden kann). Außerdem können Sie Ihren Benutzernamen so in Ihrem Schlüsselbund registrieren, dass Sie Ihr Passwort nicht in Ihr Skript schreiben müssen (es hat mich vor dem Schreiben wirklich gestört
yagmail
!).Informationen zu Paket / Installation, Tipps und Tricks finden Sie unter git oder pip , die sowohl für Python 2 als auch für Python 3 verfügbar sind.
quelle
das kannst du so machen
quelle
Hier ist ein Arbeitsbeispiel für Python 3.x.
quelle
Anhand dieses Beispiels habe ich folgende Funktion gemacht:
Wenn Sie nur übergeben,
body
wird eine einfache Textmail gesendet. Wenn Sie jedoch einhtml
Argument zusammen mit einembody
Argument übergeben, wird eine HTML-E-Mail gesendet (mit Fallback auf Textinhalte für E-Mail-Clients, die keine HTML- / MIME-Typen unterstützen).Anwendungsbeispiel:
Übrigens. Wenn Sie Google Mail als Test- oder Produktions-SMTP-Server verwenden möchten, aktivieren Sie den temporären oder permanenten Zugriff auf weniger gesicherte Apps:
quelle