Python2.7 smtplib发送带附件邮件报错STARTTLS解决方法
最近在SIOMP系统中添加一项功能时,即自动发送带附件邮件到指定邮箱时,发现在发送时报错:错误信息:STARTTLS extension not supported by server.很是奇怪,但发送无附件邮件时,可以正常发送,且不报错,前期以为是代码存在问题,如果调出对应的错误信息反馈,似乎和代码没有什么关系;
详细代码如下所示:
# -*- coding: utf-8 -*- import email from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import smtplib 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 "邮件发送成功!" except Exception, e: print "%s" % e
报错信息:
邮件发送失败,错误信息:STARTTLS extension not supported by server.
原因分析:
在个人电脑上发送代附件邮件没有问题,上传至管理平台服务器,出现无法正常发送邮件情况,且报错信息如上所述,分析原因肯定和STARTTLS有关系,查看对应相关信息,STARTTLS是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。显然和TLS或SSL有关系,于是查看对应Exchange邮件服务器发现以下问题;由于采用Exchange邮件系统进行发送,在邮件系统中添加了对应的匿名允许发送邮件功能,且刚好这台服务器在允许匿名发送邮件的IP内,且身份验证未启用传输层安全性(TLS),故无法正常发送邮件;
解决方法:
1、将对应的服务器IP从允许匿名发送邮件名单中移除,测试发送带附件邮件成功;
2、将对应的允许匿名发送邮件的集线器身份验证允许“传输层安全性(TLS)”,测试发送带附件邮件成功;
详细设置方法如下所示:
至此问题解决;

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Mac远程控制Mac和Windows
一、 Mac控制Mac Mac间的远程控制是非常方便的,10.5以后的系统中都集成了VNC,可以方便地进行远程控制。 1.打开被控制的Mac的系统设置 “System Preference”,点击进入共享“Sharing”: 2. 进入共享“Sharing”后,左边会有一排选项,把屏幕共享“Screen Sharing”勾上后就可以通过VNC进行远程控制了。 3.接下来我们可以通过Finder来打开VNC连接: 4. 输入VNC地址,点击连接“Connect”后我们就可以打开屏幕共享的控制窗口了,输入要控制的电脑的用户名和密码后,按回车后就可以随心所欲地控制这部Mac电脑了: 二、Mac控制Windows Mac控制Windows的话只需要下载个软件“RemoteDesktop Connection”就可以了。 打开软件,输入要控制的电脑的IP地址,按回车后会弹出一个对话框,输入被控制的电脑的用户名和密码(被控制的电脑一定要设置密码): 连接过程中可能会弹出一个对话框,如下所示: 直接点击“Connect”就可以控制这部Windows电脑了。
- 下一篇
从结构struct谈到类class(基于C++实现)
深入理解struct 在C语言中,我们通常使用struct来表示不同数据类型的结合。当然我们也可以在struct中定义函数,在C++中,这是允许的但是不提倡使用,因为有一个比它更好使用的复杂数据类型,叫做类(这在稍后做出介绍)。 使用struct的时候有一个问题:在进行一个比较大的项目工程的时候,我们的数据结构的定义和使用可能在不同的文件中,当我们修改了数据结构中的某个成员,那么,使用该数据结构的函数必须修改,而我们并不知道拿下函数使用该种数据结构,这时候我们怎么做?答案很简单,在函数定义的时候,让该函数属于该数据结构,在再次查找修改函数的时候,只要属于该结构的函数就进行修改就好了,代码如下: 声明数据结构: structTime{ inthour; intminute; intsecond; voidset_time(inth,intm,ints); voidtick(); voidshow(); voidrun(); }; 定义函数: voidTime::set_time(inth,intm,ints){} voidTime::tick(){} voidTime::show(){...
相关文章
文章评论
共有0条评论来说两句吧...