数据库邮件不会发送邮件到smtp.office365.com

问题描述 投票:0回答:4

我正在使用 SQL Server 2017,尝试配置数据库邮件。如果我使用 smtp.gmail.com 数据库邮件工作正常。但是,客户端正在使用 smtp.office365.com,我无法让它工作。我得到的错误是:

由于邮件服务器故障,邮件无法发送给收件人。”

我知道我正在传递工作的凭据/配置信息,因为我有一个 C# 应用程序,可以使用相同的信息发送电子邮件。对于我正在使用的数据库邮件配置:

Basic Authentication
PORT = 587
Use SSL = True
Server Name = smtp.office365.com

..是的,我用于身份验证的“用户名” - 与“电子邮件地址”条目匹配。

有人知道为什么 smtp.office365.com 在数据库邮件中不起作用吗?

另一条注释 - 每隔一段时间它就会起作用 - 我只是大多数时候无法让它工作。

sql-server smtp database-mail
4个回答
9
投票

问题诊断

首先通过 SSMS 使用 SQL Server > 管理 > 数据库邮件(右键单击)> 查看数据库邮件日志诊断数据库邮件问题。您可能会看到的错误消息示例包括:

The mail could not be sent to the recipients because of the mail server failure. (...
  Exception Message: Cannot send mails to mail server. (
    Failure sending mail.
  ).
)

不幸的是,这是一个非常通用的错误消息。这可能意味着您的本地服务器、.NET Framework 或 DatabaseMail.exe 进程本身尚未配置为启用 TLS 1.2 协议,因此无法使用 TLS 1.0 或 TLS 1.1 协议进行连接。

The mail could not be sent to the recipients because of the mail server failure. (...
  Exception Message: Cannot send mails to mail server. (
   Error in processing. The server response was: 5.7.3 STARTTLS is required to send mail [FOO.BAR.prod.outlook.com]
  ).
)

这意味着“此服务器需要安全连接(SSL)”尚未勾选。必须勾选此项才能启用 STARTTLS 命令,该命令建立安全通信通道,通过该通道发送 SMTP 基本身份验证。

The mail could not be sent to the recipients because of the mail server failure. (...
  Exception Message: Cannot send mails to mail server. (
    The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.57 Client not authenticated to send mail. Error: 535 5.7.139 Authentication unsuccessful, SmtpClientAuthentication is disabled for the Tenant. Visit https://aka.ms/smtp_auth_disabled for more information. [FOO.BAR.prod.outlook.com]
  ).
)

这意味着基本身份验证详细信息中使用的 Office365 邮箱尚未启用 SMTP AUTH 属性。

SQL Server 的 DatabaseMail 与 smtp.office365.com 要求

  1. 发送帐户的邮箱必须启用 SMTP AUTH。

如何设置多功能设备或应用程序以使用 Microsoft 365 或 Office 365 发送电子邮件 说:

您还必须验证正在使用的邮箱是否启用了 SMTP AUTH。 对于 2020 年 1 月之后创建的组织,SMTP AUTH 已禁用,但可以针对每个邮箱启用。 有关详细信息,请参阅在 Exchange Online 中启用或禁用经过身份验证的客户端 SMTP 提交 (SMTP AUTH)

与您组织的 Exchange 管理员联系以启用此设置,或者,如果您自己有足够的访问权限,则可以通过 PowerShell 执行此操作:

PS> Import-Module ExchangeOnlineManagement

PS> Connect-ExchangeOnline -UserPrincipalName administrative_user@your_domain.com

PS> Get-CASMailbox -Identity sending_mailbox_user@your_domain.com
Name                 ActiveSyncEnabled OWAEnabled PopEnabled ImapEnabled MapiEnabled SmtpClientAuthenticationDisabled
----                 ----------------- ---------- ---------- ----------- ----------- --------------------------------
sending_mailbox_user True              True       True       True        True

PS> Set-CASMailbox -Identity sending_mailbox_user@your_domain.com -SmtpClientAuthenticationDisabled $false
  1. 需要 TLS 1.2。

如何设置多功能设备或应用程序以使用 Microsoft 365 或 Office 365 发送电子邮件还说:

传输层安全性 (TLS):您的设备必须能够使用 TLS 1.2 及更高版本。

  • DatabaseMail.exe 是为 .NET Framework 3.5 构建的,但您需要安装支持 TLS 1.2(.NET Framework 4.5.2 或更高版本)的 .NET Framework。
  • 应在注册表中的机器级别启用 TLS 1.2 客户端协议
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001
  • 应在注册表中为 .NET Framework 4.x 启用 TLS 1.2 客户端协议
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
  • 适当的supportedRuntime应位于DatabaseMail.exe.config文件中,例如:安装了Microsoft .NET Framework 4.5.2:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="DatabaseServerName" value="." />
    <add key="DatabaseName" value="msdb" />
  </appSettings>
  <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
</configuration>
  1. 通过 SSMS 中的数据库邮件设置,适当配置发送帐户:
  • 服务器名称:smtp.office365.com
  • 端口号:587(首选,或25)
  • 此服务器需要安全连接 (SSL):必须勾选(这将启用 STARTTLS)
  • SMTP 验证:
    • 基本认证(选)
      • 用户名:sending_mailbox_user@your_domain.com
      • 密码:your_office365_password
      • 确认密码:your_office365_password_again

参考资料:


5
投票

您必须添加一个带有值

SchUseStrongCrypto
的 RegEdit DWORD
1
,位于:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319

这样就解决了。


1
投票

我找到了两种方法...

  1. 微软为我们提供了一个奇怪的替代方案:使用本地 SMTP 服务器

https://www.opwernby.com/Article.asp?id=DBMail365

  1. 我喜欢这个,对我来说很简单

https://www.opwernby.com/Article.asp?id=DBMail365


0
投票

对于那些仍在为此苦苦挣扎的人,启用旧版 TLS 后,您必须使用旧版 SMTP 地址 smtp-legacy.office365.com

参考: https://learn.microsoft.com/en-gb/exchange/clients-and-mobile-in-exchange-online/opt-in-exchange-online-endpoint-for-legacy-tls-using-smtp-auth

© www.soinside.com 2019 - 2024. All rights reserved.