Office 365 上使用应用程序密码进行 SMTP 身份验证是否需要连接器?

eva*_*van 1 python smtplib office365

我们最近在我们的帐户上启用了 MFA,该功能会向员工/客户发送自动电子邮件,因此显然我们需要一种新的方法来验证该流程。OAuth 似乎有点大材小用,所以我选择了“应用程序密码”路线,我已经通过 Gmail 等服务无缝地完成了这一过程。

但这不起作用...我收到以下错误:

smtplib.SMTPAuthenticationError: (535, b'5.7.139 身份验证失败,请求不符合成功身份验证的条件。请联系您的管理员。[CH0PR03CA0182.namprd03.prod.outlook.com]')

请注意,SMTP 身份验证已打开,并且我使用的是 STARTTLS 1.2。我见过人们传递如下参数:

SMTPSecure: 'tls'
SMTPAuth: true;
Run Code Online (Sandbox Code Playgroud)

...但我不知道是否需要这样做,因为在 MFA 切换之前它运行良好。我也不知道如何使用 smtplib 发送这些内容

有人有建议吗?有人告诉我我可能需要 SMTP 连接器?这也似乎是一个过于复杂的过程,并且在任何指导用户设置应用程序密码的微软文章中都没有提到。我的代码如下,fwiw。自从启用 MFA 以来,我没有更改任何内容:

def send_mail(recipients: str, subject: str, body: str, attachments: list = None, cc: str = None):
    credentials = get_credentials()
    smtp_srv_name = "smtp.office365.com"
    smtp_server = smtplib.SMTP(smtp_srv_name, 587)
    msg = MIMEMultipart()
    msg['Subject'] = subject
    msg['From'] = 'xxxxxxxxxxxxx'
    msg['To'] = recipients
    msg['Cc'] = cc
    msg.attach(MIMEText(body, 'plain'))
    if attachments is not None:
        for attachment in attachments:
            with open(attachment, 'rb') as attachment_fileobject:
                part = MIMEBase('application', 'octet-stream')
                part.set_payload(attachment_fileobject.read())
                encoders.encode_base64(part)
                part.add_header('Content-Disposition', f"attachment; filename={Path(attachment).name}")
                msg.attach(part)
    smtp_server.starttls()
    smtp_server.login('xxxxxxxxxxxxx', mc_decrypt(credentials['notices_email_pw'], CRYPT_KEY))
    smtp_server.send_message(msg)
    smtp_server.close()
Run Code Online (Sandbox Code Playgroud)

eva*_*van 8

修复。我所要做的就是禁用 Azure 安全默认值。该建议出现在一篇 MS 支持文章中,但显然没有在 Google 上建立索引......所以内容如下:

\n

Microsoft 365 邮箱的 SMTP 身份验证问题

\n

如果您在尝试通过 Microsoft 365 验证设备或应用程序来发送电子邮件时收到“客户端未经过身份验证”、“身份验证失败”或“SmtpClientAuthentication”错误,代码为 5.7.57 或 5.7.3 或 5.7.139为了使其发挥作用,您应该执行三件事:

\n
    \n
  1. 在正在使用的许可邮箱上启用客户端 SMTP 提交 -
  2. \n
\n

运行以下 Powershell 命令-\nSet-CASMailbox -Identity sean@contoso.com -SmtpClientAuthenticationDisabled $false

\n

或者

\n

从 Microsoft 365 管理中心,转到“活动用户”并选择用户\n转到“邮件”选项卡\n在 \xe2\x80\x9c电子邮件应用\xe2\x80\x9d 部分中,单击 \xe2\x80\x9c管理电子邮件应用\xe2\ x80\x9d\n验证 \xe2\x80\x9cAuthenticated SMTP\xe2\x80\x9d 设置已选中(已启用)\n单击“保存更改”。

\n
    \n
  1. 通过将 \xe2\x80\x9cEnable Security Defaults\xe2\x80\x9d 切换为 \xe2\x80\x9cNo\xe2\x80\x9d 来禁用 Azure 安全默认值。
  2. \n
\n

以安全管理员、条件访问管理员或全局管理员身份登录\xe2\x80\xafAzure 门户\xe2\x80\xaf。\n浏览到\xe2\x80\xafAzure Active Directory\xe2\x80\xaf>\xe2\ x80\xafProperties。\n选择“管理安全默认值”。\n将“启用安全默认值”切换设置为“否”。\n选择“保存”。

\n
    \n
  1. 在正在使用的许可邮箱上禁用多重身份验证 (MFA) -
  2. \n
\n

在 Microsoft 365 管理中心的左侧导航菜单中,选择“用户”>“活动用户”。\n在“活动用户”页面上,选择“多重身份验证”。\n在多重身份验证页面上,选择用户并禁用多重身份验证地位。

\n

  • 我已经很多年没有做过太多与微软相关的管理工作了。如今,他们所有的管理面板都给人一种脱节的感觉,真是令人难以置信。Azure 管理、Exchange 管理、Office 管理等等。天啊,真是一团混乱。 (2认同)