欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python標(biāo)準(zhǔn)庫中email模塊的使用方法與內(nèi)部機(jī)制詳解

 更新時間:2025年06月11日 09:55:48   作者:蕭鼎  
在 Python 中處理電子郵件時,標(biāo)準(zhǔn)庫中的 email 模塊是首選工具,無論你需要發(fā)送 HTML 格式的郵件、帶附件的郵件,還是解析復(fù)雜的郵件結(jié)構(gòu),email 庫都能勝任,這篇博客將帶你系統(tǒng)地認(rèn)識并掌握 email 模塊的使用方法與內(nèi)部機(jī)制,需要的朋友可以參考下

一、什么是 email 模塊?

email 是 Python 內(nèi)置的標(biāo)準(zhǔn)庫,用于構(gòu)建或解析符合 RFC 5322 標(biāo)準(zhǔn)的電子郵件。該模塊支持:

  • 構(gòu)建 MIME(Multipurpose Internet Mail Extensions)郵件,包括多部分郵件(multipart)、附件、文本/HTML 內(nèi)容等。
  • 解碼和解析原始郵件(如 .eml 文件、POP3/IMAP 下載的數(shù)據(jù)等)。
  • 支持編碼(Base64、Quoted-Printable)、字符集處理、多語言兼容等。

該模塊最早出現(xiàn)在 Python 2.2,經(jīng)過多次迭代,在 Python 3 中已高度模塊化和現(xiàn)代化,使用更加清晰直觀。

二、模塊結(jié)構(gòu)與核心組件

Python 的 email 庫結(jié)構(gòu)如下:

  • email.message: 定義郵件的結(jié)構(gòu)(如 EmailMessage 類)。
  • email.mime: MIME 類型構(gòu)建工具包,如 MIMEText、MIMEImageMIMEMultipart。
  • email.parser: 用于解析原始郵件字符串為 Message 對象。
  • email.generator: 用于將 Message 對象生成字符串或?qū)懭胛募?/li>
  • email.utils: 提供通用工具函數(shù),如地址解析、時間格式化等。

三、構(gòu)建電子郵件

3.1 創(chuàng)建純文本郵件

from email.message import EmailMessage

msg = EmailMessage()
msg['Subject'] = '測試郵件'
msg['From'] = 'sender@example.com'
msg['To'] = 'receiver@example.com'
msg.set_content('這是純文本郵件內(nèi)容')

print(msg.as_string())

3.2 創(chuàng)建 HTML 郵件

msg = EmailMessage()
msg['Subject'] = 'HTML 郵件'
msg['From'] = 'sender@example.com'
msg['To'] = 'receiver@example.com'

msg.set_content('這是純文本備用內(nèi)容')
msg.add_alternative("""
<html>
  <body>
    <h1 style="color:blue">這是一封 HTML 郵件</h1>
  </body>
</html>
""", subtype='html')

3.3 添加附件

with open('demo.pdf', 'rb') as f:
    file_data = f.read()
    file_name = f.name

msg.add_attachment(file_data, maintype='application', subtype='pdf', filename=file_name)

四、解析電子郵件

email 支持將原始郵件(如 .eml 文件)解析成結(jié)構(gòu)化對象:

4.1 解析原始郵件內(nèi)容

from email import policy
from email.parser import BytesParser

with open('sample.eml', 'rb') as f:
    msg = BytesParser(policy=policy.default).parse(f)

print('Subject:', msg['subject'])
print('From:', msg['from'])
print('To:', msg['to'])

4.2 遍歷多部分郵件內(nèi)容

if msg.is_multipart():
    for part in msg.iter_parts():
        content_type = part.get_content_type()
        content = part.get_content()
        print(f'Part: {content_type}\nContent:\n{content}\n')
else:
    print(msg.get_content())

五、常見 MIME 類型

類型說明
text/plain純文本郵件
text/htmlHTML 郵件
multipart/mixed多部分郵件,通常包含附件
multipart/alternative文本 + HTML 備用格式
application/octet-stream任意二進(jìn)制附件
image/jpeg / image/png嵌入圖像

你可以使用 email.mime.* 中的各類構(gòu)造器快速創(chuàng)建這些類型:

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

六、與 smtplib 聯(lián)合發(fā)送郵件

雖然 email 負(fù)責(zé)構(gòu)建郵件,但實際發(fā)送需要結(jié)合 smtplib

import smtplib

with smtplib.SMTP_SSL('smtp.example.com', 465) as smtp:
    smtp.login('user@example.com', 'password')
    smtp.send_message(msg)

七、常用工具函數(shù)(email.utils)

from email.utils import parseaddr, formataddr, format_datetime
from datetime import datetime, timezone

name, email = parseaddr("小明 <xiaoming@example.com>")
print(name, email)

# 格式化地址
print(formataddr(("測試人", "test@example.com")))

# 格式化時間為郵件頭格式
print(format_datetime(datetime.now(timezone.utc)))

八、完整示例:發(fā)送帶附件的 HTML 郵件

from email.message import EmailMessage
import smtplib

