You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的smtplib实现HTML报告的邮件附加/嵌入?

嘿,我来帮你搞定把Jupyter生成的HTML报告用smtplib发送的问题~ 你已经能成功发邮件了,那咱们直接解决嵌入HTML到邮件正文和附加HTML文件这两种需求:

一、把HTML报告嵌入邮件正文

这种方式能让收件人打开邮件直接看到报告内容,不用下载附件。步骤很简单:

  1. 完整读取你的HTML报告文件内容
  2. 创建HTML类型的MIMEText对象,把读取到的内容传进去
  3. 把这个MIMEText对象附加到你的MIMEMultipart邮件里

给你补全后的完整代码示例:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# 配置邮件基本信息
fromaddr = "myemail@domain.com.au"
toaddr = "myfriendsemail@domain.com.au"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Automatic Weekly Report"

# 读取HTML报告内容
with open("WeeklyReport.html", "r", encoding='utf-8') as f:
    html_content = f.read()

# 创建HTML格式的邮件正文部分
html_part = MIMEText(html_content, 'html', 'utf-8')
msg.attach(html_part)

# 发送邮件(根据你的邮箱调整SMTP服务器信息)
try:
    server = smtplib.SMTP('smtp.yourdomain.com', 587)  # 比如Gmail用smtp.gmail.com,端口587
    server.starttls()
    server.login(fromaddr, "your_email_password")  # Gmail用户建议用两步验证后的App密码
    text = msg.as_string()
    server.sendmail(fromaddr, toaddr, text)
    server.quit()
    print("邮件发送成功!")
except Exception as e:
    print(f"发送失败:{str(e)}")
二、把HTML报告作为附件发送

如果希望收件人能下载保存报告,就用附件的方式:

  1. 读取HTML文件的二进制内容
  2. 创建MIMEBase对象处理附件
  3. 设置附件的类型和头信息,编码后附加到邮件里

对应的代码示例:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

# 配置邮件基本信息
fromaddr = "myemail@domain.com.au"
toaddr = "myfriendsemail@domain.com.au"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Automatic Weekly Report"

# 可选:添加一段普通文本的正文说明
body = "这是本周的报告,请查收附件。"
msg.attach(MIMEText(body, 'plain', 'utf-8'))

# 处理HTML附件
filename = "WeeklyReport.html"
with open(filename, "rb") as attachment:
    # 创建MIMEBase对象
    part = MIMEBase('application', 'octet-stream')
    part.set_payload(attachment.read())

# 编码附件内容
encoders.encode_base64(part)
# 设置附件的头信息
part.add_header('Content-Disposition', f'attachment; filename= {filename}')

# 把附件附加到邮件
msg.attach(part)

# 发送邮件(和上面的发送逻辑一致)
try:
    server = smtplib.SMTP('smtp.yourdomain.com', 587)
    server.starttls()
    server.login(fromaddr, "your_email_password")
    text = msg.as_string()
    server.sendmail(fromaddr, toaddr, text)
    server.quit()
    print("邮件发送成功!")
except Exception as e:
    print(f"发送失败:{str(e)}")

小提醒:

  • 记得把smtp.yourdomain.com换成你邮箱对应的SMTP服务器,比如网易邮箱用smtp.163.com,Outlook用smtp.office365.com
  • 读取HTML文件时指定正确编码(比如utf-8),避免出现乱码问题

内容的提问来源于stack exchange,提问作者Stuart Robertson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:25:35