python邮件发送csv附件_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"] = 'attachment;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)”,測試發送帶附件郵件成功;
詳細設置方法如下所示:
wps3CB7.tmp
wps3CB8.tmp
至此問題解決;
?著作權歸作者所有:來自51CTO博客作者levinbin的原創作品,謝絕轉載,否則將追究法律責任
總結
以上是生活随笔為你收集整理的python邮件发送csv附件_Python2.7 smtplib发送带附件邮件报错STARTTLS解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: std::shared_ptr之dele
- 下一篇: tornado项目搭建_Python深度