Python使用smtplib模块发送电子邮件的流程详解
程序员文章站
2024-01-12 22:07:52
...
1、登录SMTP服务器
首先使用网上的方法(这里使用163邮箱,smtp.163.com是smtp服务器地址,25为端口号):
首先使用网上的方法(这里使用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' msg['Subject'] = Header(u'text', 'utf8').encode() msg['To'] = u'飞轮海 ' 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" + "" # _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.
")
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
推荐阅读
-
Python使用smtplib模块发送电子邮件的流程详解
-
Python使用dis模块把Python反编译为字节码的用法详解
-
Python 使用requests模块发送GET和POST请求的实现代码
-
Python Paramiko模块的安装与使用详解
-
Python 使用requests模块发送GET和POST请求的实现代码
-
python使用电子邮件模块smtplib的方法
-
python使用电子邮件模块smtplib的方法
-
详解Python中的array数组模块相关使用
-
Python使用poplib模块和smtplib模块收发电子邮件的教程
-
详解Python中使用base64模块来处理base64编码的方法
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论