Python使用smtplib模块发送电子邮件的流程详解

1、登录SMTP服务器
首先使用网上的方法(这里使用163邮箱,smtp.163.com是smtp服务器地址,25为端口号):

import smtplibserver = 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, in   server.login('j_hao104@163.com', 'password') File "C:Python27libsmtplib.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也是如此,因此去设置好客户端密码,再用客户端密码登录。

2016627144753064.png (700×421)

import smtplibserver = smtplib.SMTP('smtp.163.com', 25)server.login('j_hao104@163.com', 'clientPassword')

登录后复制

    此时便返回登录成功提示:

(235, 'Authentication successful')

登录后复制

2、发送邮件

立即学习“Python免费学习笔记(深入)”;

首先使用网上给出的代码:

import smtplibfrom email.mime.text import MIMETextserver = 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。
但是执行结果并不能得到网上说的结果:

2016627144839301.jpg (350×162)

而是:

Traceback (most recent call last): File "C:/python/t.py", line 195, in   server.sendmail('j_hao104@163.com', ['946150454@qq.com'], msg.as_string()) File "C:Python27libsmtplib.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 smtplibfrom email.header import Headerfrom email.mime.text import MIMETextserver = 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里的具体信息可以用一般发邮件方式发封邮件测试下

2016627144903688.png (424×155)

3、参考示例

import smtplibfrom email.mime.text import MIMETextto_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.

")

登录后复制

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2286230.html

(0)
上一篇 2025年2月27日 21:56:37
下一篇 2025年2月27日 21:56:51

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论