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

Python发送含CSS的邮件在Outlook中样式不生效问题求助

问题:Outlook客户端中HTML邮件CSS样式不生效

我用以下Python函数发送邮件,邮件能成功发送,源码里也能看到CSS代码,但Outlook客户端里样式就是不生效:

def send_email(recip, subj, content):
    email = MIMEMultipart('alternative')
    email['To'] = ",".join(recip)
    email['From'] = 'xyz@abc.com'
    email['Subject'] = subj
    body = MIMEText(content, 'html')
    email.attach(body)
    smtpObj = smtplib.SMTP('something.com')
    smtpObj.sendmail('sender@abc.com', recip, email.as_string())

我的HTML结构如下({css}处填充了CSS内容):

<html>
    <head> <style>
        {css}
    </style> </head>
    <body>
    <img src = "header.png">
        <div>
            <h6> Date - {date} </h6>
        </div>
        <div>
            <h6> title1</h6>
            {summary}
        </div>
        <div>
            <h6> title2</h6>
            {details}
        </div>
        <div>
            <h6> title3 </h6>
            {desk}
        </div>
    </body>
    </html>

我知道Outlook支持<head>里的<style>标签,想知道问题出在哪?


解答
  • Outlook的CSS支持有严格限制:Windows桌面版Outlook使用Word的渲染引擎,很多现代CSS语法不兼容。比如类选择器.xxx、后代选择器div h6基本无效,只能用元素选择器(如h6、div);float、position、flex这类布局属性完全不支持,必须用表格布局替代。
  • 检查CSS属性是否合规:像padding、margin在块元素上经常不生效,要改用表格的cellpadding、cellspacing;字体要选系统自带的安全字体(如Arial、微软雅黑);颜色值必须写全6位十六进制(#000000而非#000)。
  • 明确MIMEText的编码:你的代码里MIMEText(content, 'html')没指定编码,可能导致CSS内容乱码被Outlook忽略,改成MIMEText(content, 'html', 'utf-8')试试。
  • 添加纯文本版本作为 fallback:用MIMEMultipart('alternative')时,建议同时附上纯文本内容,有些邮件客户端(包括Outlook)会因为缺少纯文本部分,对HTML渲染做限制。代码示例:
    text_content = "这是邮件的纯文本版本,供不支持HTML的客户端查看"
    text_body = MIMEText(text_content, 'plain', 'utf-8')
    email.attach(text_body)
    
  • 关键样式改用内联写法:即使<head>里的样式理论上支持,Outlook也经常会忽略,最稳妥的是把核心样式直接写在元素的style属性里,比如:
    <h6 style="font-size:14px; color:#666; margin:0;"> Date - {date} </h6>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:01:02