python發送郵件

先說好,只是python,沒用到django封裝的類。python

要實現發送郵件功能,要用到兩個類,一是smtplib,用於發郵件,二是MiMEText,用於製做郵件。django

先定義好發信人和收件人的大概信息,以下:服務器

mailto_list=['XXXXXXXXX@qq.com','XXX@163.com']     #收件人列表
mail_host = "smtp.163.com"                   #發送郵件的郵箱的smtp服務器地址
mail_user = "username"                       #用戶名
mail_pass = "password"                       #密碼
mail_postfix = "163.com"                     #發信人郵箱的後綴    

定義一個發送郵件的函數:函數

def send_mail(to_list,subject,content):
    me = "Hello"+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEText(content,_subtype='plain',_charset='utf-8')
    msg['Subject'] = subject                     #主題
    msg['Form'] = me                          #from,發件人
    msg['To'] = ";".join(to_list)                 #to,收件人
    try:
server
= smtplib.SMTP() server.connect(mail_host)                 #鏈接到發送郵件的服務器 server.login(mail_user,mail_pass)            #用戶登陸 server.sendmail(me,to_list,msg.as_string())      #發郵件 server.close()                       #關閉鏈接   return True except Exception,e: print str(e) return False

而後直接調用該函數,post

if send_mail(mailto_list,'你好','你好啊'):
    print("Done")
else:
    print('Fail')

作到這個程度,可是發送郵件失敗,提示了一個錯誤:User has no permission,這個是郵箱的問題,去郵箱頁面-->設置-->POP3/SMTP/IMAP(個人是163郵箱),把這三個服務都開啓就好。編碼

能發送郵件了。spa

可是爲何會這樣code

,亂碼了。那就修改一下代碼。orm

先規定主題的字符編碼格式:server

if send_mail(mailto_list,u'你好',u'你好啊'):

 

第二手準備:

 
 
def send_mail(to_list,sub,content):
  if not isinstance(subject,unicode)
    sub = unicode(subject)

 

這樣主題就ok了,其次是發件人

me = ("%s<XXXXXXXX@163.com>") % (Header('我是發件人名字','utf-8'),)

 

最後是文件內容:

msg = MIMEText(content,_subtype='plain',_charset='utf-8')
msg["Accept-Language"]="zh-CN"
msg["Accept-Charset"]="ISO-8859-1,utf-8"

 

MIMEText的charset設置爲utf-8,還有規定接收的語言和編碼方式。

至此,基本上亂碼問題就解決啦。

相關文章
相關標籤/搜索