学习Python 发邮件过程中遇到了异常情况,今天做一次复盘:
1.ValueError: server_hostname cannot be an empty string or start with a leading dot.
错误提示说serverhost 不能是空。了解了一下,Python版本3.7要填入host参数,原因是版本3.7修改了ssl.py,导致smtplib.SMTP_SSL也有问题。解决办法指定服务器函数 填入host
server = smtplib.SMTP_SSL(smtp_server)
或者将代码优化成,省略第43行,如下
2.收件箱图片格式显示异常(附件显示tcmime.1466.1547. ... .bin)
在群发邮件时发现收件箱为QQ邮箱的收件附件显示异常(按照官网示例的代码运行,如下),
tcmime.1466.1547. ... .bin显示异常一般都是编码问题,百度了一下,代码如下则可以解决
当然不止有这一种方法,在以后学习过程慢慢探索吧!加油!
3.又又又有乱码(收件人昵称乱码,看图)
这个各种方法都试过了,('utf-8'编码,多次编码解码)就是没有效果呢。路过大神多指点。
4.读取文件异常,第一行元素出现\ufeff,导致文件读取异常,后边部分运行失败
这种解决办法就是,第12行改为: with open('chengji.txt','r',encoding='utf-8-sig') as fp: 首行出现的"\ufeff "叫BOM(Byteorder Mark),用来声明文件的编码信息。‘utf-8’是以字节编码为单元,字节顺序在所有系统中都是一样的。没有字节序问题,因此不需要BOM(字节序签)。当用'utf-8'来读带有BOM的文件时,它会把BOM当做文件内容来处理,就会出现类似上述的错误。'utf-8-sig' sig(signature)带签名的‘utf-8’。当用'utf-8-sig'来读带有BOM的文件时,它会把BOM单独处理,与文本内容隔离开,也就是我们所需要的结果。