我现在正在开发一个需要发送电子邮件功能的项目。我的问题是,每当我将电子邮件代码放入函数中时,它就会停止工作。
这是该函数(当然不包括实际的电子邮件和密码信息):
import smtplib, ssl
port = 465
smtp_server = "smtp.gmail.com"
sender_email = "my_email@gmail.com"
receiver_email = "their_email@gmail.com"
password = "password"
message = """\
Subject: Subject
This is the email body"""
def send(msg):
context = ssl.create_default_context()
with smtplib.SMTP_SSL(smtp_server, port, context=context) as server:
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, msg)
print("SENT")
if __name__ == "__main__":
send(message)
这甚至不会给我错误,它只是不起作用。但是,如果我这样做,一切都会正常:
import smtplib, ssl
port = 465
smtp_server = "smtp.gmail.com"
sender_email = "my_email@gmail.com"
receiver_email = "their_email@gmail.com"
password = "password"
message = """\
Subject: Subject
This is the email body"""
context = ssl.create_default_context()
with smtplib.SMTP_SSL(smtp_server, port, context=context) as server:
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)
print("SENT")
对于为什么会发生这种情况有什么想法吗?
最佳答案
我能看到的唯一区别是电子邮件内容中主题行之前的空格。尝试删除它,使您的代码片段如下:
import smtplib, ssl
port = 465
smtp_server = "smtp.gmail.com"
sender_email = "my_email@gmail.com"
receiver_email = "their_email@gmail.com"
password = "password"
message = """\
Subject: Subject
This is the email body"""
def send(msg):
context = ssl.create_default_context()
with smtplib.SMTP_SSL(smtp_server, port, context=context) as server:
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, msg)
print("SENT")
if __name__ == "__main__":
send(message)
鉴于这是您的两个片段中唯一真正的区别,这是我对出了什么问题的最佳想法。
关于python - 用Python制作一个电子邮件函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56945085/