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

如何为Python Wazuh告警邮件脚本注入HTML生成HTML格式邮件?

Wazuh告警邮件转HTML格式解决方案

核心问题分析

直接在字符串嵌入HTML无效,本质是未正确设置邮件的MIME内容类型,Outlook默认将未指定类型的邮件解析为纯文本。需明确构建支持HTML格式的邮件结构,同时保留纯文本版本作为兼容 fallback。

具体实现步骤

1. 用Python标准库email重构generate_msg函数

放弃直接拼接字符串的方式,使用email.mime模块构建多类型邮件容器:

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

def generate_msg(subject, html_content, plain_text_content, sender, receiver):
    # 创建多部分邮件容器,指定支持纯文本和HTML双格式
    msg = MIMEMultipart("alternative")
    msg["Subject"] = subject
    msg["From"] = sender
    msg["To"] = receiver

    # 添加纯文本版本(兼容不支持HTML的邮件客户端)
    plain_part = MIMEText(plain_text_content, "plain", "utf-8")
    # 添加HTML版本(Outlook会优先渲染此部分)
    html_part = MIMEText(html_content, "html", "utf-8")

    msg.attach(plain_part)
    msg.attach(html_part)

    return msg.as_string()

2. 函数调用示例

# 构建兼容Outlook的HTML告警内容(尽量用内联样式、简洁结构)
html_content = """
<html>
  <body style="font-family: Arial, sans-serif;">
    <h2 style="color: #dc3545;">⚠️ Wazuh安全告警触发</h2>
    <table style="border-collapse: collapse; width: 80%;">
      <tr>
        <td style="border: 1px solid #ddd; padding: 8px;"><strong>告警ID</strong></td>
        <td style="border: 1px solid #ddd; padding: 8px;">ALERT-2024-001</td>
      </tr>
      <tr>
        <td style="border: 1px solid #ddd; padding: 8px;"><strong>触发规则</strong></td>
        <td style="border: 1px solid #ddd; padding: 8px;">异常SSH暴力破解</td>
      </tr>
      <tr>
        <td style="border: 1px solid #ddd; padding: 8px;"><strong>受影响主机</strong></td>
        <td style="border: 1px solid #ddd; padding: 8px;">192.168.3.12</td>
      </tr>
    </table>
    <p style="margin-top: 15px;">详细日志:</p>
    <pre style="background-color: #f8f9fa; padding: 10px; border-radius: 4px;">{}</pre>
  </body>
</html>
""".format("Jan 15 10:23:45 sshd[1234]: Failed password for root from 203.0.113.45 port 22")

# 对应纯文本版本
plain_content = f"""
⚠️ Wazuh安全告警触发
告警ID: ALERT-2024-001
触发规则: 异常SSH暴力破解
受影响主机: 192.168.3.12

详细日志:
Jan 15 10:23:45 sshd[1234]: Failed password for root from 203.0.113.45 port 22
"""

# 生成邮件内容
email_msg = generate_msg(
    subject="Wazuh安全告警通知",
    html_content=html_content,
    plain_text_content=plain_content,
    sender="wazuh-alert@your-domain.com",
    receiver="admin@your-domain.com"
)

3. Outlook兼容性优化要点

  • 所有样式用内联写法(如<p style="color: red;">),不要用外部CSS或<style>标签
  • 复杂布局用表格替代<div>嵌套,兼容旧版Outlook
  • 图片使用绝对URL,避免嵌入附件(Outlook对嵌入式图片支持有限)

配套发送代码(基于smtplib)

如果之前用smtplib发送邮件,直接传入生成的邮件字符串即可:

import smtplib

def send_alert_email(msg):
    with smtplib.SMTP("smtp.your-domain.com", 587) as server:
        server.starttls()
        server.login("wazuh-alert@your-domain.com", "your-smtp-password")
        server.sendmail("wazuh-alert@your-domain.com", "admin@your-domain.com", msg)

send_alert_email(email_msg)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:25:10