可以使用Python的email模塊來實現帶有附件的郵件的發送。
SMTP (Simple Mail Transfer Protocol)
郵件傳送代理 (Mail Transfer Agent,MTA) 程序使用SMTP協議來發送電郵到接收者的郵件服務器。SMTP協議只能用來發送郵件,不能用來接收郵件。大多數的郵件發送服務器 (Outgoing Mail Server) 都是使用SMTP協議。SMTP協議的默認TCP端口號是25。
SMTP協議的一個重要特點是它能夠接力傳送郵件。它工作在兩種情況下:一是電子郵件從客戶機傳輸到服務器;二是從某一個服務器傳輸到另一個服務器。
POP3 (Post Office Protocol) & IMAP (Internet Message Access Protocol)
POP協議和IMAP協議是用于郵件接收的最常見的兩種協議。幾乎所有的郵件客戶端和服務器都支持這兩種協議。
POP3協議為用戶提供了一種簡單、標準的方式來訪問郵箱和獲取電郵。使用POP3協議的電郵客戶端通常的工作過程是:連接服務器、獲取所有信息并保存在用戶主機、從服務器刪除這些消息然后斷開連接。POP3協議的默認TCP端口號是110。
IMAP協議也提供了方便的郵件下載服務,讓用戶能進行離線閱讀。使用IMAP協議的電郵客戶端通常把信息保留在服務器上直到用戶顯式刪除。這種特性使得多個客戶端可以同時管理一個郵箱。IMAP協議提供了摘要瀏覽功能,可以讓用戶在閱讀完所有的郵件到達時間、主題、發件人、大小等信息后再決定是否下載。IMAP協議的默認TCP端口號是143。
郵件格式 (RFC 2822)
每封郵件都有兩個部分:郵件頭和郵件體,兩者使用一個空行分隔。
郵件頭每個字段 (Field) 包括兩部分:字段名和字段值,兩者使用冒號分隔。有兩個字段需要注意:From和Sender字段。From字段指明的是郵件的作者,Sender字段指明的是郵件的發送者。如果From字段包含多于一個的作者,必須指定Sender字段;如果From字段只有一個作者并且作者和發送者相同,那么不應該再使用Sender字段,否則From字段和Sender字段應該同時使用。
郵件體包含郵件的內容,它的類型由郵件頭的Content-Type字段指明。RFC 2822定義的郵件格式中,郵件體只是單純的ASCII編碼的字符序列。
MIME (Multipurpose Internet Mail Extensions) (RFC 1341)
MIME擴展郵件的格式,用以支持非ASCII編碼的文本、非文本附件以及包含多個部分 (multi-part) 的郵件體等。
Python email模塊
1. class email.message.Message
__getitem__,__setitem__實現obj[key]形式的訪問。
Msg.attach(playload): 向當前Msg添加playload。
Msg.set_playload(playload): 把整個Msg對象的郵件體設成playload。
Msg.add_header(_name, _value, **_params): 添加郵件頭字段。
2. class email.mime.base.MIMEBase(_maintype, _subtype, **_params)
所有MIME類的基類,是email.message.Message類的子類。
3. class email.mime.multipart.MIMEMultipart()
在3.0版本的email模塊 (Python 2.3-Python 2.5) 中,這個類位于email.MIMEMultipart.MIMEMultipart。
這個類是MIMEBase的直接子類,用來生成包含多個部分的郵件體的MIME對象。
4. class email.mime.text.MIMEText(_text)
使用字符串_text來生成MIME對象的主體文本。
代碼實現
利用python的smtplib庫實現郵件發送
郵件可以發送了
然后學習了一點定義msg
python中有幾個類庫生成豐富的msg格式
總結一個簡單的MIMEText,可以編輯許多郵件頭信息,也可以編輯郵件格式
from email.MIMEText import MIMEText
msg=MIMEText("要發送的內容","格式,例如:html,plain","編碼,例如:gb2312,utf-8")
msg['From']='郵件中顯示的發送方的名字'
msg['To']='郵件中顯示收件方的名字'
msg['Subject']='郵件標題'
這些都可以不設置
新聞熱點
疑難解答
圖片精選