E-Mail-Client in Python mit sockets(smtplib)
Ich versuche zu schreiben, ein python-Programm, das senden von E-Mails ohne Verwendung von smtplib. Ich habe versucht, sich andere Beiträge auf dieser konnte aber keine Lösung finden.
`from socket import *
msg = "\r\n My email's content!"
endmsg = "\r\n.\r\n"
mailserver = ("smtp.aol.com", 25)
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect(mailserver)
recv = clientSocket.recv(1024)
recv = recv.decode()
print("Message after connection request:" + recv)
if recv[:3] != '220':
print('220 reply not received from server.')
heloCommand = 'HELO Alice\r\n'
clientSocket.send(heloCommand.encode())
recv1 = clientSocket.recv(1024)
recv1 = recv1.decode()
print("Message after HeLO command:" + recv1)
if recv1[:3] != '250':
print('250 reply not received from server.')
# #Info for username and password
# username = "myusername"
# password = "xxxxxxxx"
# authMsg = "AUTH LOGIN\r\n"
# clientSocket.send(authMsg.encode())
# recv_auth = clientSocket.recv(1024)
# print(recv_auth.decode())
# clientSocket.send(username.encode())
# clientSocket.send("\r\n".encode())
# recv_user = clientSocket.recv(1024)
# print("Response after sending username: "+recv_user.decode())
# clientSocket.send(password.encode())
# clientSocket.send("\r\n".encode())
# recv_pass = clientSocket.recv(1024)
# print("Response after sending password: "+recv_pass.decode())
# clientSocket.send(('starttls\r\n').encode())
# recv_tls = clientSocket.recv(1024)
# print(recv_tls.decode())
mailFrom = "MAIL FROM:<[email protected]>\r\n"
clientSocket.send(mailFrom.encode())
recv2 = clientSocket.recv(1024)
recv2 = recv2.decode()
print("After MAIL FROM command: "+recv2)
rcptTo = "RCPT TO:<[email protected]>\r\n"
clientSocket.send(rcptTo.encode())
recv3 = clientSocket.recv(1024)
recv3 = recv3.decode()
print("After RCPT TO command: "+recv3)
data = "DATA\r\n"
clientSocket.send(data.encode())
recv4 = clientSocket.recv(1024)
recv4 = recv4.decode()
print("After DATA command: "+recv4)
clientSocket.send(msg.encode())
clientSocket.send(endmsg.encode())
recv_msg = clientSocket.recv(1024)
print("Response after sending message body:"+recv_msg.decode())
quit = "QUIT\r\n"
clientSocket.send(quit.encode())
recv5 = clientSocket.recv(1024)
print(recv5.decode())
clientSocket.close()`
Ist es möglich eine email zu senden ohne Anmeldung in server? Wenn nicht, wie kann ich mich anmelden, richtig? Jedes mal, wenn ich versucht einzuloggen, die ich erhielt, "authentication failed" Fehler. Ich habe auch Fehler sagen, "Brauchen E-MAIL-Kommando" und "Need RCPT command" obwohl ich das senden von MAIL FROM-und RCPT TO-Befehle.
Werfen Sie einen Blick auf github.com/PabloVallejo/mail-client/blob/master/client.py
InformationsquelleAutor Yhlas | 2015-10-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich in der Lage, um e-mail senden mit smtp.gmx.com
Das problem ist nur, dass gmail lehnt E-Mails, aber einige andere E-Mail-Servern erhalten. Jetzt versuche ich, um E-Mail senden von smtp.gmail.com das erfordert SSL "oder " TLS". Irgendwelche Vorschläge/Hilfe?
Sie können wickeln Sie die Buchse, die entweder mit ssl oder tls-Kontext
ssl.wrap_socket(clientsocket, ssl_version=ssl.PROTOCOL_SSLv23)
ssl.wrap_socket(clientsocket, ssl_version=ssl.PROTOCOL_TLSv1)
referene gist.github.com/Longlius/3735084InformationsquelleAutor Yhlas
Es kommt auf den server. smtp.aol.com ist der server für die Kunden von AOL mail server benötigt Sie, um sich anzumelden. Der MX für AOL (
dig mx aol.com
) braucht Sie nicht anmelden, da es für die Kommunikation zwischen MTA-aber es hat andere Einschränkungen, um spam zu bekämpfen.Zuerst sollten Sie besser EHLO nicht HELO und dann würden Sie auch sehen, welche Methoden für die Authentifizierung auf dem server unterstützt werden.
Für eine Einführung in PLAIN und LOGIN Authentifizierung (und andere) sehen http://www.samlogic.net/articles/smtp-commands-reference-auth.htm. Kurzum: für die EBENE, die Sie haben, um
base64(username+"\0"+password)
.Sie bieten keine debug-Ausgabe, aber ich denke, dass der server die Ablehnung Ihrer MAIL FROM und RCPT TO Befehle, da Sie nicht berechtigt sind.
authMsg = "AUTH PLAIN\r\n" clientSocket.send(authMsg.encode()) recv_auth = clientSocket.recv(1024) print(recv_auth.decode()) #auth = username+"\0"+password base64_str = ('%s\0%s' % (username,password)).encode() auth = base64.b64encode(base64_str) clientSocket.send(auth) recv_user = clientSocket.recv(1024) print("Response after auth: "+recv_user.decode())
Jetzt habe ich die folgende Fehlermeldung: 334 Reaktion nach auth: 421 4.4.2 mtaout-mba01.mx.aol.com Fehler: timeout überschritten Traceback (most recent call last): File "mailclient.py", line 61, in <module> recv2 = clientSocket.recv(1024) ConnectionAbortedError: [WinError 10053] Eine bestehende Verbindung wurde abgebrochen, indem die software in Ihre host-Maschine
InformationsquelleAutor Steffen Ullrich
Möglicherweise müssen Sie IMAP aktivieren, um zu verwenden smtp.gmail.com. Ich Tat einfach, und es funktioniert perfekt. Sie haben für die Verwendung von port 587 oder 465. IMAP aktiviert ist, klicken Sie auf das ZAHNRAD-Symbol in Ihrem Google Mail-Konto, klicken Sie dann auf Weiterleitung und POP/IMAP. Abschließend klicken Sie auf IMAP aktiviert ist, und speichern Sie die änderungen. Sollte dies funktionieren.
InformationsquelleAutor user3431573