在Python中使用HTML发送电子邮件
我正在尝试用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中发送带样式的邮件?