【问题标题】:Emails generated in loop not sending subject循环生成的电子邮件不发送主题
【发布时间】:2015-09-26 21:08:11
【问题描述】:

以下脚本正确发送:

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”部分出现在正文中。为什么当 message 位于 for loop 中时,smtplib 模块无法正确读取 from、to 和 subject 字段?

【问题讨论】:

    标签: python email for-loop smtplib


    【解决方案1】:

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

    最好通过字符串连接来做到这一点:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多