使用Python发送电子邮件时遇到的smtp错误

3

我不明白为什么这个代码不能用。我想用这个从网上找到的代码从我的学校邮箱地址发送邮件,但是同样的代码可以从我的GMail地址发送邮件。有人知道这个错误是什么意思吗?这个错误在等待大约一分半钟后出现。

import smtplib

FROMADDR = "FROM_EMAIL"
LOGIN    = "USERNAME"
PASSWORD = "PASSWORD"
TOADDRS  = ["TO_EMAIL"]
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('OUTGOING_SMTP', 465)
server.set_debuglevel(1)
server.ehlo()
server.starttls()
server.login(LOGIN, PASSWORD)
server.sendmail(FROMADDR, TOADDRS, msg)
server.quit()

以下是我收到的错误信息:


    Traceback (most recent call last): 
      File "emailer.py", line 13, in 
    server = smtplib.SMTP('OUTGOING_SMTP', 465)
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 239, in <strong>init</strong>
    (code, msg) = self.connect(host, port)
   File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 295, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 273, in _get_socket
    return socket.create_connection((port, host), timeout)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 514, in create_connection
    raise error, msg
socket.error: [Errno 60] Operation timed out


你检查过出站 SMTP 端口是否被阻止了吗? - halfdan
1个回答

3

很可能你学校的SMTP服务器不允许外部访问端口587。Gmail允许,并要求身份验证以确保您是您所说的人(以及防止垃圾邮件发送者发送伪造的电子邮件,看起来像是从您那里发送的,除非他们知道您的密码)。您的学校可能选择设置其邮件服务器,以便只有来自学校内部的连接可以以这种方式发送邮件。


谢谢。我尝试了465端口,现在没有错误信息了,它一直停留在那里直到我使用ctrl+c进行键盘中断。结果的错误信息太长放不下在这个评论中。是否适合用这个新信息开始另一个问题? - jakecar
@jakecar:是什么促使你尝试使用465端口?那是SSL上的SMTP,除非你知道你的学校支持该协议,否则他们可能不支持。 - Greg Hewgill
你说得对,我刚意识到我的学校使用SSL :X...我猜我需要添加一些特殊代码来处理SSL? - jakecar
@jakecar:是的,你会的。也许现在最好的方法是开一个新问题,比如“如何使用Python通过SMTP over SSL连接到邮件服务器?” - Greg Hewgill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接