在Python中使用HTML发送电子邮件

0 投票
1 回答
840 浏览
提问于 2025-04-18 14:24

我正在尝试用Python发送一封邮件,并且想把邮件格式设置为HTML格式。下面是我的代码:

sender = 'dummy@dummy.com'
receivers = ['abc@abc.com']
message = message = """From: team <team@temp.com>
To: To Person <me@me.com>
MIME-Version: 1.0
Content-type: text/html
Subject: Daily Report 
<html>
<table>
Report
<% for i in rows: %>
    <tr>
        <td> <%= rows[0][1] %>
    </tr>
<% end %>
</table>

<b>This is HTML message.</b>
<h1>This is headline.</h1>
</html>
"""
smtpObj = smtplib.SMTP('SMTP mailer')
smtpObj.sendmail(sender, receivers, message)

我从数据库中根据某些条件获取数据,并把这些数据存储在一个叫“rows”的变量里。我想根据返回的行数来循环创建HTML表格。

但是每次我发送邮件时,邮件都没有识别我写的循环。它只识别了“这是HTML消息”这个加粗的部分和“这是标题”这个H1格式的部分。

我到底哪里做错了呢?

1 个回答

2

你想用一个模板引擎来创建HTML页面。在Python中,你现在用的消息字符串其实就是一个普通的字符串,没有其他特别的意思。像`<% for i in rows: %>`这样的内容,Python并不会对它进行任何处理。

你的邮件格式不符合RFC2822的规定:

  • 你必须使用CRLF('\r\n')作为换行符,单独使用LF('\n')是不合法的。
  • 邮件的头部和正文之间必须用CRLF分隔,也就是要有一个空行。

如果你想用Python发送格式化的HTML邮件,我建议你使用email.mime中的功能,具体可以参考如何在Python3中发送带样式的邮件?

撰写回答