【问题标题】:Sending an email via gmail through a python application通过 python 应用程序通过 gmail 发送电子邮件
【发布时间】:2012-03-15 20:33:00
【问题描述】:

如标题所示,我在通过 python 应用程序通过我的 gmail 帐户发送电子邮件时遇到问题。我在网上搜索了解决方案,但似乎没有任何解决方案,我想我可以在这里问。 我的代码如下:

FROMADDR = "myemail@gmail.com"
LOGIN    = FROMADDR
PASSWORD = "mypass"
TOADDRS  = "varis81@hotmail.com"
msg = "Test message"
server = smtplib.SMTP('smtp.gmail.com', 587)
server.set_debuglevel(1)
server.ehlo()
server.starttls()
server.login(LOGIN, PASSWORD)
server.sendmail(FROMADDR, TOADDRS, msg)
server.quit()
print "E-mail succesfully sent"

我收到消息:

socket.error: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

我尝试了不同的端口,但它也不起作用。我也尝试了 hotmail,但它导致了同样的问题。我在使用 PyDev 在 Eclipse 上开发的 Windows 7 机器上使用 Python 2.7(不要问:))。

任何帮助都会很棒! 提前谢谢你。

【问题讨论】:

    标签: python email python-2.7


    【解决方案1】:

    我在我的一台服务器上使用相同的构造。我的代码如下。

    唯一的区别是在 '.starttls()` 之后额外的 .ehlo()。这应该不是问题;来自RFC

    5.2 Result of the STARTTLS Command
    
    The client SHOULD send an EHLO command as the first
    command after a successful TLS negotiation.
    

    根据 RFC,如果客户端在 starttls 之后没有发送 ehlo,则服务器不应断开连接,但 Google 可能会对其 SMTP 服务器进行更多限制。我会先检查一下。 (我已经看到供应商收紧这些条件以减少垃圾邮件,例如,请参阅Mailinator's 2007 writeup。)

    它也可能是过滤端口 - 尝试在 REPL 中运行代码并确认哪一行出现异常,如果是 connect(),你就会知道它是网络。如果是之后,很可能是您使用了smtplib.

    值得注意的是,我还偶尔遇到过不正常的关机,导致 .close() 附近出现 try/except。

    import smtplib
    s = smtplib.SMTP()
    s.connect("smtp.gmail.com")
    s.ehlo()
    s.starttls()
    s.ehlo()
    s.login("from@gmail.com", "frompass") 
    s.sendmail("fromname@gmail.com", toAddr, bytes)
    try:
        s.close()
    except: pass
    

    【讨论】:

      【解决方案2】:

      好吧,既然我不能发布 cmets,我将不得不尝试回答..

      由此判断:Python SMTP Errno 10060 也许超时会有所帮助?

      【讨论】:

      • 感谢您的回答。实际上我之前尝试过但没有帮助。它会导致同样的问题。
      • 嗯,我感觉这可能是端口/端口转发受阻的问题。您是否尝试过使用端口 25 作为传出端口?
      • 这是默认设置对吗?如何明确设置?我将在另一个网络中对其进行测试,看看它是否在那里工作。
      • 尝试更改以下行:server = smtplib.SMTP('smtp.gmail.com', 25)
      • 啊,是的,我已经这样做了,它也会导致同样的问题。我以为你说我的电脑的 25 端口被阻塞,它无法转发连接。但现在我认为它应该'不可能,因为错误信息是连接部分没有响应。
      猜你喜欢
      • 1970-01-01
      • 2016-09-09
      • 2015-09-28
      • 2012-01-07
      • 2023-03-19
      • 2017-10-06
      • 2019-02-04
      相关资源
      最近更新 更多