手动发送电子邮件 - Python

时间:2014-12-17 16:58:15

标签: python email smtp protocols

我试图向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。出于学习目的,我想手动发送电子邮件

2 个答案:

答案 0 :(得分:2)

您有一个发送电子邮件的好模块 - 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()

<强> UPD : 如果您想使用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()

答案 1 :(得分:0)

您正在发送&#34; HELO&#34;在发送&#34; EHLO&#34;。

时启动SMTP会话

SMTP authentication mechanism仅在您使用extended SMTP.时可用 使用HELO启动会话会告诉服务器您没有使用扩展SMTP,因此它会拒绝所有身份验证命令。