1. 程式人生 > >python 電子郵件

python 電子郵件

POP:

第一個用於下載郵件的協議稱為郵局協議(Post Office Protocal,POP)。

POP的目的是讓使用者的工作站可以訪問郵箱伺服器 裡的郵件,並在工作站中,通過簡單郵件傳輸協議(SMTP)將郵件傳送到郵件伺服器”。POP 協議的最新版本是第 3 版,也稱為 POP3。

IMAP :

IMAP 旨在提供比 POP 更完整的解決方案,但它也因此比 POP 更復雜。例如,IMAP 非 常適合今天的需要,因為使用者需要通過不同的裝置使用電子郵件,如桌上型電腦、膝上型電腦、 平板電腦、手機、視訊遊戲系統等。POP 無法很好地應對多郵件客戶端,儘管 POP 應用依然 廣泛,但大部分情況下已經被廢棄了。注意,許多 ISP 當前只提供 POP 來接收(用 SMTP 發 送)郵件。希望今後 IMAP 能得到更多應用。

# -*- coding:utf-8 -*-
'''兩個建立電子郵件訊息的示例,即 make_mpa_msg()和 make_img_msg(),
兩者都建立了一條帶有附件的電子郵件訊息。前者建立併發送了一條多部分訊息,後者建立
併發送了一條電子郵件訊息,其中含有一幅圖片。'''
#這個python2 指令碼建立併發送了兩種不同型別的電子郵件訊息
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from smtplib import SMTP
#mutipart alternative: text and html
def make_mpa_msg():
    email = MIMEMultipart('alternatice')
    text = MIMEText('Hello World! \r\n','plain')
    email.attach(text)
    html = MIMEText(
        '<html><body><h4>Hello World!</h4>'
        '</body></html>','html')
    email.attach(html)
    return email
"""多部分選擇訊息通常包含兩部分,一是以純文字表示的郵件訊息正文,以及等價的 HTML
格式。由郵件客戶端來決定顯示哪一部分。例如,基於 Web 的電子郵件系統會顯示 HTML
版本,而基於命令列的郵件閱讀器只會顯示純文字版本。
為了建立這種型別的訊息,需要使用 email.mime.multiple.MIMEMultipart 類,並傳遞
alternative 作為唯一的引數來例項化這個類。如果不傳遞這個引數,則前面的純文字和 HTML
會分別作為訊息中的附件,這種情況下,有些郵件系統會同時顯示這兩部分的內容。
這兩部分都會用到 email.mime.text.MIMEText 類,因為這兩部分內容都是純文字。每個
部分都要附加到郵件中,因為這兩部分是在郵件建立之後才建立的。"""

# multipart:images
def make_img_msg(fn):
    f = open(fn,'r')
    data = f.read()
    f.close()
    email = MIMEImage(data, name=fn)
    email.add_header('Content-Disposition',
                     'attachment;filename="%s' % fn)
    return email
"""make_img_msg()函式使用一個檔名作為引數。使用檔案中的資料生成一個新的
email.mime.image.MIMEImage 例項。新增一個 Content-Disposition 頭,接著將訊息返回給使用者。"""

def sendMsg(fr, to, msg):
    s = SMTP('localhost')
    errs = s.sendmail(fr, to, msg)
    s.quit()
"""sendMsg()的唯一目的是獲取基本的電子郵件傳送資訊(發件人、收件人、訊息正文),
接著傳送訊息,然後返回給呼叫者。
要檢視更詳盡的輸出內容,可以試試這個擴充套件:s.set_debuglevel(True),其中 s 是 smtplib.SMTP
伺服器。最終,與前面一樣,因為許多 SMTP 伺服器需要登入,所以需要在這裡登入(在登入
之後,傳送電子郵件訊息之前)。"""

if __name__ == '__main__':
    print 'Sending multipart alternative msg ...'
    msg = make_mpa_msg()
    msg['From'] = SENDER
    msg['To'] = ', '.join(RECIPS)
    msg['Subject'] = 'multipart alternative test'
    sendMsg(SENDER, RECIPS, msg.as_string())

    print 'Sending image msg...'
    msg = make_img_msg(SOME_IMG_FILE)

    msg['From'] = SENDER
    msg['To'] = ', '.join(RECIPS)

"""這是這段指令碼的主要部分,它僅僅測試這兩個函式。用這兩個函式建立訊息,然後新增
From、To、Subject 欄位,然後將訊息傳送給這些收件人。當然,為了讓應用能夠工作,需要
填充下面的欄位:SENDER、RECIPS、SOME_IMG_FILE。"""