服务器不支持STARTTLS扩展

时间:2011-06-15 09:10:32

标签: python email

这可能是一个重复的问题,但我仍然面临着这个问题,希望有一个解决方案。提前谢谢。

我正在尝试通过公司的服务器发送邮件

我目前正在使用Python 2.6和Ubuntu 10.04

这是我收到的错误消息

Traceback (most recent call last):

  File "hxmass-mail-edit.py", line 227, in <module>
    server.starttls()

  File "/usr/lib/python2.6/smtplib.py", line 611, in starttls
    raise SMTPException("STARTTLS extension not supported by server.") smtplib.SMTPException: STARTTLS extension not supported by server.

这是代码的一部分

server = smtplib.SMTP('smtp.abc.com', 587)
server.set_debuglevel(1)
server.ehlo()
server.starttls()
server.ehlo()
server.login('sales@abc.com', 'abc123')
addressbook=sys.argv[1]

8 个答案:

答案 0 :(得分:7)

删除ehlo()之前的starttls()

starttls() + ehlo()会产生两条HELLO消息,导致服务器删除回复消息中的STARTTLS

server = smtplib.SMTP('smtp.abc.com', 587)
server.starttls()
server.ehlo()
server.login('sales@abc.com', 'abc123')

答案 1 :(得分:3)

server.ehlo()之前移除server.starttls()帮助我让代码正常工作!谢谢你,伦纳德! 我的代码:

s = smtplib.SMTP("smtp.gmail.com",587)
s.starttls()
s.ehlo
try:
    s.login(gmail_user, gmail_psw)
except SMTPAuthenticationError:
    print 'SMTPAuthenticationError'
s.sendmail(gmail_user, to, msg.as_string())
s.quit()

答案 2 :(得分:3)

我尝试通过公司的服务器发送邮件时遇到类似的问题(无需验证)

我解决了删除server.ehlo和端口号的问题:

server = smtplib.SMTP("smtp.mycompany.com")
server.sendmail(fromaddr, toaddr, text)

答案 3 :(得分:2)

我可以通过添加服务器名称的端口号来解决以下代码的问题:

server = smtplib.SMTP('smtp.abc.com:587')

答案 4 :(得分:1)

错误说明了一切,似乎SMTP服务器正在使用不支持STARTTLS并且你aru发布server.starttls()。尝试使用服务器而不调用server.starttls()

没有更多信息是我唯一可以说的。

答案 5 :(得分:1)

from smtplib import SMTP_SSL, SMTP, SMTPAuthenticationError
from ssl import create_default_context
from email.message import EmailMessage

sender = 'aaa@bbb.com'
description = "This is the test description supposed to be in body of the email."
msg = EmailMessage()
msg.set_content(description)
msg['Subject'] = 'This is a test title'
msg['From'] = f"Python SMTP <{sender}>"
msg['To'] = 'bbb@ccc.com'


def using_ssl():
    try:
        server = SMTP_SSL(host='smtp.gmail.com', port=465, context=create_default_context())
        server.login(sender, password)
        server.send_message(msg=msg)
        server.quit()
        server.close()
    except SMTPAuthenticationError:
        print('Login Failed')


def using_tls():
    try:
        server = SMTP(host='smtp.gmail.com', port=587)
        server.starttls(context=create_default_context())
        server.ehlo()
        server.login(sender, password)
        server.send_message(msg=msg)
        server.quit()
        server.close()
    except SMTPAuthenticationError:
        print('Login Failed')

答案 6 :(得分:0)

您确定要加密(StartTLS)与邮件服务器的连接吗?我会联系知道该服务器内部的人,看看要使用的协议/加密。

您说在删除对server.starttls()的调用后,您会收到一系列不同的错误消息。你也可以发布这些消息吗?

此外,您可能希望阅读StartTLS,以便了解它是什么以及为什么要使用它。看来你正在写一个严肃的商业计划,在这种情况下,你可能想要了解你在做什么,安全方面。

答案 7 :(得分:-3)

是的,将server.starttls()置于server.ehlo()之上解决了这个问题。