python郵件模塊
A. python怎麼安裝sendmail
Python已經被移植在許多平台上(經過改動使它能夠工作在不同平台上)。
您需要下載適用於您使用平台的二進制代碼,然後安裝Python。
如果您平台的二進制代碼是不可用的,你需要使用C編譯器手動編譯源代碼。
編譯的源代碼,功能上有更多的選擇性, 為python安裝提供了更多的靈活性。。。
B. python電子郵件系列(三)之POP接收郵件
由上篇文章我們已經得知郵件從發送到接收的過程:
發件人->MUA->MTA->若干MTA->MDA->MUA->收件人
本節接收郵件主要就是編寫一個 MUA 客戶端,從 MDA 將郵件取回本地。
收取郵件最常用的是 POP協議 ,目前版本是第三版,也稱 POP3 。python內置了 poplib 模塊,支持POP3協議。
回想上一節 SMTP ,我們對要發送的郵件內容進行了各種編碼,包括添加MIME header,編碼之後再進行發送。
因此,我們通過POP3協議接收的也不是原內容,而是經過一系列編碼等處理的文本。
所以,要想把POP3收取的文本變為可閱讀的郵件對象,就需要利用 email 模塊對原始郵件進行解析。
所以,郵件收取的流程就是:
由上一篇 文章 最後總結部分可知。郵件由字元到發送到網路經歷了如下的格式轉化:
純文本:
str->bytes->base64->str->bytes
二進制文件:
binary code->base64->str->bytes
我們解析郵件也是按這個思路,逆序解析出內容。
這里的 decode('utf-8') 先把位元組流轉化為字元串,再將字元串轉化為 message 結構的對象。這步與發送郵件的 as_string 函數相反。
先從上一節結構化的 msg 中取出信件頭,列印出來。
如果是 multipart 結構, get_payload 函數會返回一個包含不同part的list,然後對每一part遞歸調用 print_info ,列印子信件頭和子信件內容。
不是 multipart 時,之後再依據 Content-Type 作不同處理:
如果是 text :
利用 get_payload(decode = Ture) 取出子信件的內容, decode 為True,則按照 Content-Transfer-Type 將 base64 或 QP 解碼為 bytes 。
再 guess_charset 猜出編碼方式,之後將其解碼為字元顯示。
如果不是 Text 對象,則為附件:
列印出附件的 Content-Type 。
C. 如何通過python自動發郵件
通過Python自動發送郵件可以利用內置的`smtplib`庫或更高級封裝庫`yagmail`。以下是基本步驟指南和使用`smtplib`庫的示例代碼。
### 使用 `smtplib` 庫發送郵件的基本步驟
1. **導入模塊**
python
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
2. **設置郵件內容**
使用`MIMEMultipart`創建郵件對象,添加發件人、收件人、主題和正文。
python
msg = MIMEMultipart()
msg['From'] = '發件人郵箱地址'
msg['To'] = '收件人郵箱地址'
msg['Subject'] = '郵件主題'
# 郵件正文(純文本)
body = '這是郵件正文'
msg.attach(MIMEText(body, 'plain', 'utf-8'))
3. **添加附件(如需)**
讀取文件並作為附件添加到郵件中。
python
with open('附件路徑', 'rb') as f:
attachment = MIMEApplication(f.read(), _subtype='pdf')
attachment.add_header('Content-Disposition', 'attachment', filename='附件名.pdf')
msg.attach(attachment)
4. **連接SMTP伺服器並身份驗證**
選擇合適的SMTP伺服器和埠連接,輸入郵箱地址和密碼或授權碼。
python
server = smtplib.SMTP_SSL('smtp.qq.com', 465) # 其他服務商使用相應SMTP伺服器和埠
server.login('發件人郵箱地址', '授權碼或密碼') # 使用授權碼而非原始密碼
5. **發送郵件**
使用`server.sendmail`函數發送郵件。
python
server.sendmail(msg['From'], msg['To'], msg.as_string())
6. **斷開連接**
結束與SMTP伺服器的連接。
python
server.quit()
### 使用 `yagmail` 庫簡化發送郵件
首先,使用`pip install yagmail`安裝庫。
使用`yagmail`發送郵件示例:
python
import yagmail
# 初始化yagmail客戶端
yag = yagmail.SMTP(user='發件人郵箱地址', password='授權碼')
# 發送郵件
contents = ['郵件正文']
to = ['收件人郵箱地址']
subject = '郵件主題'
yag.send(to=to, subject=subject, contents=contents)
# 如果有附件,可以直接在contents中添加文件路徑
attachments = ['附件路徑']
yag.send(to=to, subject=subject, contents=contents, attachments=attachments)
確保你已獲取合適的SMTP服務地址、埠信息及授權碼,郵件服務通常支持SSL加密,SMTP_SSL埠為465。調整示例代碼以匹配實際需求。