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)
修复。我所要做的就是禁用 Azure 安全默认值。该建议出现在一篇 MS 支持文章中,但显然没有在 Google 上建立索引......所以内容如下:
\nMicrosoft 365 邮箱的 SMTP 身份验证问题
\n如果您在尝试通过 Microsoft 365 验证设备或应用程序来发送电子邮件时收到“客户端未经过身份验证”、“身份验证失败”或“SmtpClientAuthentication”错误,代码为 5.7.57 或 5.7.3 或 5.7.139为了使其发挥作用,您应该执行三件事:
\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以安全管理员、条件访问管理员或全局管理员身份登录\xe2\x80\xafAzure 门户\xe2\x80\xaf。\n浏览到\xe2\x80\xafAzure Active Directory\xe2\x80\xaf>\xe2\ x80\xafProperties。\n选择“管理安全默认值”。\n将“启用安全默认值”切换设置为“否”。\n选择“保存”。
\n在 Microsoft 365 管理中心的左侧导航菜单中,选择“用户”>“活动用户”。\n在“活动用户”页面上,选择“多重身份验证”。\n在多重身份验证页面上,选择用户并禁用多重身份验证地位。
\n| 归档时间: |
|
| 查看次数: |
7562 次 |
| 最近记录: |