循环生成的电子邮件不发送主题
Emails generated in loop not sending subject
以下脚本正确发送:
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)
在后一个示例中,电子邮件不包含主题或发件人字段。相反,它们出现在体内。
正文示例:
发件人:我@yahoo.com
致:我@yahoo.com
主题:数据保存成功
这是消息1fdsa
在前面的例子中,只有 "This is a the message 1fdsa" 部分出现在正文中。为什么 smtplib 模块在 for loop
中时无法正确读取来自 message
的发件人、收件人和主题字段?
您已将代码缩进作为循环的一部分,但 multi-line 字符串还包括每行的前导空格作为字符串本身的一部分 - 正如您将其打印出来时所看到的.电子邮件对此类事情非常敏感,因此它不再将这些行视为 headers.
最好通过字符串连接来完成此操作:
message = (
'From: me@yahoo.com \n'
'To: %s \n'
'Subject: Data saved successfully \n'
'%s' %(args.r,TEXT)
)
因为这些行都在括号内,所以它们会自动连接起来。
以下脚本正确发送:
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)
在后一个示例中,电子邮件不包含主题或发件人字段。相反,它们出现在体内。
正文示例:
发件人:我@yahoo.com
致:我@yahoo.com
主题:数据保存成功
这是消息1fdsa
在前面的例子中,只有 "This is a the message 1fdsa" 部分出现在正文中。为什么 smtplib 模块在 for loop
中时无法正确读取来自 message
的发件人、收件人和主题字段?
您已将代码缩进作为循环的一部分,但 multi-line 字符串还包括每行的前导空格作为字符串本身的一部分 - 正如您将其打印出来时所看到的.电子邮件对此类事情非常敏感,因此它不再将这些行视为 headers.
最好通过字符串连接来完成此操作:
message = (
'From: me@yahoo.com \n'
'To: %s \n'
'Subject: Data saved successfully \n'
'%s' %(args.r,TEXT)
)
因为这些行都在括号内,所以它们会自动连接起来。