Python2.7 smtplib发送带附件邮件报错STARTTLS解决方法
最近在SIOMP系统中添加一项功能时,即自动发送带附件邮件到指定邮箱时,发现在发送时报错:错误信息:STARTTLS extension not supported by server.很是奇怪,但发送无附件邮件时,可以正常发送,且不报错,前期以为是代码存在问题,如果调出对应的错误信息反馈,似乎和代码没有什么关系; 详细代码如下所示: #-*-coding:utf-8-*- importemail fromemail.mime.textimportMIMEText fromemail.mime.multipartimportMIMEMultipart importsmtplib mailsenduser="report@lidongni.com" mailreceiveuser="lidongni@lidongni.com" mailhead="TEST邮件" mailcontent="测试邮件" mailsmtpserver="smtp.lidongni.com" mailsenduser1="report" mailsenduserpasswd="789456123" filepath=r".\123.csv" try: msg=email.mime.multipart.MIMEMultipart() msg['from']=mailsenduser msg['to']=mailreceiveuser msg['subject']=mailhead content=mailcontent txt=email.mime.text.MIMEText(content,_subtype='plain',_charset='gb2312') msg.attach(txt) att1=email.mime.text.MIMEText(open('%s'%filepath,'rb').read(),'base64','gb2312') att1["Content-Type"]='application/octet-stream' att1["Content-Disposition"]='p_w_upload;filename="123.csv"' msg.attach(att1) smtp=smtplib.SMTP(mailsmtpserver,'25') smtp.ehlo() smtp.starttls() smtp.ehlo() smtp.login(mailsenduser1,mailsenduserpasswd) smtp.sendmail(mailsenduser,mailreceiveuser,str(msg)) smtp.quit() print"邮件发送成功!" exceptException,e: print"%s"%e 报错信息: 邮件发送失败,错误信息:STARTTLS extension not supported by server. 原因分析: 在个人电脑上发送代附件邮件没有问题,上传至管理平台服务器,出现无法正常发送邮件情况,且报错信息如上所述,分析原因肯定和STARTTLS有关系,查看对应相关信息,STARTTLS是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。显然和TLS或SSL有关系,于是查看对应Exchange邮件服务器发现以下问题;由于采用Exchange邮件系统进行发送,在邮件系统中添加了对应的匿名允许发送邮件功能,且刚好这台服务器在允许匿名发送邮件的IP内,且身份验证未启用传输层安全性(TLS),故无法正常发送邮件; 解决方法: 1、将对应的服务器IP从允许匿名发送邮件名单中移除,测试发送带附件邮件成功; 2、将对应的允许匿名发送邮件的集线器身份验证允许“传输层安全性(TLS)”,测试发送带附件邮件成功; 详细设置方法如下所示: 至此问题解决;