当前位置: 代码网 > it编程>前端脚本>Python > Python使用email​库创建和解析电子邮件详解

Python使用email​库创建和解析电子邮件详解

2025年09月23日 Python 我要评论
在现代软件开发中,处理电子邮件是一项常见的任务。无论是发送用户注册确认邮件、重置密码链接,还是自动回复客户咨询,掌握如何使用python生成和解析电子邮件都是非常有用的技能。本文将介绍如何使用pyth

在现代软件开发中,处理电子邮件是一项常见的任务。无论是发送用户注册确认邮件、重置密码链接,还是自动回复客户咨询,掌握如何使用python生成和解析电子邮件都是非常有用的技能。本文将介绍如何使用python的​​email​​库来创建和解析电子邮件。

1. 环境准备

首先,确保你的python环境已经安装了​​email​​库。该库是python标准库的一部分,因此通常情况下你不需要额外安装。如果你使用的是较老版本的python,可能需要更新或安装最新版本的python。

2. 创建电子邮件

2.1 导入必要的模块

from email.mime.text import mimetext
from email.mime.multipart import mimemultipart
from email.header import header
import smtplib

2.2 构建邮件内容

创建一个简单的纯文本邮件:

def create_simple_email(sender, receiver, subject, body):
    msg = mimetext(body, 'plain', 'utf-8')
    msg['from'] = header(sender)
    msg['to'] = header(receiver)
    msg['subject'] = header(subject, 'utf-8')
    
    return msg

创建一个多部分邮件(包含html和附件):

def create_multipart_email(sender, receiver, subject, html_body, attachment_path=none):
    msg = mimemultipart()
    msg['from'] = header(sender)
    msg['to'] = header(receiver)
    msg['subject'] = header(subject, 'utf-8')
    
    # 添加html正文
    html_part = mimetext(html_body, 'html', 'utf-8')
    msg.attach(html_part)
    
    # 如果有附件,添加附件
    if attachment_path:
        with open(attachment_path, 'rb') as file:
            attachment = mimeapplication(file.read(), _subtype="pdf")
            attachment.add_header('content-disposition', 'attachment', filename=('utf-8', '', 'report.pdf'))
            msg.attach(attachment)
    
    return msg

2.3 发送邮件

使用smtp协议发送邮件:

def send_email(smtp_server, smtp_port, sender, password, receiver, msg):
    try:
        server = smtplib.smtp(smtp_server, smtp_port)
        server.starttls()  # 启用tls加密
        server.login(sender, password)
        server.sendmail(sender, [receiver], msg.as_string())
        server.quit()
        print("邮件发送成功!")
    except exception as e:
        print(f"邮件发送失败: {e}")

3. 解析电子邮件

3.1 导入解析所需的模块

from email import policy
from email.parser import bytesparser

3.2 解析邮件内容

假设你从某个地方获取到了原始邮件数据(例如,从邮箱服务器拉取),可以使用以下函数解析邮件:

def parse_email(raw_email_data):
    msg = bytesparser(policy=policy.default).parsebytes(raw_email_data)
    
    print("发件人:", msg['from'])
    print("收件人:", msg['to'])
    print("主题:", msg['subject'])
    
    if msg.is_multipart():
        for part in msg.iter_parts():
            content_type = part.get_content_type()
            content_disposition = part.get("content-disposition")
            
            if content_type == "text/plain" and 'attachment' not in content_disposition:
                print("正文(纯文本):", part.get_payload(decode=true).decode())
            elif content_type == "text/html" and 'attachment' not in content_disposition:
                print("正文(html):", part.get_payload(decode=true).decode())
            elif 'attachment' in content_disposition:
                print("附件:", part.get_filename())
    else:
        print("正文:", msg.get_payload(decode=true).decode())

以上是一篇关于如何使用python生成并解析电子邮件的技术博客文章,希望对你有所帮助。

4.方法补充

生成和解析电子邮件在许多实际应用中都非常有用,比如自动化邮件发送、邮件监控系统等。下面我将分别展示如何使用python来生成和解析电子邮件。

生成电子邮件

我们可以使用python的​​email​​模块来创建和发送电子邮件。以下是一个简单的示例,展示了如何生成一封包含文本内容的电子邮件,并使用smtp协议发送出去。

安装必要的库

首先,确保你已经安装了​​email​​和​​smtplib​​库。这些库通常在标准库中,所以不需要额外安装。

示例代码

import smtplib
from email.mime.text import mimetext
from email.mime.multipart import mimemultipart

# 邮件发送者和接收者的邮箱地址
sender = 'your_email@example.com'
receiver = 'recipient_email@example.com'

# 创建一个mime多部分消息对象
msg = mimemultipart()
msg['from'] = sender
msg['to'] = receiver
msg['subject'] = '测试邮件'

# 邮件正文
body = '这是一封测试邮件,由python生成并发送。'
msg.attach(mimetext(body, 'plain'))

# 连接到smtp服务器并发送邮件
smtp_server = 'smtp.example.com'
smtp_port = 587
smtp_user = 'your_email@example.com'
smtp_password = 'your_password'

try:
    server = smtplib.smtp(smtp_server, smtp_port)
    server.starttls()  # 启用tls加密
    server.login(smtp_user, smtp_password)
    text = msg.as_string()
    server.sendmail(sender, receiver, text)
    print('邮件发送成功!')
