一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

基于python發(fā)送郵件的亂碼問(wèn)題的解決辦法

公司項(xiàng)目中需要通過(guò)后臺(tái)發(fā)送郵件,郵件內(nèi)容包括圖片附件。如果通過(guò)phpmailer發(fā)送,由于郵件服務(wù)器可能存在延遲現(xiàn)象,通過(guò)phpmailer發(fā)送郵件,需要等待郵件發(fā)送成功后才能返回結(jié)果,這在實(shí)踐中證明,有時(shí)發(fā)送郵件無(wú)法即時(shí)返回結(jié)果,影響用戶體驗(yàn)。

于是我通過(guò)Python發(fā)送郵件,php通過(guò)調(diào)用腳本方式來(lái)調(diào)用,這樣執(zhí)行腳本成功后立即返回,而無(wú)需判斷郵件是否發(fā)送成功。只要成功執(zhí)行腳本文件即向客戶端返回成功標(biāo)志。這樣極大的提高了郵件發(fā)送速度,保證良好的用戶體驗(yàn)效果。

但是,在通過(guò)Python發(fā)送郵件,卻遇到了亂碼的問(wèn)題。在調(diào)試過(guò)程中出現(xiàn)了以下現(xiàn)象:

1、中文與英文字母結(jié)合出現(xiàn)亂碼。

2、回復(fù)郵件人的姓名兩個(gè)漢字正常、但三個(gè)漢字就亂碼。這個(gè)問(wèn)題隱藏性強(qiáng),我到今天才發(fā)現(xiàn)這個(gè)問(wèn)題,害的在老板面前兩次犯同樣錯(cuò)誤。因?yàn)槲覝y(cè)試OK啊(我姓名兩個(gè)字),就是沒(méi)有測(cè)試三個(gè)字的情況,也沒(méi)想到問(wèn)題會(huì)出在這里。

3、郵件主題亂碼

4、一切正常,但點(diǎn)擊郵件“回復(fù)”時(shí),出現(xiàn)的內(nèi)容部分亂碼。

5、內(nèi)容問(wèn)題解決后,發(fā)現(xiàn)回復(fù)的姓名也亂碼。而且QQ郵箱正常、foxmail正常、163正常、gmail正常,但outlook亂碼。

調(diào)用環(huán)境:

1、我在php中將回復(fù)人,回復(fù)郵箱,發(fā)送郵箱,文件名等做為腳本的參數(shù),調(diào)用cmd命令的方便執(zhí)行。而做為參數(shù),有些字符是特殊字符。比如&符,單引號(hào),雙引號(hào)等問(wèn)題。另外還有一個(gè)問(wèn)題是每個(gè)參數(shù)間不能有空格。如果有空格,那么參數(shù)的順序就打亂了。

總之,亂碼問(wèn)題一直無(wú)法完美解決。最后沒(méi)有辦法,采用下面方式,終于解決亂碼問(wèn)題。

php中將發(fā)送郵件的內(nèi)容,比如主題、回復(fù)姓名、郵箱、內(nèi)容等等,寫到配置文件中去,這個(gè)配置文件名是隨機(jī)的,文件目錄是在php的臨時(shí)目錄。確保多人使用的情況。然后在php中調(diào)用Python腳本時(shí)傳遞配置文件名(含路徑也可以),在Python中通過(guò)讀取該配置文件來(lái)處理。在這種情況下,主題和回復(fù)人,也就是涉及漢字部分在163中是亂碼(目前內(nèi)容部分沒(méi)測(cè),已經(jīng)確定主題及回復(fù)人涉及漢字在163郵箱中出現(xiàn)亂碼,但在QQ郵箱中沒(méi)有亂碼,一切正常),解決辦法是通過(guò)Header("xxxx","utf-8")方式轉(zhuǎn)為utf8后都正常。

下面分享一下相關(guān)代碼:

php調(diào)用Python腳本
復(fù)制代碼 代碼如下:
//生成ini配置文件
$sampleData = array(
  'mail' => array(
    'subject' =>'hello,親,你朋友給你發(fā)送的郵件-xxx有限公司轉(zhuǎn)發(fā)',
    'ReplyToName' =>$send_name,
    'ReplyToMail' =>$send_email,
    'To' =>$receive_email,
    'file_name' =>realpath($target_path),
  )
);
$filename=getUnique().'.ini';
write_ini_file($sampleData,'D:/php/php/tmp/'.$filename, true);
$cmd='start mmail.py '.$filename;
$r=exec($cmd,$out,$status);
if(!$status)
  echo 'ok'
else
  echo 'fail'

Python發(fā)送郵件腳本
復(fù)制代碼 代碼如下:
# -*- coding: utf-8 -*-
import smtplib
import email.MIMEMultipart# import MIMEMultipart
import email.MIMEText# import MIMEText
import email.MIMEBase# import MIMEBase
import os.path
import sys
from email.header import Header
import mimetypes
import email.MIMEImage# import MIMEImage
import ConfigParser
import string

inifile=u'D:/php/php/tmp/' + sys.argv[1]
config=ConfigParser.ConfigParser()
config.read(inifile)
os.remove(inifile)
subject=Header(config.get("mail","subject"),"utf-8")
ReplyToName=config.get("mail","ReplyToName")
ReplyToMail=config.get("mail","ReplyToMail")
To=config.get("mail","To")
file_name=config.get("mail","file_name")
From = "%s<xxxxx@xxx.com>" % Header("xx科技","utf-8")
server = smtplib.SMTP("smtp.exmail.qq.com",25)
server.login("xxxx_business@5186.me","itop202") #僅smtp服務(wù)器需要驗(yàn)證時(shí)

# 構(gòu)造MIMEMultipart對(duì)象做為根容器
main_msg = email.MIMEMultipart.MIMEMultipart()
# 構(gòu)造MIMEText對(duì)象做為郵件顯示內(nèi)容并附加到根容器
text_msg = email.MIMEText.MIMEText("xxx幫你轉(zhuǎn)發(fā)的郵件",_charset="utf-8")
main_msg.attach(text_msg)
# 構(gòu)造MIMEBase對(duì)象做為文件附件內(nèi)容并附加到根容器
ctype,encoding = mimetypes.guess_type(file_name)
if ctype is None or encoding is not None:
    ctype='application/octet-stream'
maintype,subtype = ctype.split('/',1)
file_msg=email.MIMEImage.MIMEImage(open(file_name,'rb').read(),subtype)
## 設(shè)置附件頭
basename = os.path.basename(file_name)
file_msg.add_header('Content-Disposition','attachment', filename = basename)#修改郵件頭
main_msg.attach(file_msg)
# 設(shè)置根容器屬性
main_msg['From'] = From
if ReplyToMail!='none':
    main_msg['Reply-to'] = "%s<%s>" % (Header(ReplyToName,"utf-8"),ReplyToMail)
#main_msg['To'] = To
main_msg['Subject'] = subject
main_msg['Date'] = email.Utils.formatdate()
#main_msg['Bcc'] = To
# 得到格式化后的完整文本
fullText = main_msg.as_string()
# 用smtp發(fā)送郵件
try:
    server.sendmail(From, To.split(';'), fullText)
finally:
    server.quit()
    os.remove(file_name)

發(fā)送純文本
復(fù)制代碼 代碼如下:
text_msg = email.MIMEText.MIMEText("xxxx幫你轉(zhuǎn)發(fā)的郵件",_charset="utf-8")
main_msg.attach(text_msg)

或者
復(fù)制代碼 代碼如下:
content=config.get("mail","content")
content=Header(content,"utf-8")#如果加上這一句,郵件發(fā)不出去。其實(shí)下面這句已經(jīng)對(duì)內(nèi)容進(jìn)行了編碼處理。這一句就不要了。
text_msg = email.MIMEText.MIMEText(content,_charset="utf-8")
main_msg.attach(text_msg)

因此,對(duì)于主題、回復(fù)人涉及漢字的,要用Header("xxxx","utf-8")方式進(jìn)行編碼轉(zhuǎn)換。至于內(nèi)容,就不要用Header("xxxx","utf-8")重復(fù)轉(zhuǎn)換了,否則會(huì)出現(xiàn)錯(cuò)誤。

php技術(shù)基于python發(fā)送郵件的亂碼問(wèn)題的解決辦法,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 精品视频在线观看视频免费视频 | 亚洲综合插插 | 伊人222成人综合网 伊人22综合 | 加勒比色 | 中文字幕一区在线观看 | 国内精品区一区二区三 | 在线观看精品视频一区二区三区 | 91精品国产高清久久久久 | 日韩美在线 | 久久久久久综合 | 亚洲精品在线观看91 | 免费啪视频观在线视频在线 | 激情深爱五月 | 色哟哟视频在线观看 | 毛片男人18女人19 | a中文字幕1区 | 亚洲综合插插 | 香港三级欧美国产精品 | 欧美 亚洲 激情 | 亚洲区在线 | 在线视频 二区 | 久精品在线观看 | 国产极品美女在线 | 激情中文网 | 国产精品88 | 91成人影院未满十八勿入 | 久久久噜噜噜久久网 | 就要爱综合 | 看全色黄大色黄女视频 | 激情综合色综合久久综合 | 色综合区 | 男人女人的免费视频网站 | 影音先锋自拍 | 国产swag在线观看 | 91av久久| 欧美在线精品永久免费播放 | 久久国产成人精品国产成人亚洲 | 综合色99 | 国产精品综合在线 | 精品资源在线 | 最新在线观看精品国产福利片 |