循环中生成的电子邮件未发送主题

时间:2015-07-08 18:59:47

标签: python email for-loop smtplib

以下脚本正确发送:

import smtplib, argparse
parser = argparse.ArgumentParser(description="fdsafsa")
parser.add_argument('-r', nargs='?', default=False, help='help')
args = parser.parse_args()
foo = 1
baz = 'fdsa'
TEXT = 'This is the message %d%s' %(foo,baz)

message = '\
From: me@yahoo.com \n\
To: %s \n\
Subject: Data saved successfully \n\
%s' %(args.r,TEXT)

s = smtplib.SMTP('localhost')
s.sendmail('me@yahoo.com',args.r,message)

但是此脚本无法正确发送电子邮件(请注意for loop

import smtplib, argparse
parser = argparse.ArgumentParser(description="fdsafsa")
parser.add_argument('-r', nargs='?', default=False, help='help')
args = parser.parse_args()
for ii in range(2):
    foo = 1d
    baz = 'fdsa'
    TEXT = 'This is the message %d%s' %(foo,baz)

    message = '\
    From: me@yahoo.com \n\
    To: %s \n\
    Subject: Data saved successfully \n\
    %s' %(args.r,TEXT)

    s = smtplib.SMTP('localhost')
    s.sendmail('me@yahoo.com',args.r,message)

在后一个示例中,电子邮件不包含主题或来自字段。它们出现在身体中。

示例正文:

来自:me@yahoo.com

致:me@yahoo.com

主题:数据已成功保存

这是消息1fdsa

在前面的例子中只有"这是消息1fdsa"部分出现在体内。为什么smtplib模块在message处于for loop时无法正确读取$('#clickme').click( function(){中的from,to和subject字段?

1 个答案:

答案 0 :(得分:2)

您已将代码缩进为循环的一部分,但多行字符串还包含每行上的前导空格作为字符串本身的一部分 - 因为您看看是否将其打印出来。电子邮件对这类内容非常敏感,因此不再将这些行视为标题。

通过字符串连接做到这一点要好得多:

message = (
    'From: me@yahoo.com \n'
    'To: %s \n'
    'Subject: Data saved successfully \n'
     '%s' %(args.r,TEXT)
)

由于这些行都在括号内,因此它们将自动连接。

相关问题