如何用Python创建符合指定格式的SMTP自定义邮件模板?
Python 带表格框架的SMTP邮件模板实现
实现思路
基于官方基础模板,仅需在HTML邮件内容中嵌入标准<table>标签构建表头+数据行的框架,SMTP发送逻辑保持不变。以下是完整可运行的代码:
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText # SMTP配置信息 smtp_server = "smtp.example.com" smtp_port = 587 sender_email = "your_sender@example.com" sender_pwd = "your_auth_password" receiver_email = "your_recipient@example.com" # 创建邮件容器 msg = MIMEMultipart("alternative") msg["Subject"] = "带表格的测试邮件" msg["From"] = sender_email msg["To"] = receiver_email # 纯文本降级内容(适配不支持HTML的客户端) text_content = """ 这是一封带表格的邮件,请使用支持HTML的邮件客户端查看。 表格结构: 表头1 | 表头2 | 表头3 ------|------|------ 数据1 | 数据2 | 数据3 """ # HTML邮件内容(包含表格框架) html_content = """ <html> <body> <h3>业务数据汇总</h3> <table style="border-collapse: collapse; width: 90%; margin: 10px 0; border: 1px solid #eee;"> <thead> <tr style="background-color: #f5f5f5;"> <th style="border: 1px solid #eee; padding: 8px; text-align: left;">表头1</th> <th style="border: 1px solid #eee; padding: 8px; text-align: left;">表头2</th> <th style="border: 1px solid #eee; padding: 8px; text-align: left;">表头3</th> </tr> </thead> <tbody> <tr> <td style="border: 1px solid #eee; padding: 8px;">行1数据1</td> <td style="border: 1px solid #eee; padding: 8px;">行1数据2</td> <td style="border: 1px solid #eee; padding: 8px;">行1数据3</td> </tr> <tr style="background-color: #fafafa;"> <td style="border: 1px solid #eee; padding: 8px;">行2数据1</td> <td style="border: 1px solid #eee; padding: 8px;">行2数据2</td> <td style="border: 1px solid #eee; padding: 8px;">行2数据3</td> </tr> </tbody> </table> </body> </html> """ # 挂载邮件内容 part_plain = MIMEText(text_content, "plain") part_html = MIMEText(html_content, "html") msg.attach(part_plain) msg.attach(part_html) # 发送邮件 try: with smtplib.SMTP(smtp_server, smtp_port) as server: server.starttls() server.login(sender_email, sender_pwd) server.sendmail(sender_email, receiver_email, msg.as_string()) print("邮件发送成功") except Exception as e: print(f"发送失败: {str(e)}")
关键细节
- 采用内联CSS样式,避免外部样式表在邮件客户端中失效
- 保留纯文本版本作为兼容方案,覆盖所有收件场景
- 表格框架包含
<thead>表头区和<tbody>数据区,可直接复制<tr>标签添加更多数据行
内容的提问来源于stack exchange,提问作者SM079
相关产品推荐
相关产品推荐

