📜  使用 smtplib 在电子邮件中嵌入图片 - Python (1)

📅  最后修改于: 2023-12-03 15:36:34.369000             🧑  作者: Mango

使用 smtplib 在电子邮件中嵌入图片 - Python

在电子邮件中嵌入图片可以让邮件更加生动、直观,让接收者更加容易理解内容。而使用 Python 的标准库 smtplib 可以方便地实现在邮件中添加图片的功能。

准备工作

在编写 Python 代码之前,我们需要确保以下几点:

  • 有一个可用的 SMTP 服务器,可以通过邮箱提供商或者自己搭建,比如 Gmail 的 SMTP 服务器地址为 smtp.gmail.com,端口号为 587。
  • 了解嵌入图片的方式,一般可以采用 base64 编码的方式将图片数据嵌入到 HTML 中或者将图片作为附件发送。
示例代码

下面是一个通过 Gmail 的 SMTP 服务器发送邮件,并在邮件内容中嵌入图片的 Python 代码示例:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
import base64

# 邮箱地址和密码
user_email = 'your_email@gmail.com'
user_password = 'your_email_password'

# 邮件发送者和接收者
from_addr = user_email
to_addr = 'recipient_email@example.com'

# 邮件主题
subject = 'This is a test email with image attachment'

# 邮件内容
text = MIMEText('This is a test email with image attachment.')
msg = MIMEMultipart()
msg.attach(text)

# 加载图片数据并将其加入邮件中
with open('image.jpg', 'rb') as f:
    image_data = f.read()
    image_b64 = base64.b64encode(image_data).decode()
    image = MIMEImage(base64.b64decode(image_b64))
    image.add_header('Content-Disposition', 'attachment;filename=image.jpg')
    msg.attach(image)

# 发送邮件
msg['From'] = from_addr
msg['To'] = to_addr
msg['Subject'] = subject
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(user_email, user_password)
server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()
代码解析

以上代码主要分为以下几个步骤:

  1. 导入所需模块,包括 smtplib、email.mime.text、email.mime.multipart 和 email.mime.image。
  2. 定义邮箱地址、密码、发送者、接收者、邮件主题等。其中,邮件主题不需要添加任何 HTML 代码。
  3. 加载图片数据,并将其转换为 base64 编码的字符串。
  4. 创建 MIMEImage 对象,指定图片数据和文件名,并将其添加到邮件内容中。
  5. 发送邮件。
总结

通过以上代码,我们可以了解如何使用 Python 的标准库 smtplib 在电子邮件中嵌入图片。在实际应用中,我们可以根据需要对代码进行修改和优化,比如将图片保存在服务器上,或者动态地生成图片数据。