无法使用Python examp发送电子邮件

2024-04-24 07:34:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试(但失败了)如何通过Python发送电子邮件。

从这里尝试示例: http://docs.python.org/library/smtplib.html#smtplib.SMTP

但在我得到关于没有SSL连接的回击后,添加了server = smtplib.SMTP_SSL('smtp.gmail.com', 465)这一行。

现在我明白了:

Traceback (most recent call last):
  File "C:/Python26/08_emailconnects/12_29_EmailSendExample_NotWorkingYet.py", line 37, in <module>
    server = smtplib.SMTP('smtp.gmail.com', 65)
  File "C:\Python26\lib\smtplib.py", line 239, in __init__
    (code, msg) = self.connect(host, port)
  File "C:\Python26\lib\smtplib.py", line 295, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "C:\Python26\lib\smtplib.py", line 273, in _get_socket
    return socket.create_connection((port, host), timeout)
  File "C:\Python26\lib\socket.py", line 512, in create_connection
    raise error, msg
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
>>> 

有什么想法?


server=smtplib.SMTP(“SMTP.google.com”,495)给我一个超时错误。只是smtplib.smtp(“smtp.google.com”,495)给了我“ssl error:[Errno 1]_ssl.c:480:error:140770FC:ssl routines:SSL23_GET_SERVER_HELLO:unknown protocol”(见下文)。

我在尝试不同的端口,现在我得到了一个全新的错误。我只需要发布全部代码,我可能犯了一些新手错误。

“。”

import smtplib

mailuser = 'MYEMAIL@gmail.com'

mailpasswd = 'MYPASSWORD'

fromaddr = 'MYEMAIL@gmail.com'

toaddrs = 'MYEMAIL2@gmail.com'

msg = 'Hooooorah!'

print msg

server = smtplib.SMTP_SSL('smtp.google.com')

server = smtplib.SMTP_SSL_PORT=587

server.user(mailuser)

server.pass_(mailpasswd)

server.set_debuglevel(1)

server.sendmail(fromaddr, toaddrs, msg)

server.quit()

“。”

然后我得到这个错误消息:“

Traceback (most recent call last):
  File "C:/Python26/08_emailconnects/12_29_eMAILSendtryin_stripped.py", line 16, in <module>
    server = smtplib.SMTP_SSL('smtp.google.com')
  File "C:\Python26\lib\smtplib.py", line 749, in __init__
    SMTP.__init__(self, host, port, local_hostname, timeout)
  File "C:\Python26\lib\smtplib.py", line 239, in __init__
    (code, msg) = self.connect(host, port)
  File "C:\Python26\lib\smtplib.py", line 295, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "C:\Python26\lib\smtplib.py", line 755, in _get_socket
    self.sock = ssl.wrap_socket(self.sock, self.keyfile, self.certfile)
  File "C:\Python26\lib\ssl.py", line 350, in wrap_socket
    suppress_ragged_eofs=suppress_ragged_eofs)
  File "C:\Python26\lib\ssl.py", line 118, in __init__
    self.do_handshake()
  File "C:\Python26\lib\ssl.py", line 293, in do_handshake
    self._sslobj.do_handshake()
SSLError: [Errno 1] _ssl.c:480: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

“。”

注意,实际上看起来像“server=smtplib.SMTP SSL PORT=587”的实际上是“server=smtplib.SMTP下划线SSL下划线端口=587”,这里正在进行某种格式化。


Tags: inpyselfcomhostsslserverlib
3条回答

问题是由a bug in Python引起的。尝试创建与SMTP SSL的连接将失败,并显示“SMTPServerDisconnected:please run connect()first”

已提交修复程序,因此您可以修补本地副本。请参阅名为“smtplib_72551.diff”的附件。

(注意:SMTP_SSL是添加到Python 2.6/3.0和更高版本中的一个新类。)

使用SSL连接GMail的正确方法是:

server = smtplib.SMTP('smtp.gmail.com', 587)

465端口似乎导致延迟。两个端口都在GMail FAQ中指定。

请注意,端口587的使用在SSL上的SMTP中更为常见,尽管这只是一些微不足道的信息,但它没有其他实际用途。

此答案作为社区wiki提供,以便选择为“the”答案。请根据需要改进。

以下代码对我有效:

import smtplib

FROMADDR = "my.real.address@gmail.com"
LOGIN    = FROMADDR
PASSWORD = "my.real.password"
TOADDRS  = ["my.real.address@gmail.com"]
SUBJECT  = "Test"

msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n"
       % (FROMADDR, ", ".join(TOADDRS), SUBJECT) )
msg += "some text\r\n"

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

我使用的是Python2.5.2。

编辑:将端口从25更改为587,并删除了第二个ehlo()。现在我想知道为什么端口25在我的机器上工作得很好(而端口465不工作)。

相关问题 更多 >