Python发送HTML格式邮件 排版美化教程
用Python smtplib发送HTML格式邮件,支持加粗、颜色、表格、按钮等富文本排版,比纯文本邮件更专业,附完整代码。
场景痛点
纯文本邮件干巴巴,领导看着没质感。发周报、营销通知、活动邀请时,想要加粗标题、配色、表格、按钮,用Python拼一段HTML发出去,效果跟网页邮件一模一样,不用再去第三方邮件平台排版。
用到的库
smtplib、email都是标准库。
# 无需安装
完整代码
# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
SMTP_SERVER = "smtp.qq.com"
SMTP_PORT = 465
SENDER = "your_account@qq.com"
AUTH_CODE = "your_smtp_auth_code"
RECEIVER = "receiver@example.com"
def send_html_email():
# 1. 写一段HTML,邮件正文支持大部分常用标签
html = """
<html>
<body>
<h2 style="color:#1677ff;">本周工作周报</h2>
<p>你好,以下是本周关键数据:</p>
<table border="1" cellpadding="6" cellspacing="0"
style="border-collapse:collapse;">
<tr style="background:#f0f5ff;">
<th>指标</th><th>本周</th><th>环比</th>
</tr>
<tr><td>新客户数</td><td>128</td><td>+12%</td></tr>
<tr><td>成交金额</td><td>56万</td><td>+8%</td></tr>
</table>
<p style="margin-top:20px;">
请点击<a href="https://example.com/report">查看完整报表</a>
</p>
</body>
</html>
"""
# 2. 关键:第二参数用"html"而不是"plain"
msg = MIMEText(html, "html", "utf-8")
msg["From"] = Header(f"周报机器人 <{SENDER}>", "utf-8")
msg["To"] = Header(RECEIVER, "utf-8")
msg["Subject"] = Header("【周报】本周业务数据概览", "utf-8")
# 3. 登录发送
server = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
server.login(SENDER, AUTH_CODE)
server.sendmail(SENDER, [RECEIVER], msg.as_string())
server.quit()
print("HTML邮件发送成功")
if __name__ == "__main__":
send_html_email()
代码讲解
MIMEText(html, "html", "utf-8"):关键就是第二参数从plain改成html,邮件客户端会按HTML渲染。- 邮件里写HTML建议用内联样式(style属性),因为Outlook、QQ邮箱对
<style>块和外部CSS支持很差。 - 表格、颜色、超链接、加粗都能正常显示;但JavaScript、外部JS、iframe一律不支持。
- 复杂模板可以从公司已有HTML邮件里把代码复制过来,改变量即可。
运行结果
收件人收到一封排版好的邮件,标题蓝色,表格有边框,链接可点击。在网页邮箱和手机客户端都能正常渲染。
注意事项
- 不要在HTML里用
<script>,邮箱客户端会直接过滤,还可能触发垃圾箱。 - 邮件HTML兼容性最好用table布局,不要用div+flex,Outlook会把布局打乱。
- 想同时兼容不支持HTML的老客户端,可以用
MIMEMultipart("alternative")同时附plain和html两个版本。 - 链接域名要跟发件邮箱域名一致,否则容易被判垃圾邮件。

更新时间:2026-09-14 21:05:47