最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、什么是 email 模塊?

email 是 Python 內(nèi)置的標(biāo)準(zhǔn)庫(kù),用于構(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)、字符集處理、多語(yǔ)言兼容等。

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

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

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

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

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

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

from email.message import EmailMessage

msg = EmailMessage()
msg['Subject'] = '測(cè)試郵件'
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)化對(duì)象:

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 類型

類型說(shuō)明
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)建郵件,但實(shí)際發(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(("測(cè)試人", "test@example.com")))

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

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

from email.message import EmailMessage
import smtplib

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

# 添加 HTML 正文
msg.set_content('請(qǐng)查看 HTML 格式郵件')
msg.add_alternative("""
<html>
  <body>
    <p>您好,</p>
    <p>這是本周的周報(bào),請(qǐng)查收附件。</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 模塊功能強(qiáng)大、標(biāo)準(zhǔn)化程度高,適合處理各種郵件構(gòu)建與解析任務(wù)。掌握它不僅可以讓你自動(dòng)化報(bào)告發(fā)送、實(shí)現(xiàn)客服回復(fù)系統(tǒng)、構(gòu)建郵件網(wǎng)關(guān),還能與 SMTP/IMAP/POP3 模塊聯(lián)動(dòng)開發(fā)出郵件相關(guān)應(yīng)用。

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

相關(guān)文章

  • Python3中FuzzyWuzzy庫(kù)實(shí)例用法

    Python3中FuzzyWuzzy庫(kù)實(shí)例用法

    在本篇文章中小編給各位整理了關(guān)于Python3z中FuzzyWuzzy庫(kù)實(shí)例用法及相關(guān)代碼,有興趣的朋友們可以參考下。
    2020-11-11
  • django模型層(model)進(jìn)行建表、查詢與刪除的基礎(chǔ)教程

    django模型層(model)進(jìn)行建表、查詢與刪除的基礎(chǔ)教程

    這篇文章主要給大家介紹了關(guān)于django模型層(model)進(jìn)行建表、查詢與刪除的等基礎(chǔ)操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • python和flask中返回JSON數(shù)據(jù)的方法

    python和flask中返回JSON數(shù)據(jù)的方法

    下面小編就為大家整理了一篇python和flask中返回JSON數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Python實(shí)現(xiàn)PDF轉(zhuǎn)MP3的示例代碼

    Python實(shí)現(xiàn)PDF轉(zhuǎn)MP3的示例代碼

    我們平??吹胶芏辔募际荘DF格式,網(wǎng)上的各類書籍多為此格式。有時(shí)候不方便閱讀,或者怕費(fèi)眼睛傷頸椎,那么有沒有一種方法可以把它變?yōu)橐纛l,本文就來(lái)和大家詳細(xì)講講
    2023-05-05
  • Python 3.x 連接數(shù)據(jù)庫(kù)示例(pymysql 方式)

    Python 3.x 連接數(shù)據(jù)庫(kù)示例(pymysql 方式)

    這篇文章主要介紹了Python 3.x 連接數(shù)據(jù)庫(kù)示例(pymysql 方式),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • 詳述numpy中的np.random.random()系列函數(shù)用法

    詳述numpy中的np.random.random()系列函數(shù)用法

    本文主要介紹了詳述numpy中的np.random.random()系列函數(shù)用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python字典基本操作實(shí)例分析

    python字典基本操作實(shí)例分析

    這篇文章主要介紹了python字典基本操作,實(shí)例分析了Python的打印輸出、刪除、賦值等常用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Python利用多線程同步鎖實(shí)現(xiàn)多窗口訂票系統(tǒng)(推薦)

    Python利用多線程同步鎖實(shí)現(xiàn)多窗口訂票系統(tǒng)(推薦)

    這篇文章主要介紹了Python利用多線程同步鎖實(shí)現(xiàn)多窗口訂票系統(tǒng),主要是利用threading.lock()通過(guò)實(shí)例代碼相結(jié)合給大家講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python必考的5道面試題集合

    Python必考的5道面試題集合

    這篇文章介紹了Python必考的5道面試題,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • python中CURL 和python requests的相互轉(zhuǎn)換實(shí)現(xiàn)

    python中CURL 和python requests的相互轉(zhuǎn)換實(shí)現(xiàn)

    本文主要介紹了python中CURL 和python requests的相互轉(zhuǎn)換實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評(píng)論

新宾| 周宁县| 大同县| 宁津县| 庐江县| 涪陵区| 黑水县| 武隆县| 徐水县| 永兴县| 阿巴嘎旗| 呼伦贝尔市| 阿城市| 额敏县| 阳东县| 平陆县| 商城县| 任丘市| 马鞍山市| 砀山县| 武义县| 天等县| 循化| 宁明县| 崇左市| 株洲县| 香港 | 黔西县| 兰州市| 达州市| 贡山| 调兵山市| 介休市| 贵南县| 唐海县| 浦江县| 阿克| 深圳市| 赫章县| 铅山县| 大悟县|