python-自动化测试结果发送邮件报错(smtplib.SMTPDataError: (554, b'DT:SPM 163……)解决方法

Posted 悠涩唉滴001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-自动化测试结果发送邮件报错(smtplib.SMTPDataError: (554, b'DT:SPM 163……)解决方法相关的知识,希望对你有一定的参考价值。

先把我的邮件发送脚本粘贴上来吧,再解释下我的报错和解决方法:

  import smtplib,email,os,time,yagmail
  from email.mime.multipart import MIMEMultipart
  from email.mime.text import MIMEText
  from email.header import Header


  # 测试报告存储的路径 report_dir = \'..........\\\\report\\\\\' # 将测试报告文件夹下的所有文件名作为列表返回 lists = os.listdir(report_dir) # 对所有测试报告按照生成时间进行排序 lists.sort(key=lambda filename: os.path.getmtime(report_dir + filename)) # 获取最新的测试报告 recent = lists[-1] # 指定最新的测试报告路径 file = os.path.join(report_dir, recent) # 邮件正文 # content = "接口测试报告" # # 将测试报告作为附件发送 # yag.send(".....com","测试报告",content,file) # 发送邮箱服务器 smtpserver = \'smtp.163.com\' # 发送邮箱用户/密码(登录邮箱操作) user = "......@163.com" password = \'..........\' # 发送邮箱 sender = ".........@163.com" # 接收邮箱 receivers = [\'......@qq.com\', ".......@163.com"] # 发送主题 subject = \'接口测试报告\' # # 编写HTML类型的邮件正文(把HTML代码写入) # msg = MIMEText(\'<html><body><a href="">百度一下</a></p></body></html>\',\'html\',\'utf-8\') # msg[\'Subject\'] = Header(subject,"utf-8") # 发送附件 sendfile = open(file, "r", encoding=\'utf-8\').read() att = MIMEText(sendfile, "base64", "utf-8") att["Content-Type"] = "application/octet-stream" att["Content-Disposition"] = "attachment;filename = result.html" msgRoot = MIMEMultipart(\'related\') msgRoot[\'Subject\'] = subject msgRoot.attach(att) msgRoot["From"] = "L<.......@163.com>" msgRoot["To"] = \'%s\' % receivers # 连接发送邮件(smtplib模块基本使用格式) smtp = smtplib.SMTP() smtp.connect(smtpserver, 25) # smtp.set_debuglevel(1) smtp.login(user, password) # smtp.sendmail(sender,receiver,msg.as_string()) smtp.sendmail(sender, receivers, msgRoot.as_string()) smtp.quit()

这个是已经可以正常执行的代码了,中途出现535、554的错误 ,记录下我解决报错的结果方法和尝试

1.首先报错535:这个比较简单就解决的了,去我的163邮箱里面打开授权,设置如下:

原因:

未将POP3/SMTP服务开启。通过在163邮箱内 设置 获取授权码  打开,通过授权码可以进行第三方登录。

 

 

 然后开启SMTP服务,并且记录下授权的密码

 

 

 记住,要记录下这个开启时给的授权密码。然后赋值到脚本里面的password,这个密码不是邮箱登录密码,是这个授权密码哦。

则需要这样就基本处理掉了535报错

2.再次运行出现554报错,解决方案有好几种:

原因:

*  发件人和收件人参数没有进行定义

* 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件; 信封发件人和信头发件人不匹配

第一个的问题解决方案,顾名思义,进行参数定义,就像我脚本代码里面的一样:

msgRoot["From"] = "L<.......@163.com>" # 发件人
msgRoot["To"] = \'H<.........@qq,com>\' # 收件人


第二个的问题解决方案,据说只要在收件人里面加上发件人自己就可以了,还有说主题最好超过五个字符,且不要有星号等特殊符号,更有的人说不要加测试(test)字眼,我觉得多试试,总是有一种可能阻挡住你的。

 

 

最后,希望能解决你的问题,要是有其他情况呢,留言下来我们一起去分析解决吧

以上是关于python-自动化测试结果发送邮件报错(smtplib.SMTPDataError: (554, b'DT:SPM 163……)解决方法的主要内容,如果未能解决你的问题,请参考以下文章

Python自动化——通过邮件发送测试报告

Python 2.7测试是否发送了SMTP邮件

Python发送邮件

Python自动化测试发送邮件太麻烦?!一起聊一聊 Python 发送邮件的3种方式

Selenium 2自动化测试实战37(自动发邮件功能)

Python邮件发送。为啥我用smtp发送邮件,发送成功没有报错,却没有收到邮件?求解