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

2021-07-11 08:05:07 字數 1736 閱讀 7575

使用python發郵件很簡單,但是遇到亂碼問題很煩惱。 亂碼問題有幾種:有發件人名稱亂碼,有標題亂碼,也有正文亂碼的問題。

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

from email.header import header

from = (「%[email protected]」) % (header(『outofmemory.cn管理員』,』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"

解決了以上三個問題,郵件亂碼問題就不存在了,下面是完整的發郵件**:

import smtplib

from email.mime.text import mimetext

from email.header import header

host,user,password,frommail = smtpinfo

def sendmail(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')

if not 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發郵件很簡單,但是遇到亂碼問題很煩惱。亂碼問題有幾種 有發件人名稱亂碼,有標題亂碼,也有正文亂碼的問題。發件人亂碼 要解決發件人名稱亂碼問題,可以使用header,如下 from email.header import header from s header 拉勾運維幫 utf 8...

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...

python3 新式郵件寫法 附件亂碼 解決

import sys import re import mimetypes import base64 import traceback from pathlib import purepath from datetime import date from calendar import month...