Python发送简单邮件

问题描述

我正在尝试编写一个简单的脚本,在某些情况下必须发送简单的电子邮件。 如果我只使用这个脚本,我有以下脚本可以很好地工作。

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()