except exception as e:
    print(f'邮件发送失败: {e}')
finally:
    server.quit()

解析电子邮件

解析电子邮件通常用于处理接收到的邮件内容。我们可以使用​​imaplib​​库来连接到imap服务器并获取邮件,然后使用​​email​​模块来解析邮件内容。

安装必要的库

确保你已经安装了​​imaplib​​库。这个库也通常在标准库中,所以不需要额外安装。

示例代码

import imaplib
import email
from email.header import decode_header

# imap服务器设置
imap_server = 'imap.example.com'
imap_user = 'your_email@example.com'
imap_password = 'your_password'

# 连接到imap服务器
try:
    mail = imaplib.imap4_ssl(imap_server)
    mail.login(imap_user, imap_password)
    mail.select('inbox')  # 选择收件箱

    # 搜索所有邮件
    result, data = mail.search(none, 'all')
    mail_ids = data[0].split()

    # 获取最新的一封邮件
    if mail_ids:
        latest_email_id = mail_ids[-1]
        result, data = mail.fetch(latest_email_id, '(rfc822)')
        raw_email = data[0][1]

        # 解析邮件
        msg = email.message_from_bytes(raw_email)

        # 提取发件人、主题和正文
        from_ = msg['from']
        subject = msg['subject']
        if msg.is_multipart():
            for part in msg.walk():
                content_type = part.get_content_type()
                content_disposition = str(part.get("content-disposition"))
                try:
                    body = part.get_payload(decode=true).decode()
                except:
                    pass
                if content_type == "text/plain" and "attachment" not in content_disposition:
                    print(f'发件人: {from_}')
                    print(f'主题: {subject}')
                    print(f'正文: {body}')
        else:
            body = msg.get_payload(decode=true).decode()
            print(f'发件人: {from_}')
            print(f'主题: {subject}')
            print(f'正文: {body}')
    else:
        print('没有邮件')

except exception as e:
    print(f'邮件解析失败: {e}')
finally:
    mail.logout()

这些代码可以在实际应用中进行扩展,以满足更复杂的需求,比如处理附件、html格式的邮件等。

方法二:

在python中生成和解析电子邮件可以使用标准库中的​​email​​​模块,这个模块提供了一组工具来处理电子邮件的创建、解析、修改和发送。下面我将详细介绍如何使用​​email​​模块来生成和解析电子邮件。

1. 生成电子邮件

首先,我们来看看如何使用​​email​​模块生成一个简单的电子邮件。

安装必要的库

确保你的环境中安装了python的标准库,通常这些库已经包含在python安装包中,无需额外安装。

创建邮件内容

from email.mime.text import mimetext
from email.mime.multipart import mimemultipart
from email.header import header

# 创建一个mime多部分消息对象
msg = mimemultipart()

# 设置发件人、收件人和主题
msg['from'] = header("发件人姓名 <sender@example.com>")
msg['to'] = header("收件人姓名 <receiver@example.com>")
msg['subject'] = header('这是一个测试邮件')

# 创建邮件正文
text = mimetext('你好,这是一封测试邮件。', 'plain', 'utf-8')
msg.attach(text)

# 如果需要添加附件
# with open('path_to_file', 'rb') as f:
#     attachment = mimeapplication(f.read(), _subtype="pdf")
#     attachment.add_header('content-disposition', 'attachment', filename=('gbk', '', 'filename.pdf'))
#     msg.attach(attachment)

发送邮件

要发送邮件,你可以使用​​smtplib​​库:

import smtplib

smtp_server = 'smtp.example.com'
smtp_port = 587
smtp_user = 'your_email@example.com'
smtp_password = 'your_password'

try:
    server = smtplib.smtp(smtp_server, smtp_port)
    server.starttls()  # 启用tls加密
    server.login(smtp_user, smtp_password)
    server.sendmail(msg['from'], [msg['to']], msg.as_string())
    print("邮件发送成功!")
except exception as e:
    print(f"邮件发送失败: {e}")
finally:
    server.quit()

解析电子邮件

解析电子邮件通常涉及到从某个源(如文件或网络)读取邮件内容,并将其解析为可操作的对象。这里以从字符串解析邮件为例:

from email import policy
from email.parser import bytesparser

# 假设这是从某个地方获取到的邮件原始数据
raw_email = b"""\
from: sender@example.com
to: receiver@example.com
subject: 测试邮件
mime-version: 1.0
content-type: text/plain; charset=utf-8

你好,这是一封测试邮件。
"""

# 使用bytesparser解析邮件
msg = bytesparser(policy=policy.default).parsebytes(raw_email)

# 访问邮件的不同部分
print("发件人:", msg['from'])
print("收件人:", msg['to'])
print("主题:", msg['subject'])
print("正文:")
if msg.is_multipart():
    for part in msg.iter_parts():
        print(part.get_payload(decode=true))
else:
    print(msg.get_payload(decode=true))

通过这些步骤,你可以轻松地在python中处理电子邮件相关的任务。如果你有更复杂的需求,比如处理html格式的邮件、添加多个附件等,​​email​​模块也提供了相应的支持。

到此这篇关于python使用email​库创建和解析电子邮件详解的文章就介绍到这了,更多相关python创建和解析邮件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com