【问题标题】:Sending an Email with Python Issue发送带有 Python 问题的电子邮件
【发布时间】:2014-01-08 22:33:53
【问题描述】:

我有这段代码,但我似乎无法让它工作。当我运行它时,除非我手动杀死它,否则脚本不会在 IDLE 中完成。我已经翻遍并重写了几次代码,但没有运气。

import smtplib

SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587

sender = 'abc@gmail.com'
password = '123'
recipient = 'cba@gmail.com'
subject = 'Test Results'
body = """** AUTOMATED EMAIL ** \r\n Following are
            the test results:  \r\n"""

headers = ["From: " + sender,
           "Subject: " + subject,
           "To: " + recipient]
headers = "\r\n".join(headers)

try:
      session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
      session.ehlo()
      session.starttls()
      session.ehlo()
      session.login(sender, password)
      session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
except smtplib.SMTPException:
      print "Error: Unable to send email."

session.quit()

【问题讨论】:

  • 是否有任何错误日志可以让您查看脚本卡住时发生的情况?
  • 尝试将您的 except 行更改为 except smtplib.SMTPException as e: 然后打印 e
  • @wnnmaw 我试过了,但同样的事情发生了,光标只是闪烁,脚本没有完成,我必须手动杀死它。
  • @summea 我不知道如何查看错误日志...?

标签: python email


【解决方案1】:

不知道你为什么使用ehlo;与流行的观点相反,只要您正确设置标题,它实际上并不是必需的。这是一个经过测试和工作的脚本——它适用于 *nix 和 OSX。由于您使用的是 Windows,因此我们需要进一步排除故障。

import smtplib, sys

def notify(fromname, fromemail, toname, toemail, subject, body, password):
    fromaddr = fromname+" <"+fromemail+">"
    toaddrs = [toname+" <"+toemail+">"]
    msg = "From: "+fromaddr+"\nTo: "+toemail+"\nMIME-Version: 1.0\nContent-type: text/plain\nSubject: "+subject+"\n"+body

    # Credentials (if needed)
    username = fromemail
    password = password

    # The actual mail send
    try:
        server = smtplib.SMTP('smtp.gmail.com:587')
        server.starttls()
        server.login(username,password)
        server.sendmail(fromaddr, toaddrs, msg)
        server.quit()       
        print "success"
    except smtplib.SMTPException:
        print "failure"

fromname = "Your Name"
fromemail = "yourgmailaccount@gmail.com"        
toname = "Recipient"
toemail = "recipient@other.com"
subject = "Test Mail"
body = "Body....."

notify(fromname, fromemail, toname, toemail, subject, body, password)

【讨论】:

  • 我复制了这个脚本并更改了 fromname 等并添加了密码,但同样的事情仍然发生在我身上。它运行,但光标只是闪烁,除非我杀死它,否则它不会完成。
  • 这绝对是发送邮件的问题。看看是否可以使用sendmail 从命令行成功发送邮件?下一步是检查日志。
  • 对不起,我不知道你在说什么。我打开 cmd.exe 并输入 sendmail,它说它无法识别...
  • 哦,Windows 是另一回事。你不会有 sendmail 来测试。我也写错了:将except SMTPException:更改为except smtplib.SMTPException:。尝试故意输入错误的 smtp url 以查看它是否正确处理错误(例如 smtpa.gmail.com:587)。
  • 想知道是否是 Windows 导致了问题?不知何故,您需要找到 Windows smtplib 日志。能不能用PrtQryUI来确保你可以访问587上的google服务器?
猜你喜欢
  • 2018-12-08
  • 2018-06-13
  • 2013-09-26
  • 1970-01-01
  • 2014-11-09
  • 2017-02-04
  • 2017-05-04
  • 2012-01-02
  • 1970-01-01
相关资源
最近更新 更多