Python - 发送带有变量的 HTML 邮件
Python - sending HTML Mail with Variables
我想制作一个小型的 cronmailer 供我个人使用。这是不起作用的部分
# Create the body of the message (a plain-text and an HTML version).
text = "LOG OUTPUT: " + sys.argv[1] + "\n"
logdata = open(sys.argv[2], "rb")
for row in logdata:
text = text + row
html = """\
<html>
<head></head>
<body>
<p>LOG OUTPUT: {0} <br> {1}
</p>
</body>
</html>
""".format(unicode(str(sys.argv[1]),'utf-8'), unicode(str(logdata),'utf-8'))
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')
msg.attach(part1)
msg.attach(part2)
server = smtplib.SMTP(str(server) + ":" + str(port))
server.starttls()
server.login(username,password)
server.sendmail(emailfrom, emailto, msg.as_string())
server.quit()
我收到邮件了。使用纯文本和附件(将代码留在外面,因为它有效)。但不是 HTML 部分。我得到的唯一结果是:
<html>
<head></head>
<body>
<p>LOG OUTPUT: test
感谢您的帮助,祝新年快乐
以下可能是构建 html 字符串(在 Python 2 中)的更好方法:
import cgi
text = "LOG OUTPUT: " + sys.argv[1] + "\n"
with open(sys.argv[2], "rb") as f:
text += f.read()
html = """\
<html>
<head></head>
<body>
<p>LOG OUTPUT: {0}<br/>
<pre>{1}</pre>
</p>
</body>
</html>""".format(unicode(str(sys.argv[1]), 'utf-8'),
unicode(cgi.escape(text), 'utf-8'))
请注意,在 Python 3 中,转义函数是 html.escape
(因此您最好不要将自己的变量命名为 html
,因为它会发生冲突:-),但是对于 Python 2、这里的转义函数是特意命名的cgi.escape
,这个应该可以吧
我想制作一个小型的 cronmailer 供我个人使用。这是不起作用的部分
# Create the body of the message (a plain-text and an HTML version).
text = "LOG OUTPUT: " + sys.argv[1] + "\n"
logdata = open(sys.argv[2], "rb")
for row in logdata:
text = text + row
html = """\
<html>
<head></head>
<body>
<p>LOG OUTPUT: {0} <br> {1}
</p>
</body>
</html>
""".format(unicode(str(sys.argv[1]),'utf-8'), unicode(str(logdata),'utf-8'))
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')
msg.attach(part1)
msg.attach(part2)
server = smtplib.SMTP(str(server) + ":" + str(port))
server.starttls()
server.login(username,password)
server.sendmail(emailfrom, emailto, msg.as_string())
server.quit()
我收到邮件了。使用纯文本和附件(将代码留在外面,因为它有效)。但不是 HTML 部分。我得到的唯一结果是:
<html>
<head></head>
<body>
<p>LOG OUTPUT: test
感谢您的帮助,祝新年快乐
以下可能是构建 html 字符串(在 Python 2 中)的更好方法:
import cgi
text = "LOG OUTPUT: " + sys.argv[1] + "\n"
with open(sys.argv[2], "rb") as f:
text += f.read()
html = """\
<html>
<head></head>
<body>
<p>LOG OUTPUT: {0}<br/>
<pre>{1}</pre>
</p>
</body>
</html>""".format(unicode(str(sys.argv[1]), 'utf-8'),
unicode(cgi.escape(text), 'utf-8'))
请注意,在 Python 3 中,转义函数是 html.escape
(因此您最好不要将自己的变量命名为 html
,因为它会发生冲突:-),但是对于 Python 2、这里的转义函数是特意命名的cgi.escape
,这个应该可以吧