SMTP是发送邮件的协议,python内置对SMTP的支持,可以发送纯文本邮件,HTML邮件,还有带附件的邮件
python对SMTP的支持:email模块–负责构造邮件 smtplib模块–负责发送邮件。
不管是使用QQ邮箱,网易邮箱,还是新浪邮箱,要利用他们的SMTP服务器来发送邮件,POP3服务器来接受邮件,都需要授权码,为了防止你的客户端密码泄露而造成邮箱隐患,而使用只有你自己知道的授权码来登陆第三方客户端,比如smtplib模块就属于第三方客户端。而授权码即使在服务器端也是加密的,所以无法修改授权码,只能重置授权码。
邮箱的pop/smtp服务器默认是关闭的,需要手动开启,进行短信验证。
QQ邮箱开启pop/smtp服务:
新浪邮箱开启pop/smtp服务:
网易邮箱开启pop/smtp服务:
服务器地址及协议端口:
新浪邮箱帮助:http://help.sina.com.cn/comquestiondetail/view/160/
# ################选择新浪邮箱###############
# 新浪@sina.com邮箱 新浪@sina.cn邮箱
# 接受服务器地址:pop.sina.com or pop3.sina.com pop.sina.cn or pop3.sina.cn
# 发送服务器地址:smtp.sina.com smtp.sina.cn
# ###########端口号设置###################
# POP 协议 pop端口:110 smtp 端口:25
# IMAP 协议 IMAP 端口:143 smtp 端口:25
# ############加密设置####################
# pop: 995 imap: 993
# smtp: 587 or 465
网易邮箱的帮助:https://help.mail.163.com/faq.do?m=list&categoryID=76
QQ邮箱的帮助:https://service.mail.qq.com/cgi-bin/help?subtype=1&&no=430&&id=48
除了改个域名,基本上一样。
# 发送纯文本邮件
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from smtplib import SMTP_SSL
server = 'smtp.qq.com' # 使用的QQ邮箱的SMTP服务器
sender = '[email protected]' # 你的QQ邮箱账号
pwd = 'xxxxxxxxxxxxxxxx' # 你的16位授权码
sender_mail = '[email protected]' # 发送方的邮箱
receiver = '[email protected]' # 接收方的邮箱
mail_title = '[email protected]' # 邮件标题
mail_content = '用QQ邮箱发的!' # 邮件内容
# 构造邮件
msg = MIMEMultipart()
msg['Subject'] = Header(mail_title, 'utf-8') # 构造邮件标题
msg['From'] = sender_mail # 构造邮件发送方
msg['To'] = Header('test', 'utf-8') # 构造邮件接受方
msg.attach(MIMEText(mail_content, 'plain', 'utf-8')) # 构造邮件内容
# 发送邮件
smtp = SMTP_SSL(server) # 加密发送
smtp.set_debuglevel(1) # 打印smtplib库和smtp服务器的交互过程
smtp.login(sender_mail, pwd) # 通过smtplib登录smtp服务器
somebody = smtp.sendmail(sender_mail, [receiver], msg.as_string()) # 发送邮件
smtp.quit() # 退出服务器
交互过程:
send: 'ehlo [192.168.48.1]\r\n'
reply: b'250-newxmesmtplogicsvrsza2.qq.com\r\n'
reply: b'250-PIPELINING\r\n'
reply: b'250-SIZE 73400320\r\n'
reply: b'250-AUTH LOGIN PLAIN\r\n'
reply: b'250-AUTH=LOGIN\r\n'
reply: b'250-MAILCOMPRESS\r\n'
reply: b'250 8BITMIME\r\n'
reply: retcode (250); Msg: b'newxmesmtplogicsvrsza2.qq.com\nPIPELINING\nSIZE 73400320\nAUTH LOGIN PLAIN\nAUTH=LOGIN\nMAILCOMPRESS\n8BITMIME'
send: 'AUTH PLAIN ADEzMTUzOTU2MjFAcXEuY29tAHF5dGZyc29nY2R2eWphZ2c=\r\n'
reply: b'235 Authentication successful\r\n'
reply: retcode (235); Msg: b'Authentication successful'
send: 'mail FROM: size=402\r\n'
reply: b'250 OK.\r\n'
reply: retcode (250); Msg: b'OK.'
send: 'rcpt TO:\r\n'
reply: b'250 OK\r\n'
reply: retcode (250); Msg: b'OK'
send: 'data\r\n'
reply: b'354 End data with ..\r\n'
reply: retcode (354); Msg: b'End data with ..'
data: (354, b'End data with ..' )
send: b'Content-Type: multipart/mixed; boundary="===============4761608527476114621=="\r\nMIME-Version: 1.0\r\nSubject: =?utf-8?q?1315395621=40163=2Ecom?=\r\nFrom: [email protected]\r\nTo: =?utf-8?q?test?=\r\n\r\n--===============4761608527476114621==\r\nContent-Type: text/plain; charset="utf-8"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: base64\r\n\r\n55SoUVHpgq7nrrHlj5HnmoQh\r\n\r\n--===============4761608527476114621==--\r\n.\r\n'
reply: b'250 OK: queued as.\r\n'
reply: retcode (250); Msg: b'OK: queued as.'
data: (250, b'OK: queued as.')
send: 'quit\r\n'
reply: b'221 Bye.\r\n'
reply: retcode (221); Msg: b'Bye.'
继承关系:
Message
MIMEBase
MIMEMultipart
MIMENonMultipart
MIMEMessage
MIMEText
MIMEImage
测试目标:1-新浪邮箱 2-QQ邮箱 3-网易邮箱
发送测试结果:
关于新浪的SMTP服务器发送失败,怀疑是SMTP服务器把我的邮件误认为是群发邮件或者是有毒邮件,所以偷偷扔掉了,但是不通知我,还返回给我一个成功的状态码。。。
关于邮件发送成功对方却接受不到的几种可能:http://qunfa.abot.cn/post/68.html
还有通过退信码查找错误原因:http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html