gpt4 book ai didi

python - smtplib - 发送但在 while 循环中缩进时没有主题

转载 作者:行者123 更新时间:2023-11-30 23:19:32 29 4
gpt4 key购买 nike

因之前不清楚而进行了编辑。

如果我在不处于 while 循环的情况下运行下面的代码,它会完美运行。一旦我将其放入 while 循环中(我需要将其作为较大脚本的一部分),它就会由于某种原因丢失邮件的主题并将其发送为空白。其他一切都很好 - 电子邮件的收件人、发件人和正文都很好。它只是出于某种原因放弃了这个话题。有什么想法吗?

import smtplib
import time


while True :
newnumber = "200"
oldnumber = "100"
SERVER = "mail"
FROM = "mail"
TO = "mail"
SUBJECT = "Blah blah blah blah blah"
BODY = """Blah blah blah blah blah.\n\n
The new number is: %s\n
The old number is: %s\n\n
Blah blah blah blah blah.\n\n
Blah blah blah blah blah\n
Blah.""" % (newnumber,oldnumber)

message = """\
From: %s
To: %s
Subject: %s

%s
""" % (FROM, TO, SUBJECT, BODY)

if oldnumber < newnumber:
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
time.sleep(60)

最佳答案

好的,正如我在上面的评论中所建议的,问题来自于您的 message 缩进。 header 不再按照 SMTP 协议(protocol)的要求位于行首,并且可能会被拒绝进入邮件正文。您必须写:

message = "From: %s\nTo: %s\nSubject: %s\n\n%s" % (FROM, TO, SUBJECT, BODY)

    message = """\
From: %s
To: %s
Subject: %s

%s\
""" % (FROM, TO, SUBJECT, BODY)

事实上,您必须确保 From:To:Subject: 之前不能有任何空格。

您还可以使用 smtpd 模块测试发送的邮件。

python -m smtpd -c DebuggingServer -n localhost:8025

启动一个 smtp 服务器,监听本地主机上的端口 8025,并简单地显示收到的消息。如果您使用过它,您会看到标题存在,但它们没有从第一列开始。

最后一句话:您为每条消息重新打开与 smtp 服务器的新连接。您可以通过编写来避免它:

import smtplib
import time

server = smtplib.SMTP(SERVER)
while True :
...
if oldnumber < newnumber:
server.sendmail(FROM, TO, message)
time.sleep(60)

server.quit()

关于python - smtplib - 发送但在 while 循环中缩进时没有主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26013594/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com