1. 程式人生 > >python 發送郵件(收到的郵件要有發送方才能回復)

python 發送郵件(收到的郵件要有發送方才能回復)

turn als password port 編碼格式 方法 n) multi 打開

Python使用SMTP(簡單郵件傳輸協議)發送郵件
普通文本郵件
普通文本郵件發送的實現,關鍵是要將MIMEText中_subtype設置為plain
## -*- coding: UTF-8 -*-
import smtplib
from email.mime.text import MIMEText#導入MIMEText類
from email import encoders
from email.header import Header
from email.utils import parseaddr, formataddr


mail_host="smtp.163.com"#使用的郵箱的smtp服務器地址,這裏是163的smtp地址
mail_user=raw_input("你的163郵箱: ")#發送方郵箱
mail_pass=raw_input("郵箱授權碼: ") #授權碼
mail_postfix="163.com"#郵箱的後綴,網易就是163.com
mail_from = raw_input("來自: ")  #發送方昵稱
mail_sub = raw_input("郵件主題: ")  #郵件主題
mail_content = raw_input("內容: ")

def send_mail(sub,content):
    me=mail_from+"<"+mail_user+">"
    msg = MIMEText(content,‘plain‘,‘utf-8‘)#郵件正文,subtype(文本是plain),編碼格式
    msg[‘Subject‘] = sub
    msg[‘From‘] = me
    to_list = map(None,raw_input("mail_to: ").split(" "))#可以群發
    msg[‘To‘] = ",".join(to_list)#將收件人列表以‘,’分隔
    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
if send_mail(mail_sub , mail_content):  #郵件主題和郵件內容  
    print "done!"
else:
    print "failed!"

MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名的文件用一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開。多用於指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。 
它是一個互聯網標準,擴展了電子郵件標準,使其能夠支持: 
非ASCII字符文本;非文本格式附件(二進制、聲音、圖像等);由多部分(multiple parts)組成的消息體;包含非ASCII字符的頭信息(Header information)。 
這個標準被定義在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等RFC中。 MIME改善了由RFC 822轉變而來的RFC 2822,這些舊標準規定電子郵件標準並不允許在郵件消息中使用7位ASCII字符集以外的字符。正因如此,一些非英語字符消息和二進制文件,圖像,聲音等非文字消息原本都不能在電子郵件中傳輸(MIME可以)。MIME規定了用於表示各種各樣的數據類型的符號化方法。 此外,在萬維網中使用的HTTP協議中也使用了MIME的框架,標準被擴展為互聯網媒體類型。

import smtplib
from email.mime.text import MIMEText

#用來格式化郵件地址
from email.header import Header
from email.utils import parseaddr, formataddr

msg = MIMEText(‘別人的容忍不是讓你踐踏的!!‘, ‘plain‘, ‘utf-8‘)

# 輸入Email地址和口令:
from_addr = raw_input(‘From(163郵箱): ‘)

#這裏的密碼一定是授權碼,163郵箱原始密碼不行。
password = raw_input(‘授權碼: ‘)

# 輸入SMTP服務器地址:這裏我們用smtp.163.com
#smtp_server = raw_input(‘SMTP server: ‘)
smtp_server = "smtp.163.com"

# 輸入收件人地址:
to_addr = raw_input(‘To: ‘)

 

def _format_addr(s):
name, addr = parseaddr(s)#這個函數會解析出姓名和郵箱地址
return formataddr(( Header(name, ‘utf-8‘).encode(), addr.encode(‘utf-8‘) if isinstance(addr, unicode) else addr))

def send_mail():
#設置發件人,收件人姓名和郵件主題
msg[‘From‘] = _format_addr(u‘joker <%s>‘ % from_addr)
msg[‘To‘] = _format_addr(u‘朋友 <%s>‘ % to_addr)
msg[‘Subject‘] = Header(u‘測試郵件‘, ‘utf-8‘).encode()

server = smtplib.SMTP(smtp_server, 25) # SMTP協議默認端口是25

#server.set_debuglevel(1)#打印出和SMTP服務器交互的所有信息

server.login(from_addr, password)#登錄服務器

#發送郵件,這裏第二個參數是個列表,可以有多個收件人
#郵件正文是一個str,as_string()把MIMEText對象變成str
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
return True

if send_mail():
print "done!"

技術分享圖片

python 發送郵件(收到的郵件要有發送方才能回復)