msg = EmailMessage()
msg['Subject'] = '周報'
msg['From'] = 'sender@example.com'
msg['To'] = 'receiver@example.com'

# 添加 HTML 正文
msg.set_content('請查看 HTML 格式郵件')
msg.add_alternative("""
<html>
  <body>
    <p>您好,</p>
    <p>這是本周的周報,請查收附件。</p>
  </body>
</html>
""", subtype='html')

# 添加附件
with open('report.pdf', 'rb') as f:
    msg.add_attachment(f.read(), maintype='application', subtype='pdf', filename='report.pdf')

# 發(fā)送郵件
with smtplib.SMTP_SSL('smtp.example.com', 465) as smtp:
    smtp.login('sender@example.com', 'password')
    smtp.send_message(msg)

九、調(diào)試技巧

  • 使用 .as_string() 打印構(gòu)造后的郵件內(nèi)容以調(diào)試;
  • 若郵件亂碼,需設(shè)置 charset='utf-8';
  • 多部分郵件優(yōu)先順序:multipart/alternative 由客戶端選擇最合適顯示;
  • 若調(diào)試發(fā)送失敗,可打開 smtplib 的調(diào)試日志:smtp.set_debuglevel(1)。

十、總結(jié)

Python 的 email 模塊功能強大、標(biāo)準(zhǔn)化程度高,適合處理各種郵件構(gòu)建與解析任務(wù)。掌握它不僅可以讓你自動化報告發(fā)送、實現(xiàn)客服回復(fù)系統(tǒng)、構(gòu)建郵件網(wǎng)關(guān),還能與 SMTP/IMAP/POP3 模塊聯(lián)動開發(fā)出郵件相關(guān)應(yīng)用。

以上就是Python標(biāo)準(zhǔn)庫中email模塊的使用方法與內(nèi)部機(jī)制詳解的詳細(xì)內(nèi)容,更多關(guān)于Python email模塊使用方法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 解析庫json及jsonpath pickle的實現(xiàn)

    Python 解析庫json及jsonpath pickle的實現(xiàn)

    這篇文章主要介紹了Python 解析庫json及jsonpath pickle的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Python面向?qū)ο笏枷肱c應(yīng)用入門教程【類與對象】

    Python面向?qū)ο笏枷肱c應(yīng)用入門教程【類與對象】

    這篇文章主要介紹了Python面向?qū)ο笏枷肱c應(yīng)用,較為詳細(xì)的分析了Python面向?qū)ο笏枷肱c原理,并結(jié)合實例形式分析了類與對象相關(guān)定義、用法及操作注意事項,需要的朋友可以參考下
    2019-04-04
  • Python利用shutil實現(xiàn)拷貝文件功能

    Python利用shutil實現(xiàn)拷貝文件功能

    shutil?是一個?Python?內(nèi)置模塊,該模塊對文件的復(fù)制、刪除和壓縮等操作都提供了非常方便的支持。本文將利用shutil實現(xiàn)拷貝文件功能,需要的可以參考一下
    2022-07-07
  • python的列表生成式,生成器和generator對象你了解嗎

    python的列表生成式,生成器和generator對象你了解嗎

    這篇文章主要為大家詳細(xì)介紹了python的列表生成式,生成器和generator對象,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Python traceback模塊獲取異常信息的使用

    Python traceback模塊獲取異常信息的使用

    Python的traceback模塊提供了多種方法來獲取和展示異常的堆棧信息,本文主要介紹了Python traceback模塊獲取異常信息的使用,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Python中實例化class的執(zhí)行順序示例詳解

    Python中實例化class的執(zhí)行順序示例詳解

    這篇文章主要給大家介紹了關(guān)于Python中實例化class的執(zhí)行順序的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • python數(shù)據(jù)分析基礎(chǔ)知識之shape()函數(shù)的使用教程

    python數(shù)據(jù)分析基礎(chǔ)知識之shape()函數(shù)的使用教程

    shape函數(shù)是numpy.core.fromnumeric中的函數(shù),它的功能是讀取矩陣的長度,比如shape[0]就是讀取矩陣第一維度的長度,下面這篇文章主要給大家介紹了關(guān)于python數(shù)據(jù)分析基礎(chǔ)知識之shape()函數(shù)使用的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Pandas讀取csv的實現(xiàn)

    Pandas讀取csv的實現(xiàn)

    本文主要介紹了Pandas讀取csv的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Python實現(xiàn)滑塊拼圖驗證碼詳解

    Python實現(xiàn)滑塊拼圖驗證碼詳解

    驗證碼作為一種自然人的機(jī)器人的判別工具,被廣泛的用于各種防止程序做自動化的場景中。傳統(tǒng)的字符型驗證安全性已經(jīng)名存實亡的情況下,各種新型的驗證碼如雨后春筍般涌現(xiàn),今天給大家分享一篇Python實現(xiàn)滑塊驗證碼
    2022-05-05
  • Python中實現(xiàn)對list做減法操作介紹

    Python中實現(xiàn)對list做減法操作介紹

    這篇文章主要介紹了Python中實現(xiàn)對list做減法操作介紹,需要的朋友可以參考下
    2015-01-01

最新評論