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

如何在smtplib发送的邮件中实现文本格式化(加粗/斜体等)?

问题根源

你用的ANSI转义序列是给终端输出设计的,邮件客户端根本不识别这些转义字符。要实现加粗、斜体、下划线、超链接这类富文本效果,必须把邮件改成HTML格式——这是所有主流邮件客户端都支持的标准方式。


具体修改方案

1. 补充导入必要模块

除了原有的smtplib、datetime,还要导入Python标准库的邮件处理模块:

from email.mime.text import MIMEText
from email.header import Header

2. 修改Event类,生成HTML格式内容

用HTML标签替代ANSI转义序列来实现样式:

  • 加粗:<b>文本</b>
  • 斜体:<i>文本</i>
  • 下划线:<u>文本</u>
  • 超链接:<a href="目标地址">显示文本</a>

修改后的Event类:

class Event():
    def __init__(self, path):
        self.path = path
        self.time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

    def __str__(self):
        # 处理路径转超链接:本地路径转file://协议,网络地址直接用原链接
        if self.path.startswith(('http://', 'https://')):
            path_link = f'<a href="{self.path}"><u>{self.path}</u></a>'
        else:
            # Windows系统注意路径格式:file:///C:/xxx/xxx,Linux/macOS是file:///home/xxx/xxx
            formatted_path = self.path.replace('\\', '/')
            path_link = f'<a href="file:///{formatted_path}"><u>{self.path}</u></a>'
        
        # 把Time设为加粗,Path设为带下划线的超链接
        return f'<p><b>Time:</b> {self.time}&nbsp;&nbsp;&nbsp;&nbsp;<b>Path:</b> {path_link}</p>'

3. 重写send_email函数,发送HTML邮件

不再手动拼接邮件头,用MIMEText对象规范构造HTML邮件,避免编码和格式问题:

def send_email(self, subject, to_addr, from_addr, content):
    # 把所有Event对象拼接成完整的HTML内容
    body_html = ''.join(str(cnt) for cnt in content)
    
    # 构造HTML邮件实例,指定subtype为'html',编码为utf-8
    msg = MIMEText(body_html, 'html', 'utf-8')
    
    # 设置邮件头,用Header处理中文避免乱码
    msg['From'] = Header(from_addr, 'utf-8')
    msg['To'] = Header(to_addr, 'utf-8')
    msg['Subject'] = Header(subject, 'utf-8')

    server = smtplib.SMTP(self.host)
    # 如果你的SMTP服务器需要登录(比如QQ/163邮箱),取消下面注释并填入密码/授权码
    # server.login(from_addr, '你的邮箱密码或授权码')
    
    # 支持多收件人:将逗号分隔的收件人字符串转成列表
    server.sendmail(from_addr, to_addr.split(','), msg.as_string())
    server.quit()

额外提示

  • 你可以自由扩展HTML标签,比如用<span style="color:red">设置文字颜色,用<h3>设置小标题,进一步美化邮件内容。
  • 本地路径转超链接时,Windows系统要注意前缀是file:///(三个斜杠),比如file:///C:/Users/xxx/Documents/test.txt。

内容的提问来源于stack exchange,提问作者Alex Rebell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:43:18