9

我在一台 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

4 回答 4

6

您可能需要切换到 STARTTLS 身份验证。这是一个帮助我的例子。

如何通过 SMTPLIB 在 Python 中发送电子邮件

于 2014-05-15T21:00:06.847 回答
3

您的邮件服务器似乎拒绝了普通的身份验证方法。

你用什么服务器?

如果是 MS Exchange 请看这篇文章:http ://www.exchangeinbox.com/article.aspx?i=93

于 2012-10-02T18:44:39.187 回答
0

我遇到了同样的错误。我的情况可能与您的情况不同,但错误与您提到的相同。

在我的场景中,我不必通过用户名和密码进行身份验证,因为服务器 IP 已添加到 SMTP 邮件服务器的白名单中。我正在传递用户名和密码进行身份验证,这给了我一个错误,指出“找不到合适的身份验证方法”。

你可能不是这种情况,但我只是想分享我对同样错误的经验,以便任何来到这个线程的人都可以从中受益。

谢谢。

于 2018-04-24T06:26:32.430 回答
0

我连接的 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)
于 2022-01-20T14:58:29.443 回答