Gewusst wie: senden einer E-mail direkt an SMTP-server ohne Authentifizierung?
Ich würde gerne eine E-Mail senden direkt aus einem Skript für eine Google Mail-Konto, verbinden Sie sich direkt mit smtp.gmail.com
.
Allerdings würde ich es vorziehen, nicht zu haben, das gmail-Passwort in das Skript. Von was ich gelesen habe, scheint es, dass Google Mail erfordert eine Authentifizierung, bevor es liefert jede E-mail, einschließlich Ihrer eigenen Benutzer.
Meine Frage ist, wie ist die E-Mails von anderen SMTP-server jemals geliefert, seit, der SMTP-server wird nicht Google Mail-Anmeldeinformationen. Hat Gmail nur die eine Authentifizierung erfordern, für "anonyme" - VERSENDER, und da mein script läuft auf einem personal-computer, Sie unterliegen der höheren Sicherheit? Hier ist das python-script, das ich verwende:
import smtplib
import email
msg = email.message.Message()
msg["From"] = "[email protected]"
msg["To"] = "[email protected]"
msg["Subject"] = "Test message"
server = smtplib.SMTP("smtp.gmail.com",587)
server.starttls()
server.ehlo_or_helo_if_needed()
try:
failed = server.sendmail("[email protected]","[email protected]", msg.as_string())
server.close()
except Exception as e:
print(e)
Wenn ich dieses Skript ausführen, wird die Ausgabe:
(530, b'5.5.1 Authentication Required. Learn more at
5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 fw5sm21125889wib.0', '[email protected]')
Meine Frage ist, wie externen SMTP-Server dieses problem vermeiden? Und das ist, was Sie tun, replizierbar in einem lokalen Skript, oder erfordert es die korrekte reverse-DNS-records, SPF-records, etc.?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einige externe SMTP-Server ohne Authentifizierung (oder einen lokalen SMTP), aber die gesendete Nachricht wird abgefangen werden, durch den Google-spam-filter, weil die msg["From"] ist @google.com, während der eigentliche SMTP ist nicht smtp.gmail.com.
Diesen SMTP-Server muss ebenfalls die korrekte reverse-zone im ISP-DNS und sonst smtp blockiert werden, indem google.
Das ist eine echt gute Frage, und ich bin inline-Antworten.
Zunächst smtp.gmail.com ist kein mailserver, die E-mail annimmt (anderer Mailserver), sondern ermöglichen Gmail Benutzer anmelden und somit senden oder E-Mails checken. Wenn wir herausfinden wollen, die Gmail-Mailserver nimmt mails von anderen Mailservern. Wir führen die folgende cmd auf dem terminal:
dig mx gmail.com +short
Ausgabe:
Seit
gmail-smtp-in.l.google.com.
ist der niedrigste Wert der 5 wir Sie verwenden, wie der am günstigsten gelegene mailserverGenau verwendet man smtp.gmail.com zur Anmeldung und senden und E-Mails zu/von Ihren jeweiligen Konten, daher benötigen wir die Zugangsdaten ein. Jedoch wir don ' T brauchen, Anmeldeinformationen auf E-Mails an seine E-mail-server ich.e gmail-smtp-in.l.google.com (Beispiel unten)
Als ich gemacht haben, ist mir klar, aus der obigen Diskussion, die wir nicht brauchen Google Mail-Anmeldeinformationen, um eine Verbindung zu Gmail E-mail-Servern, aber wenn wir eine Verbindung zu Gmail E-mail-Servern Verwendung von personal Computern, die wir bekommen können entfernt mit dem abschicken ein paar E-Mails, sondern versenden Sie mehr E-Mails, die wir brauchen, um zu bauen Domäne Ruf und Rechenschaftspflicht mit DKIM, SPF etc (ja, Das ist ein ganz anderes Spektrum).
Das folgende python-Skript sendet eine E-Mail an einen gmail-account ohne Authentifizierung.
Oder versuchen Sie den folgenden Telnet-snippet
"STARTTLS extension not supported by server.") smtplib.SMTPNotSupportedError: STARTTLS extension not supported by server.
Können Sie nicht verwenden-gmail-smtp-server ohne Authentifizierung. Es ist ein google-Politik. Sie müssen geben Sie Ihre account-Passwort. Aber es gibt einen anderen Weg. Sie verwenden können, GAE (Google App Engine) mit Gmail-API. Auf diese Weise können Sie Nachrichten senden, die direkt.