我正在尝试向 SMTP 服务器发送电子邮件,但我不断从服务器收到错误消息。它说我的命令无法识别,状态代码如 500 和 501。
这是我的脚本:
import socket
server_info = ("smtp.gmx.com", 25)
socket = socket.socket()
socket.connect(server_info)
username = raw_input("Enter your username: ")
password = raw_input("Enter your password: ")
recipient = raw_input("Recipient: ")
data = raw_input("Your message: ")
auth = username + "" + password
auth = auth.encode("base64").replace("\n", "")
socket.send("HELO\r\n")
print "EHLO Response: " + socket.recv(1024)
socket.send("AUTH PLAIN "+auth+"\r\n")
print "AUTH Response: " + socket.recv(1024)
socket.send("MAIL FROM:<"+username+">\r\n")
print "MAIL FROM Response: " + socket.recv(1024)
socket.send("RCPT TO:"+recipient+"\r\n")
print "RCPT TO Response: " + socket.recv(1024)
socket.send("RCPT TO:"+recipient+"\r\n")
print "RCPT TO Response: " + socket.recv(1024)
socket.send("DATA\r\n")
print "DATA Response: " + socket.recv(1024)
socket.send(data + "\r\n.\r\n")
print "RAW DATA Response: " + socket.recv(1024)
socket.send("QUIT\r\n")
print "QUIT Response: " + socket.recv(1024)
print "Done."
socket.close()
这些命令有什么问题?我完全按照它们应该的样子写了它们。 这是我从服务器得到的错误:
http://i.gyazo.com/3f5eb3a34cbb0f00510281bccc8d0546.png
P.S 我不想使用 smtplib。我想手动发送我的电子邮件,用于学习目的
请您参考如下方法:
您有一个很棒的模块来发送电子邮件 - smtplib
使用示例:
import smtplib
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587
sender = 'example@gmail.com'
password = "password"
recipient = 'example2@gmail.com'
subject = 'Gmail SMTP Test'
body = 'blah blah blah'
body = "" + body + ""
headers = ["From: " + sender,
"Subject: " + subject,
"To: " + recipient,
"MIME-Version: 1.0",
"Content-Type: text/html"]
headers = "\r\n".join(headers)
session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
session.ehlo()
session.starttls()
session.ehlo()
session.login(sender, password)
session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
session.quit()
更新: 如果你想使用 SSL:
...
session = smtplib.SMTP_SSL_PORT(SMTP_SERVER, SMTP_PORT)
session.ehlo()
session.login(sender, password)
session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
session.quit()
