Python 登录邮件服务器认证错误。

10

我在一台Linux机器上。 我的公司有一个已经配置好的电子邮件交换服务器。 我正在使用Python脚本尝试登录到电子邮件服务器,以便可以编程方式发送电子邮件。 这是我目前的进展 -

server = smtplib.SMTP('email-0.abc.com', 25)
server.set_debuglevel(1)
server.ehlo_or_helo_if_needed()    
server.login('abc/johndoe', 'pwd')

然而,在server.login命令处,我遇到了一个错误:
raise SMTPException("No suitable authentication method found.")
SMTPException: No suitable authentication method found.

请问有人知道问题是什么吗?

谢谢

4个回答

8

3

2
非常感谢,是的我正在使用MS Exchange,让我查看那篇文章。同时,我也意识到我可以在未登录的情况下发送电子邮件 - 这很有效。server.sendmail(sender, recipients,msg_txt) - Nupur

1

我连接的Exchange服务器需要NTLM身份验证,但smtplib默认不支持。

截至本文撰写时(2022年1月),根据我的初步研究,解决此问题的最受关注的Python库是pyspnego。以下代码片段由库作者提供,在我的测试中可以直接使用,无需进行任何修改:

import base64
import spnego

from smtplib import SMTPException, SMTPAuthenticationError


def ntlm_authenticate(smtp, username, password):
    auth = spnego.client(username, password, service="SMTP", protocol="ntlm")
    ntlm_negotiate = auth.step()

    code, response = smtp.docmd("AUTH", "NTLM " + base64.b64encode(ntlm_negotiate).decode())
    if code != 334:
        raise SMTPException("Server did not respond as expected to NTLM negotiate message")

    ntlm_challenge = base64.b64decode(response)
    ntlm_auth = auth.step(ntlm_challenge)
    code, response = smtp.docmd("", base64.b64encode(ntlm_auth).decode())
    if code != 235:
        raise SMTPAuthenticationError(code, response)

0

我也遇到了同样的错误。我的情况可能与你不同,但错误与你提到的一样。

在我的情况下,我不需要传递用户名和密码进行身份验证,因为服务器IP已添加到SMTP邮件服务器的白名单中。而我正在传递用于身份验证的用户名和密码,这导致出现错误,指出“找不到合适的身份验证方法”。

这可能不是你的情况,但我想分享一下我的经验,以便任何来到这个线程的人都可以从中受益。

谢谢。


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