Python内置模块之email/smtplib详细功能介绍及示例

Python中的email和smtplib模块详解

email模块

email模块是Python中用于处理电子邮件消息的核心模块,它提供了创建、解析和操作电子邮件消息的功能。

主要子模块和类

  1. email.message.EmailMessage - 表示电子邮件消息的主要类
  2. email.mime - 用于创建MIME消息的子模块
  3. email.parser - 用于解析电子邮件消息
  4. email.generator - 用于生成电子邮件消息
  5. email.policy - 控制消息的解析和生成

常用方法

EmailMessage类方法
  • add_attachment(): 添加附件
  • set_content(): 设置邮件正文内容
  • make_mixed(): 将消息转换为multipart/mixed类型
  • make_alternative(): 将消息转换为multipart/alternative类型
  • __setitem__(): 设置邮件头(如msg['Subject'] = 'Hello')
  • __getitem__(): 获取邮件头
  • as_string(): 将消息转换为字符串
  • is_multipart(): 检查消息是否是多部分的

smtplib模块

smtplib模块定义了SMTP客户端会话对象,可用于向任何互联网机器发送邮件。

主要类和方法

SMTP类
  • SMTP(): 构造函数,创建SMTP对象
  • connect(): 连接到SMTP服务器
  • login(): 登录SMTP服务器
  • sendmail(): 发送邮件
  • send_message(): 发送EmailMessage对象
  • quit(): 关闭连接
  • starttls(): 启用TLS加密
SMTP_SSL类
  • 与SMTP类似,但使用SSL加密连接

实际使用示例

示例1:发送简单文本邮件

import smtplib
from email.message import EmailMessage

# 创建邮件内容
msg = EmailMessage()
msg['Subject'] = 'Python邮件测试'
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'
msg.set_content('这是一封来自Python的测试邮件')

# 发送邮件
with smtplib.SMTP('smtp.example.com', 587) as smtp:
    smtp.starttls()  # 启用TLS加密
    smtp.login('[email protected]', 'password')
    smtp.send_message(msg)

示例2:发送带附件的邮件

import smtplib
from email.message import EmailMessage
from email.utils import make_msgid
import os

# 创建邮件
msg = EmailMessage()
msg['Subject'] = '带附件的测试邮件'
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'
msg['Message-ID'] = make_msgid()  # 生成唯一消息ID

# 添加文本内容
msg.set_content('请查收附件中的文件')

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

# 发送邮件
with smtplib.SMTP_SSL('smtp.example.com', 465) as smtp:
    smtp.login('[email protected]', 'password')
    smtp.send_message(msg)

示例3:发送HTML格式邮件

import smtplib
from email.message import EmailMessage

# 创建邮件
msg = EmailMessage()
msg['Subject'] = 'HTML格式邮件'
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'

# 设置HTML内容
html_content = """

  
    

这是一封HTML邮件

这是使用Python发送的HTML格式邮件

点击访问Python官网

"""
msg.set_content(html_content, subtype='html') # 发送邮件 with smtplib.SMTP('smtp.example.com', 587) as smtp: smtp.starttls() smtp.login('[email protected]', 'password') smtp.send_message(msg)

示例4:发送带内嵌图片的HTML邮件

import smtplib
from email.message import EmailMessage
import imghdr

# 创建邮件
msg = EmailMessage()
msg['Subject'] = '带内嵌图片的邮件'
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'

# HTML内容引用内嵌图片
html_content = """

  
    

带图片的邮件

这是一张内嵌图片:

"""
msg.set_content(html_content, subtype='html') # 添加内嵌图片 with open('logo.png', 'rb') as img: image_data = img.read() image_type = imghdr.what(img.name) msg.add_attachment(image_data, maintype='image', subtype=image_type, cid='image1') # 发送邮件 with smtplib.SMTP_SSL('smtp.example.com', 465) as smtp: smtp.login('[email protected]', 'password') smtp.send_message(msg)

注意事项

  1. 安全性:不要在代码中硬编码密码,考虑使用环境变量或配置文件
  2. 异常处理:添加适当的异常处理来应对网络问题或认证失败
  3. 服务器设置:不同的邮件服务提供商(SMTP服务器)有不同的端口和配置
  4. 垃圾邮件:避免被标记为垃圾邮件,确保遵守相关法律法规

通过结合emailsmtplib模块,Python可以非常灵活地处理各种电子邮件发送需求,从简单的文本邮件到复杂的多部分邮件都能轻松应对。

你可能感兴趣的:(Python内置模块之email/smtplib详细功能介绍及示例)