使用python发送邮件出现乱码如何解决

介绍

使用python发送邮件出现乱码如何解决?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

公司项目中需要通过后台发送邮件,邮件内容包括图片附件。如果通过PHPmailer发送,由于邮件服务器可能存在延迟现象,通过PHPmailer在调试过程中出现了以下现象:

1,中文与英文字母结合出现乱码。

2,回复邮件人的姓名两个汉字正常,但三个汉字就乱码。这个问题隐藏性强,我到今天才发现这个问题,害的在老板面前两次犯同样错误。因为我测试好啊(我姓名两个字),就是没有测试三个字的情况,也没想到问题会出在这里。

3,邮件主题乱码

4,一切正常,但点击邮件”回复”时,出现的内容部分乱码。

5,内容问题解决后,发现回复的姓名也乱码。而且QQ邮箱正常,电子邮件客户端正常,163正常,gmail正常,但前景乱码。

<强>调用环境:

1,我在PHP中将回复人,回复邮箱,发送邮箱,文件名等做为脚本的参数,调用cmd命令的方便执行。而做为参数,有些字符是特殊字符。比如,符,单引号,双引号等问题。另外还有一个问题是每个参数间不能有空格。如果有空格,那么参数的顺序就打乱了。

总之,乱码问题一直无法完美解决。最后没有办法,采用下面方式,终于解决乱码问题。

在PHP中将发送邮件的内容,比如主题,回复姓名,邮箱,内容等等,写到配置文件中去,这个配置文件名是随机的,文件目录是在PHP的临时目录。确保多人使用的情况,然后在PHP中调用python脚本时传递配置文件名(含路径也可以),在python中通过读取该配置文件来处理。在这种情况下,主题和回复人,也就是涉及汉字部分在163中是乱码(目前内容部分没测,已经确定主题及回复人涉及汉字在163邮箱中出现乱码,但在QQ邮箱中没有乱码,一切正常),解决办法是通过标题(“xxxx",“utf-8")方式转为utf8后都正常。

<强>下面分享一下相关代码:

PHP调用python脚本

代码如下:


//生成ini配置文件
$ sampleData=https://www.yisu.com/zixun/array (
,,& # 39;邮件# 39;=比;阵列(
,,,,& # 39;主题# 39;=祝辞& # 39;你好,亲,你朋友给你发送的邮件xxx有限公司转发& # 39;,
,,,,& # 39;ReplyToName& # 39;=祝辞send_name美元,
,,,,& # 39;ReplyToMail& # 39;=祝辞send_email美元,
,,,,& # 39;伍仟# 39;=祝辞receive_email美元,
,,,,& # 39;file_name& # 39;=祝辞realpath (target_path美元),
,,)
);
$ filename=getUnique()强生# 39;. ini # 39;;
write_ini_file (sampleData美元,& # 39;D:/PHP/PHP/tmp/& # 39;。文件名,美元真实);
$ cmd=& # 39; mmail开始。py & # 39;美元文件名;
$ r=exec (cmd,美元,美元的地位),
如果(! $状态)
,回声& # 39;好# 39;其他

,回声& # 39;失败# 39;


<强> python发送邮件脚本

代码如下:


# - * -编码:utf - 8 - *
进口smtplib
导入电子邮件。MIMEMultipart #进口MIMEMultipart
导入电子邮件。MIMEText #进口MIMEText
导入电子邮件。MIMEBase #进口MIMEBase
导入操作系统。路径
从邮件导入sys
。头导入头
进口mimetype
导入电子邮件。进口ConfigParser MIMEImage #进口MIMEImage

进口字符串

inifile=u # 39; D:/PHP/PHP/tmp/& # 39;+ sys.argv [1]
配置=ConfigParser.ConfigParser ()
config.read (inifile)
os.remove (inifile)
主题=头(config.get (“mail",“subject"),“utf-8")
ReplyToName=config.get (“mail",“ReplyToName")
ReplyToMail=config.get (“mail",“ReplyToMail")
=config.get (“mail",“To")
file_name=config.get (“mail",“file_name")
从=? s“%头(“xx科技“,“utf-8")
server=smtplib.SMTP (“smtp.exmail.qq.com", 25)
server.login (“xxxx_business@5186.me",“itop202") #仅smtp服务器需要验证时

#构造MIMEMultipart对象做为根容器
main_msg=email.MIMEMultipart.MIMEMultipart ()
#构造MIMEText对象做为邮件显示内容并附加到根容器
text_msg=email.MIMEText.MIMEText (“xxx帮你转发的邮件“,_charset=皍tf-8")
main_msg.attach (text_msg)
#构造MIMEBase对象做为文件附件内容并附加到根容器
ctype,编码=mimetypes.guess_type (file_name)
如果ctype没有或编码不是没有:
,,,ctype=& # 39;应用程序/八进制# 39;
maintype,亚型=ctype.split (& # 39;/& # 39; 1)
file_msg=email.MIMEImage.MIMEImage(开放(file_name & # 39; rb # 39;) .read()亚型)
# #设置附件头
basename=os.path.basename (file_name)

使用python发送邮件出现乱码如何解决