2015-05-30 14 views
6

Ich versuche, eine einfache Mail mit PythonWie Mail mit Python senden

import smtplib 

server = smtplib.SMTP('smtp.gmail.com', 587) 
server.ehlo() 
server.starttls() 
server.login("[email protected]", "mypassword") 

msg = "Hello world" 
server.sendmail("[email protected]", "[email protected]", msg) 
server.quit() 

Aber ich diesen err erhalten zu senden:

server.login("[email protected]", "psw") 

File "C:\Python\lib\smtplib.py", line 652, in login 

raise SMTPAuthenticationError(code, resp) 

smtplib.SMTPAuthenticationError: (534, b'5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbuxb\n5.7.14 4i2u8qU8V3jgf6uGv8da1RAGPJyctRvIFy_kjai6aKVx_B6qVhoz_dzFpvfPC18H-jeM6K\n5.7.14 cnm2HVuq-wr-uw59hD31ms-cxMmnZuq6Z3_liDaDmu8_UqaiUwR4FUiuX2i5pPdQjJzFvv\n5.7.14 4VrEF5XT4ol2iN17gnB_jITpwzsjH9Ox3NCNcfl7SriHr5m7esc15PWI0CG_2CTlyh7RxW\n5.7.14 XhoJPajs8GMd-khOQWUqucywfrfo> Please log in via your web browser and\n5.7.14 then try again.\n5.7.14 Learn more at\n5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 ef10sm13614207wjd.49 - gsmtp') 

Was soll ich tun?

Dank

+0

Haben Sie versucht, sich mit Ihrem Browser einzuloggen und es erneut zu versuchen, wie die Fehlermeldung sagt? Haben Sie das Anmeldeverfahren in Ihrem Terminal getestet? – ForceBru

+0

ist Ihr Google Mail-Konto aktive Bestätigung in zwei Schritten ??? – Hackaholic

+0

@ForceBru, Ja, ich habe versucht, mich über den Browser anzumelden und während ich eingeloggt bin, versuche ich das - es funktioniert nicht. Ich habe auch die gleichen Zeilen über Terminal versucht und kann auch nicht tun .. – Yura

Antwort

7

Es scheint, als ob Sie etwas benötigen, die Google App-Passwort verlangt.

Grundsätzlich generieren Sie ein 16-stelliges Passwort, das nur für Ihre App gilt. Sie geben dieses spezielle Passwort im Python-Programm anstelle des Passworts ein, mit dem Sie sich regelmäßig bei Ihrem Google-Konto anmelden.

Dadurch können Sie weiterhin die Vorteile der Bestätigung in zwei Schritten nutzen und gleichzeitig Anwendungen von Drittanbietern verwenden, z. B. ein eigenes Python-Programm.

Hier sind die Anweisungen von Google, wie diese ein App-Passwort generieren: https://support.google.com/accounts/answer/185833?hl=en

+0

Vielen Dank für die ausführliche Erklärung und Antwort. Das hat funktioniert! – Yura

3

Sie diesen Code verwenden können:

import smtplib 

session = smtplib.SMTP('smtp.gmail.com', 587) 
session.ehlo() 
session.starttls() 
session.login('[email protected]',' password') 
headers = "\r\n".join(["from: " + '[email protected]', 
         "subject: " + "test", 
         "to: " + '[email protected]', 
         "mime-version: 1.0", 
         "content-type: text/html"]) 

# body_of_email can be plaintext or html!      
content = headers + "\r\n\r\n" + "body_of_email" 
session.sendmail('[email protected]', '[email protected]', content) 

nur daran erinnern, wenn Ihre E-Mail ist gmail nach dem ersten Lauf erhalten Sie ein Fehler. Danach sollten Sie Ihr E-Mail-Konto anmelden und von einem anderen App Zugriff auf Ihr Konto genehmigen (Sie erhalten eine messege nach der Anmeldung erhalten)

+0

Danke! Ich habe oben schon eine Antwort gefunden. :) – Yura

+0

@SaraSantana Bitte schauen Sie sich [yagmail] (https://github.com/kootenpv/yagmail) an, es sollte es sehr einfach machen, E-Mails zu senden! – PascalVKooten

2

Sie können einen kostenlosen E-Mail-API verwenden, wie mailgun:

import requests 

def send_simple_message(target): 
    return requests.post(
     "https://api.mailgun.net/v3/samples.mailgun.org/messages", 
     auth=("api", "key-3ax6xnjp29jd6fds4gc373sgvjxteol0"), 
     data={"from": "Excited User <[email protected]>", 
       "to": [target], 
       "subject": "Hello", 
       "text": "Testing some Mailgun awesomeness!"}) 

send_simple_message('[email protected]') 

Verwendung Eine API wie diese vermeidet das Problem der individuellen Account-Authentifizierung alle zusammen.

Siehe auch: This question für Informationen zur Verwendung von smtplib

+0

Danke! Ich habe oben schon eine Antwort gefunden. :) – Yura

+0

@ Yura. Jep. Ich denke immer noch, dass das Hinzufügen alternativer Lösungen die Qualität einer Frage für zukünftige Leser verbessert. Freut mich, dass du deine Antwort bekommen hast! –

1

Ja, wie die Antwort geschrieben, es ist eine Frage der Authentifizierung war :)

Ich möchte weiter helfen Ihnen die E-Mails von Ich berate das Yagmail-Paket (Ich bin der Betreuer, Entschuldigung für die Werbung, aber ich fühle, dass es wirklich helfen kann!). Beachten Sie, dass ich dort auch eine Liste häufiger Fehler führe, z. B. den Authentifizierungsfehler.

Der gesamte Code für Sie wäre:

import yagmail 
yag = yagmail.SMTP('user', 'pw') 
yag.send(contents = msg) 

Bitte beachte, dass ich Standardwerte für alle Argumente, zum Beispiel angeben, wenn Sie an sich selbst senden möchten, können Sie „to = [email protected]“ weglassen, wenn Sie nicht tun will ein Thema, du kannst es auch weglassen.

Darüber hinaus ist es auch das Ziel, HTML-Code oder Bilder (und andere Dateien) einfach anzuhängen.

Wo Sie Inhalte setzen Sie so etwas wie tun:

contents = ['Body text, and here is an embedded image:', 'http://somedomain/image.png', 
      'You can also find an audio file attached.', '/local/path/song.mp3'] 

Wow, wie einfach es ist, Anlagen zu senden!Dies würde 20 Zeilen ohne yagmail dauern;)

Wenn Sie es einmal einrichten, müssen Sie das Kennwort nie wieder eingeben (und es sicher gespeichert haben). In Ihrem Fall können Sie etwas tun wie:

import yagmail 
yagmail.SMTP().send(contents = contents) 

, die viel prägnanter ist!

Ich würde Sie einladen, einen Blick auf die github oder installieren Sie es direkt mit pip install yagmail.