for*_*vas 8 python email mime python-3.x
我正在从Python3脚本发送电子邮件(使用smtplib).到目前为止,我一直在Gmail帐户中收到邮件.但问题是我无法显示CSS样式,尽管是内联的.此外,即使这个简单的消息也无法发送:
title = 'My title'
msg_content = '<h2>{title}: <font color="green">OK</font></h2>\n'.format(title=title)
Run Code Online (Sandbox Code Playgroud)
但是,如果我在{title}之后删除了两个点,它就可以了.如果我删除最后的\n它将无法再次工作.为什么?如何在Python3中发送这样的行?
title = 'My title'
msg_content = '<h2>{title}: <span style="color: green">OK</span></h2>'.format(title=title)
Run Code Online (Sandbox Code Playgroud)
编辑
import smtplib
msg_header = 'From: Sender Name <sender@server>\n' \
'To: Receiver Name <receiver@server>\n' \
'Cc: Receiver2 Name <receiver2@server>\n' \
'MIME-Version: 1.0\n' \
'Content-type: text/html\n' \
'Subject: Any subject\n'
title = 'My title'
msg_content = '<h2>{title} > <font color="green">OK</font></h2>\n'.format(
title=title)
msg_full = (''.join([msg_header, msg_content])).encode()
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login('sender@server.com', 'senderpassword')
server.sendmail('sender@server.com',
['receiver@server.com', 'receiver@server.com'],
msg_full)
server.quit()
Run Code Online (Sandbox Code Playgroud)
nd.*_*nd. 17
您的示例的msg_full结果如下所示:
From: Sender Name <sender@server>
To: Receiver Name <receiver@server>
Cc: Receiver2 Name <receiver2@server>
MIME-Version: 1.0
Content-type: text/html
Subject: Any subject
<h2>My title > <font color="green">OK</font></h2>
Run Code Online (Sandbox Code Playgroud)
您的电子邮件格式不符合RFC 2822:
''.join([msg_header, msg_body]),这不会插入这一行.因此,您希望传输的正文文本被视为标题.同一封电子邮件的正确版本如下所示:
Content-Type: text/html; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
From: Sender Name <sender@server>
To: Receiver Name <receiver@server>
Cc: Receiver2 Name <receiver2@server>
Subject: Any subject
<h2>My title > <font color="green">OK</font></h2>
Run Code Online (Sandbox Code Playgroud)
我强烈建议您使用Python的内置库来构建符合RFC的有效负载.
import smtplib
from email.mime.text import MIMEText
title = 'My title'
msg_content = '<h2>{title} > <font color="green">OK</font></h2>\n'.format(title=title)
message = MIMEText(msg_content, 'html')
message['From'] = 'Sender Name <sender@server>'
message['To'] = 'Receiver Name <receiver@server>'
message['Cc'] = 'Receiver2 Name <receiver2@server>'
message['Subject'] = 'Any subject'
msg_full = message.as_string()
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login('sender@server.com', 'senderpassword')
server.sendmail('sender@server.com',
['receiver@server.com', 'receiver@server.com'],
msg_full)
server.quit()
Run Code Online (Sandbox Code Playgroud)
此外,它是很好的形式添加您的留言的text/plain的版本一样,所以任何RECEIPIENT可以随时随地阅读(我有HTML邮件无效,并没有看到我的客户在任何的那个).您可以使用email.mime.text轻松完成此操作:
from email.mime.multipart import MIMEMultipart
message = MIMEMultipart('alternative')
message['From'] = 'Sender Name <sender@server>'
message['To'] = 'Receiver Name <receiver@server>'
message['Cc'] = 'Receiver2 Name <receiver2@server>'
message['Subject'] = 'Any subject'
# Record the MIME types of both parts - text/plain and text/html.
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')
# Attach parts into message container.
# According to RFC 2046, the last part of a multipart message, in this case
# the HTML message, is best and preferred.
message.attach(part1)
message.attach(part2)
Run Code Online (Sandbox Code Playgroud)
您的问题缺少用于发送邮件的代码.我强烈怀疑你直接将msg_content作为消息传递给SMTP.sendmail.
然而,SMTP.sendmail按原样传输此字符串,即根据RFC 5321作为邮件的有效负载.此有效负载数据由电子邮件标头和内容组成,邮件顶部包含标题(请参阅RFC 2822).
您的消息"我的标题:我的标题:"并未在接收端显示.如果你之后删除冒号{title}:,那么接收器显然不会将结果视为标题等.
对于HTML邮件的风格,看的例子https://docs.python.org/2/library/email-examples.html -基本上你必须创建以发送邮件编码消息的正确text/html的MIME.
| 归档时间: |
|
| 查看次数: |
14670 次 |
| 最近记录: |