问题描述
我正在尝试编写一个简单的脚本,在某些情况下必须发送简单的电子邮件。 如果我只使用这个脚本,我有以下脚本可以很好地工作。
import smtplib
mail_user = '[email protected]'
mail_password = 'password'
sent_from = mail_user
to = ['[email protected]']
subject = 'My subject'
body = 'Hello mail.'
email_text = """\
From: %s
To: %s
Subject: %s
%s
""" % (sent_from,",".join(to),subject,body)
try:
server = smtplib.SMTP_SSL('mail.123.com',465)
server.ehlo()
server.login(mail_user,mail_password)
server.sendmail(sent_from,to,email_text)
server.close()
print 'Email sent!'
except:
print 'Something went wrong...'
问题是当我试图将此代码放入 def 并且来自电子邮件外部的呼叫丢失标题时,我的意思是电子邮件到达时没有发件人也没有主题。发件人为空,主题为空,但我只有正文。 当我发送到另一个域时,我也无法收到邮件,但我认为这是因为另一个域拒绝了没有标题的邮件,当仅使用脚本时,邮件也会到达其他域。
import smtplib
def sendMail():
mail_user = '[email protected]'
mail_password = 'password'
sent_from = mail_user
to = ['[email protected]']
subject = 'My subject'
body = 'Hello mail.'
email_text = """\
From: %s
To: %s
Subject: %s
%s
""" % (sent_from,body)
try:
server = smtplib.SMTP_SSL('mail.123.com',email_text)
server.close()
print 'Email sent!'
except:
print 'Something went wrong...'
sendMail();
当我将此代码放入 def 时有什么不同?为什么会发生这种情况?我做错了什么?
感谢您的帮助。
解决方法
在您的函数版本中,您的电子邮件标题已缩进
email_text = """\
From: %s
To: %s
Subject: %s
%s
...
在这个字符串中,To:
和 Subject:
现在缩进了。
def sendMail():
调用它:
sendMail()
不是 SendMail()