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

如何解决Django中win32发送邮件HTML样式失效问题?

问题原因

Outlook采用Word的HTML渲染引擎,对W3C标准CSS支持存在诸多限制:

  • <head>中的<style>块经常被忽略,类选择器、ID选择器的渲染逻辑极不稳定
  • 部分CSS属性(如border-radius)在Outlook中完全不生效
  • 块级元素的盒模型(padding、margin)渲染结果不一致
解决方案

改用内联样式(直接写在标签的style属性中),这是Outlook最兼容的样式实现方式,同时彻底放弃类/ID选择器。

修改后的代码

pythoncom.CoInitialize()

dynamic_link='prueba'

try:
    outlook = win32.Dispatch('Outlook.Application')
    mail = outlook.CreateItem(0)

    mail.SentOnBehalfOfName = 'example@outlook.com'
    mail.To = adminEmail
    mail.Subject = 'NUEVA SOLICITUD DE PRUEBAS DE LABORATORIO'
    
    # 移除<head>中的<style>块,全部改用内联样式
    html_body = f"""
        <html>
        <body style="font-family: Arial, sans-serif; padding: 20px; background-color: red;">
            <h1 style="color: #333;">Solicitud de pruebas de laboratorio</h1>
            <p style="color: #333;">Nueva solicitud pruebas de laboratorio del usuario {FullName}</p>

            <div style="width: 130px; height:130px; background-color:white;">
                <p style="color: #333;">El usuario {FullName} ha creado una nueva solicitud de pruebas de laboratorio para el cliente {customer} con una fecha requerida para el {require_date}</p>
            </div>
            <!-- Outlook不支持border-radius,此处移除该属性以避免无效代码 -->
            <a href="{dynamic_link}" style="display: inline-block; padding: 10px 20px; background-color: #4CAF50; color: #fff; text-decoration: none;">Ir a la página</a>
        </body>
        </html>
        """
    mail.HTMLBody = html_body
    mail.Send()
    return Response({"message": "Correo enviado correctamente"}, status=status.HTTP_200_OK)
except Exception as e:
     print(f"Error: {e}")

finally:
    pythoncom.CoUninitialize()
额外注意事项
  1. 复杂布局建议:如果需要稳定的多栏或嵌套布局,必须使用<table>实现,Outlook对表格的渲染逻辑远优于块级元素
  2. 属性兼容清单:提前确认Outlook支持的CSS属性,避免使用box-shadow、transition等完全不兼容的属性
  3. 变量校验:确保f-string中的动态变量(如{FullName}、{customer})已正确赋值,避免渲染后出现未替换的占位符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:34:58