Python不发送电子邮件:smtplib.SMTPException:服务器不支持STARTTLS扩展名

时间:2015-05-13 16:14:45

标签: python email localhost

我正在尝试通过Python发送电子邮件,但我遇到了错误。

这是我的代码:

import smtplib

content = 'example bla bla'
mail = smtplib.SMTP('localhost')
mail.ehlo()
mail.starttls()
mail.login('from@example.com','password')
mail.sendmail('from@example.com','to@example.com',content)
mail.close()

当我运行该文件时,会出现此错误:

Traceback (most recent call last):
  File "SendEmail.py", line 11, in <module>
    mail.starttls()
  File "/usr/lib/python2.7/smtplib.py", line 637, in starttls
    raise SMTPException("STARTTLS extension not supported by server.")
smtplib.SMTPException: STARTTLS extension not supported by server.

有关于其他人有相同问题的帖子,但通常只是命令的顺序错误(如this one),显然我的是正确的。

如果我将mail = smtplib.SMTP('localhost')更改为mail = smtplib.SMTP('smtp.gmail.com', 587),则效果很好。这让我觉得问题可能在于“localhost”的配置,但是如果我在浏览器中打开http://localhost,则会显示“It works”页面,所以我认为localhost配置得很好。

有谁知道问题出在哪里?

2 个答案:

答案 0 :(得分:1)

尝试发表评论mail.starttls()。我有这个问题,它在我的代码中有效。

import smtplib
import string
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.text import MIMEText

smtpObj = smtplib.SMTP('mailrelay.address.com', 587) #email relay address
smtpObj.ehlo()
#smtpObj.starttls() #commented this out as was causing issues
smtpObj.login('domain\username', 'pwrd123')

答案 1 :(得分:0)

您可能不需要登录运行在&#39; localhost&#39;上的SMTP服务器。 (&#39; localhost&#39;通常与运行程序的计算机相同。)

试试这个:

import smtplib

content = 'example bla bla'
mail = smtplib.SMTP('localhost')
mail.ehlo()
mail.sendmail('from@example.com','to@example.com',content)
mail.close()