python 發郵件亂碼的幾種解決方法

2021-07-11 08:05:07 字數 2182 閱讀 4679

使用python發郵件很簡單,但是遇到亂碼問題很煩惱。

亂碼問題有幾種:有發件人名稱亂碼,有標題亂碼,也有正文亂碼的問題。

發件人亂碼

要解決發件人名稱亂碼問題,可以使用header,如下**:

from email.

header

import

header

from = ("%s") %

(header('拉勾運維幫','utf-8'),)

通過這樣設定發件人之後,發件人的顯示就不會有亂碼的現象了。

郵件主題亂碼問題

郵件主題亂碼有可能是在某些郵箱出現,例如我遇到發給gmail不會亂碼,但是發給sina.cn的郵箱就會亂碼。

要解決郵件主題亂碼的問題需要保證subject必須是unicode,如下:

if

not isinstance(subject,unicode):

subject = unicode(subject)

msg['subject'] = subject

解決郵件正文亂碼問題

首先需要將mimetext指定為utf-8編碼,然後還要設定msg[『accept-language』]和msg[『accept-charset』]兩個屬性,如下**片段:

msg = mimetext(body,format,'utf-8')

msg["accept-language"]="zh-cn"

msg["accept-charset"]="iso-8859-1,utf-8"

解決了以上三個問題,郵件亂碼問題一般就不存在了,但是我的情況是發件人仍然是亂碼,這應該跟作業系統系統有關,因為我在別的機器上測試是木有亂碼的,然後經過查詢,然後將msg[『from』]進行unicode編碼,再增加了下面**,破天荒的解決了

import sys

reload

(sys)

sys.setdefaultencoding

('utf8')

msg['from'] = unicode

("拉勾運維幫"+"<"+mail_user+">")

下面是完整的發郵件**:

import smtplib

from email.mime.text import mimetext

from email.header import header

#下面一行要設定成你自己的郵件伺服器的位址以及使用者名稱密碼發件人資訊

host,user,password,frommail = smtpinfo

defsendmail

(mailto,subject,body,format='plain'):

if isinstance(body,unicode):

body = str(body)

me= ("%s<"+frommail+">") % (header(_mailfrom,'utf-8'),)

msg = mimetext(body,format,'utf-8')

ifnot isinstance(subject,unicode):

subject = unicode(subject)

msg['subject'] = subject

msg['from'] = me

msg['to'] = mailto

msg["accept-language"]="zh-cn"

msg["accept-charset"]="iso-8859-1,utf-8"

try:

s = smtplib.smtp()

s.connect(host)

s.login(user,password)

s.sendmail(me, mailto, msg.as_string())

s.close()

return

true

except exception, e:

print str(e)

return

false

上面的程式測試過傳送到gmail,sina,qq,163以及hotmail,均沒有亂碼問題。

python 發郵件 python發郵件

python提供smtplib模組,該模組定義了乙個smtp客戶端會話物件,可用於使用smtp或esmtp偵聽器守護程式向任何網際網路機器傳送郵件。這是乙個簡單的語法,用來建立乙個smtp物件,稍後將演示如何用它來傳送電子郵件 import smtplib smtpobj smtplib.smtp ...

PYTHON 發郵件(解決MAC OS 中文亂碼)

import smtplib from email.mime.multipart import mimemultipart from email.mime.text import mimetext from email.mime.base import mimebase from utils imp...

Python 實現發郵件

usr bin python coding utf 8 import smtplib from email.mime.text import mimetext from email.header import header 第三方 smtp 服務 mail host smtp.163.com 設定伺...