【发布时间】:2023-02-06 10:34:43
【问题描述】:
这段代码可以正常工作并给我发一封电子邮件:
import smtplib
#SERVER = "localhost"
FROM = 'monty@python.com'
TO = ["jon@mycompany.com"] # must be a list
SUBJECT = "Hello!"
TEXT = "This message was sent with Python's smtplib."
# Prepare actual message
message = """\
From: %s
To: %s
Subject: %s
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
# Send the mail
server = smtplib.SMTP('myserver')
server.sendmail(FROM, TO, message)
server.quit()
但是,如果我尝试将其包装在这样的函数中:
def sendMail(FROM,TO,SUBJECT,TEXT,SERVER):
import smtplib
"""this is some test documentation in the function"""
message = """\
From: %s
To: %s
Subject: %s
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
# Send the mail
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
并称之为我收到以下错误:
Traceback (most recent call last):
File "C:/Python31/mailtest1.py", line 8, in <module>
sendmail.sendMail(sender,recipients,subject,body,server)
File "C:/Python31\sendmail.py", line 13, in sendMail
server.sendmail(FROM, TO, message)
File "C:\Python31\lib\smtplib.py", line 720, in sendmail
self.rset()
File "C:\Python31\lib\smtplib.py", line 444, in rset
return self.docmd("rset")
File "C:\Python31\lib\smtplib.py", line 368, in docmd
return self.getreply()
File "C:\Python31\lib\smtplib.py", line 345, in getreply
raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed
谁能帮我理解为什么?
【问题讨论】:
-
你怎么调用这个函数?
-
您发布的缩进与文件中的缩进相同吗?
-
@g.d.d.c 不,我确保正确缩进,这就是我粘贴它的方式。
-
我通过将函数导入我的主模块并将我定义的参数传递给它来调用该函数。
-
尽管@Arrieta 建议使用电子邮件包是解决此问题的最佳方法,但您的方法可行。您的两个版本之间的差异在字符串中:(1) 正如@NickODell 指出的那样,函数版本中有前导空格。标头不应有前导空格(除非它们被换行)。 (2) 除非 TEXT 包含一个前导空行,否则您将丢失标题和正文之间的分隔符。
标签: python email function smtplib