我试图将一些变量传递给MIMEText,然后将这些变量作为正文发送给纯文本电子邮件。看起来很简单,但是无论我尝试什么,都无法获得预期的结果。

这是我所拥有的:

import cgi
from datetime import datetime
import smtplib
from email.mime.text import MIMEText

arguments = cgi.FieldStorage()

cid = arguments.getvalue('cid')
cin = arguments.getvalue('cin')
dn = arguments.getvalue('dn')
sttime = datetime.now().strftime('%m/%d/%Y_%H:%M:%S')

msg = MIMEText(cid, cin, sttime)  #Here's the problem
msg['Subject'] = '911 was dialed'
sender = '[email protected]'
recipient = '[email protected]'
s = smtplib.SMTP('localhost')
msg['From'] = sender
msg['To'] = recipient
s.sendmail(sender, recipient, msg.as_string())


它发送电子邮件,但仅发送第一个变量(cid),并将其作为附件发送。我希望所有变量都在电子邮件的正文中,而不是附件中。

如果我尝试打印传递给MIMEText的相同内容,则会产生预期的结果:

print(cid, cin, sttime)
('9545551212', 'UserA', '04/12/2018_23:03:47')


如果我只是向MIMEText输入文本字符串,它就可以正常发送。变量我在做什么错?我正在使用python 2.7.14。提前致谢。

最佳答案

MIMEText构造函数接受3个参数:_text_subtype_charset


_text是有效负载(消息正文)。
_subtype是mimetype子类型。默认值为'plain',将导致模仿类型'text/plain'
_charset是有效负载的字符编码(_text)。默认值为'us-ascii',这意味着不能包含unicode。要支持unicode,请使用'UTF-8'


因此,考虑到这一点,您要做的是构造有效负载并将其作为第一个参数(_text)传递给MIMEText。例如。,

创建格式为的有效负载:

cid: 9545551212
cin: UserA
sttime: 04/12/2018_23:03:47


您可以执行类似以下操作:

body = "cid: {}\ncin: {}\nsttime: {}".format(cid, cin, sttime)
msg = MIMEText(body)
...

关于python - 将多个变量传递给MIMEText的正确方法是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49808828/

10-08 22:08