问题诊断
首先通过 SSMS 使用 SQL Server > Management > Database Mail(右键单击)> View Database Mail Log 诊断 DatabaseMail 问题。您可能会看到的示例错误消息包括:
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 的要求
- 必须在发送帐户的邮箱上启用 SMTP AUTH。
如何设置多功能设备或应用程序以使用 Microsoft 365 或 Office 365 发送电子邮件说:
您还必须验证是否为正在使用的邮箱启用了 SMTP AUTH。SMTP AUTH 对 2020 年 1 月之后创建的组织禁用,但可以按邮箱启用。有关详细信息,请参阅在 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
- 需要 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。
- 应在 Registry 的机器级别启用 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>
- 通过 SSMS 中的数据库邮件设置,适当地配置发送帐户:
- 服务器名称:smtp.office365.com
- 端口号:587(首选,或 25)
- 此服务器需要安全连接 (SSL):必须勾选(启用 STARTTLS)
- SMTP 身份验证:
- 基本认证(选择)
- 用户名:sending_mailbox_user@your_domain.com
- 密码:your_office365_password
- 确认密码:your_office365_password_again
参考: