91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用python發送郵件出現亂碼如何解決

發布時間:2021-02-05 15:48:26 來源:億速云 閱讀:454 作者:Leah 欄目:開發技術

使用python發送郵件出現亂碼如何解決?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

公司項目中需要通過后臺發送郵件,郵件內容包括圖片附件。如果通過PHPmailer發送,由于郵件服務器可能存在延遲現象,通過PHPmailer在調試過程中出現了以下現象:

1、中文與英文字母結合出現亂碼。

2、回復郵件人的姓名兩個漢字正常、但三個漢字就亂碼。這個問題隱藏性強,我到今天才發現這個問題,害的在老板面前兩次犯同樣錯誤。因為我測試OK啊(我姓名兩個字),就是沒有測試三個字的情況,也沒想到問題會出在這里。

3、郵件主題亂碼

4、一切正常,但點擊郵件“回復”時,出現的內容部分亂碼。

5、內容問題解決后,發現回復的姓名也亂碼。而且QQ郵箱正常、foxmail正常、163正常、gmail正常,但outlook亂碼。

調用環境:

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

總之,亂碼問題一直無法完美解決。最后沒有辦法,采用下面方式,終于解決亂碼問題。

在PHP中將發送郵件的內容,比如主題、回復姓名、郵箱、內容等等,寫到配置文件中去,這個配置文件名是隨機的,文件目錄是在PHP的臨時目錄。確保多人使用的情況。然后在PHP中調用python腳本時傳遞配置文件名(含路徑也可以),在python中通過讀取該配置文件來處理。在這種情況下,主題和回復人,也就是涉及漢字部分在163中是亂碼(目前內容部分沒測,已經確定主題及回復人涉及漢字在163郵箱中出現亂碼,但在QQ郵箱中沒有亂碼,一切正常),解決辦法是通過Header("xxxx","utf-8")方式轉為utf8后都正常。

下面分享一下相關代碼:

PHP調用python腳本

復制代碼 代碼如下:


//生成ini配置文件
$sampleData = array(
  'mail' => array(
    'subject' =>'hello,親,你朋友給你發送的郵件-xxx有限公司轉發',
    '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發送郵件腳本

復制代碼 代碼如下:


# -*- 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服務器需要驗證時

# 構造MIMEMultipart對象做為根容器
main_msg = email.MIMEMultipart.MIMEMultipart()
# 構造MIMEText對象做為郵件顯示內容并附加到根容器
text_msg = email.MIMEText.MIMEText("xxx幫你轉發的郵件",_charset="utf-8")
main_msg.attach(text_msg)
# 構造MIMEBase對象做為文件附件內容并附加到根容器
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)
## 設置附件頭
basename = os.path.basename(file_name)
file_msg.add_header('Content-Disposition','attachment', filename = basename)#修改郵件頭
main_msg.attach(file_msg)
# 設置根容器屬性
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發送郵件
try:
    server.sendmail(From, To.split(';'), fullText)
finally:
    server.quit()
    os.remove(file_name)

發送純文本

復制代碼 代碼如下:


text_msg = email.MIMEText.MIMEText("xxxx幫你轉發的郵件",_charset="utf-8")
main_msg.attach(text_msg)


或者

復制代碼 代碼如下:


content=config.get("mail","content")
content=Header(content,"utf-8")#如果加上這一句,郵件發不出去。其實下面這句已經對內容進行了編碼處理。這一句就不要了。
text_msg = email.MIMEText.MIMEText(content,_charset="utf-8")
main_msg.attach(text_msg)

看完上述內容,你們掌握使用python發送郵件出現亂碼如何解決的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沁水县| 甘德县| 元阳县| 五寨县| 五大连池市| 惠水县| 平远县| 西乌珠穆沁旗| 中牟县| 华池县| 南昌县| 中宁县| 福清市| 三台县| 方山县| 安徽省| 固始县| 洛隆县| 资讯| 十堰市| 潼南县| 新龙县| 延长县| 综艺| 博乐市| 本溪| 马尔康县| 田阳县| 苍山县| 永定县| 建德市| 乌兰浩特市| 新蔡县| 牙克石市| 榆中县| 淳安县| 历史| 个旧市| 浦东新区| 南郑县| 天镇县|