可以使用Python的email模塊來實(shí)現(xiàn)帶有附件的郵件的發(fā)送。
SMTP (Simple Mail Transfer Protocol)
郵件傳送代理 (Mail Transfer Agent,MTA) 程序使用SMTP協(xié)議來發(fā)送電郵到接收者的郵件服務(wù)器。SMTP協(xié)議只能用來發(fā)送郵件,不能用來接收郵件。大多數(shù)的郵件發(fā)送服務(wù)器 (Outgoing Mail Server) 都是使用SMTP協(xié)議。SMTP協(xié)議的默認(rèn)TCP端口號是25。
SMTP協(xié)議的一個重要特點(diǎn)是它能夠接力傳送郵件。它工作在兩種情況下:一是電子郵件從客戶機(jī)傳輸?shù)椒?wù)器;二是從某一個服務(wù)器傳輸?shù)搅硪粋€服務(wù)器。
POP3 (Post Office Protocol) & IMAP (Internet Message Access Protocol)
POP協(xié)議和IMAP協(xié)議是用于郵件接收的最常見的兩種協(xié)議。幾乎所有的郵件客戶端和服務(wù)器都支持這兩種協(xié)議。
POP3協(xié)議為用戶提供了一種簡單、標(biāo)準(zhǔn)的方式來訪問郵箱和獲取電郵。使用POP3協(xié)議的電郵客戶端通常的工作過程是:連接服務(wù)器、獲取所有信息并保存在用戶主機(jī)、從服務(wù)器刪除這些消息然后斷開連接。POP3協(xié)議的默認(rèn)TCP端口號是110。
IMAP協(xié)議也提供了方便的郵件下載服務(wù),讓用戶能進(jìn)行離線閱讀。使用IMAP協(xié)議的電郵客戶端通常把信息保留在服務(wù)器上直到用戶顯式刪除。這種特性使得多個客戶端可以同時(shí)管理一個郵箱。IMAP協(xié)議提供了摘要瀏覽功能,可以讓用戶在閱讀完所有的郵件到達(dá)時(shí)間、主題、發(fā)件人、大小等信息后再決定是否下載。IMAP協(xié)議的默認(rèn)TCP端口號是143。
郵件格式 (RFC 2822)
每封郵件都有兩個部分:郵件頭和郵件體,兩者使用一個空行分隔。
郵件頭每個字段 (Field) 包括兩部分:字段名和字段值,兩者使用冒號分隔。有兩個字段需要注意:From和Sender字段。From字段指明的是郵件的作者,Sender字段指明的是郵件的發(fā)送者。如果From字段包含多于一個的作者,必須指定Sender字段;如果From字段只有一個作者并且作者和發(fā)送者相同,那么不應(yīng)該再使用Sender字段,否則From字段和Sender字段應(yīng)該同時(shí)使用。
郵件體包含郵件的內(nèi)容,它的類型由郵件頭的Content-Type字段指明。RFC 2822定義的郵件格式中,郵件體只是單純的ASCII編碼的字符序列。
MIME (Multipurpose Internet Mail Extensions) (RFC 1341)
MIME擴(kuò)展郵件的格式,用以支持非ASCII編碼的文本、非文本附件以及包含多個部分 (multi-part) 的郵件體等。
Python email模塊
1. class email.message.Message
__getitem__,__setitem__實(shí)現(xiàn)obj[key]形式的訪問。
Msg.attach(playload): 向當(dāng)前Msg添加playload。
Msg.set_playload(playload): 把整個Msg對象的郵件體設(shè)成playload。
Msg.add_header(_name, _value, **_params): 添加郵件頭字段。
2. class email.mime.base.MIMEBase(_maintype, _subtype, **_params)
所有MIME類的基類,是email.message.Message類的子類。
新聞熱點(diǎn)
疑難解答
圖片精選