Python使用smtplib模块发送电子邮件的流程详解
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python使用smtplib模块发送电子邮件的流程详解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3439字,纯文字阅读大概需要5分钟。
内容图文
![Python使用smtplib模块发送电子邮件的流程详解](/upload/InfoBanner/zyjiaocheng/433/806575e1ce94441396ae26c6b8d71f4a.jpg)
首先使用网上的方法(这里使用163邮箱,smtp.163.com是smtp服务器地址,25为端口号):
import smtplib server = smtplib.SMTP('smtp.163.com', 25) server.login('j_hao104@163.com', 'password') Traceback (most recent call last): File "C:/python/t.py", line 192, inserver.login('j_hao104@163.com', 'password') File "C:\Python27\lib\smtplib.py", line 622, in login raise SMTPAuthenticationError(code, resp) smtplib.SMTPAuthenticationError: (535, 'Error: authentication failed')
发现返回:
smtplib.SMTPAuthenticationError: (535, 'Error: authentication failed')
,提示验证失败。
有说python不支持SMTP服务,或是服务没开启之类的。但是我想起上次我用foxmail登录我的163邮箱的时候,邮箱密码都输对了还是提示我密码错误,最后的解决办法是:像QQ和163邮箱现在都有个客户端密码,用第三方登录时需用客户端密码登录才行,python也是如此,因此去设置好客户端密码,再用客户端密码登录。
import smtplib server = smtplib.SMTP('smtp.163.com', 25) server.login('j_hao104@163.com', 'clientPassword')
此时便返回登录成功提示:
(235, 'Authentication successful')
2、发送邮件
首先使用网上给出的代码:
import smtplib from email.mime.text import MIMEText server = smtplib.SMTP('smtp.163.com', 25) server.login('j_hao104@163.com', 'clientPassword') msg = MIMEText('hello, send by Python...', 'plain', 'utf-8') server.sendmail('j_hao104@163.com', ['946150454@qq.com'], msg.as_string())
构造MIMEText对象时,第一个参数是邮件正文,第二个参数是MIME的subtype,最后个是编码方式。
sendmail是发邮件方法,第一个参数是发件邮箱,第二个参数是收件人邮箱,是一个列表,代表可以同时发给多个人,as_string是把MIMEText对象变成str。
但是执行结果并不能得到网上说的结果:
而是:
Traceback (most recent call last): File "C:/python/t.py", line 195, inserver.sendmail('j_hao104@163.com', ['946150454@qq.com'], msg.as_string()) File "C:\Python27\lib\smtplib.py", line 746, in sendmail raise SMTPDataError(code, resp) smtplib.SMTPDataError: (554, 'DT:SPM 163 smtp11,D8CowEDpDkE427JW_wQIAA--.4996S2 1454562105,please see http://mail.163.com/help/help_spam_16.htm?ip=171.221.144.51&hostid=smtp11&time=1454562105')
网上一查才知道:smtplib.SMTPDataError: (554, 'DT:SPM 163 smtp11……的错误是因为信封发件人和信头发件人不匹配。可以看出看出图片中并没有发件人和主题,所以需要对代码做如下修改:
import smtplib from email.header import Header from email.mime.text import MIMEText server = smtplib.SMTP('smtp.163.com', 25) server.login('j_hao104@163.com', 'clientPassword') msg = MIMEText('hello, send by Python...', 'plain', 'utf-8') msg['From'] = 'j_hao104@163.com <j_hao104@163.com>' msg['Subject'] = Header(u'text', 'utf8').encode() msg['To'] = u'飞轮海 <jinghao5849312@qq.com>' server.sendmail('j_hao104@163.com', ['946150454@qq.com'], msg.as_string())
这样就能成功发出邮件啦
msg里的具体信息可以用一般发邮件方式发封邮件测试下
3、参考示例
import smtplib from email.mime.text import MIMEText to_list = ['123@123.com', '456@456.com'] server_host = 'smtp.163.com' username = '你的邮箱账号' password = '你的邮箱密码' def send(to_list, sub, content): ''' :param to_list: 收件人邮箱 :param sub: 邮件标题 :param content: 内容 ''' me = "manager" + "<" + username + ">" # _subtype 可以设为html,默认是plain msg = MIMEText(content, _subtype='html') msg['Subject'] = sub msg['From'] = me msg['To'] = ';'.join(to_list) try: server = smtplib.SMTP() server.connect(server_host) server.login(username, password) server.sendmail(me, to_list, msg.as_string()) server.close() except Exception as e: print str(e) if __name__ == '__main__': send(to_list, "这个是一个邮件", "Hello, It's test email.
")
内容总结
以上是互联网集市为您收集整理的Python使用smtplib模块发送电子邮件的流程详解全部内容,希望文章能够帮你解决Python使用smtplib模块发送电子邮件的流程详解所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。