我正在使用 SQL Server 2016 并且玩得很开心……我的 DB 邮件没有发送,而且我没有地方可以查看了。我仔细检查了 DBmail 可执行文件的 SQL 帐户权限 - 它已读取并执行。我为防火墙出站端口 587 输入了一条规则。我尝试了另一个邮件帐户和配置文件,但存在相同的未发送问题。日志(db 邮件日志)中的唯一条目是服务的开始和结束。我能找到的任何地方都没有错误。电子邮件似乎只是进入发送队列并且永远不会离开它。这些帐户可以自己发送和接收电子邮件,也可以从另一台计算机上的 SQL Server 2014 实例发送和接收电子邮件。
我有一个已发送状态为“未发送”的项目队列,并检查了所有正常位置以及所有预期结果,除了一长串未发送邮件:
SELECT * FROM msdb..sysmail_event_log order by log_id DESC
SELECT * FROM dbo.sysmail_mailitems
SELECT * FROM dbo.sysmail_sentitems
USE msdb
SELECT sent_status, *
FROM sysmail_allitems
SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';
EXECUTE msdb.dbo.sysmail_help_status_sp
我已经尝试将其关闭并再次打开......所以我错过了可以阐明这种情况的 DMV 等吗?这是我搜索中没有的 SQL Server 2016 的已知问题吗?发送此邮件的任何其他可能步骤?
一时兴起,在仔细检查权限时,我双击了实际的 DB 邮件可执行文件。SQL Server 2014 机器上的结果是一个空的命令窗口。在 SQL Server 2016 上,单击 DB Mail 可执行文件会显示以下消息:
我在 SQL Server 2016 文档中的任何地方都找不到这个要求,但它显然是一个要求。DB Mail 运行良好,除了安装 .NET 3.5 之外没有其他更改。
根据 Microsoft 支持,SQL server 2016 安装程序中存在一个错误,导致数据库邮件在没有 .net 3.5 的情况下无法工作
通过在DatabaseMail.exe所在的同一文件夹(Binn 文件夹)中创建一个DatabaseMail.exe.config文件来解决此问题,将以下内容写入文件并使用utf-8 编码保存
来源: 修复:SQL Server 2016 数据库邮件在未安装 .NET Framework 3.5 的计算机上不起作用
看看这个。这样你只需要复制一个文件而不是安装 .net 3.5。需要先安装CU1。在这里查看更多详情。
除了已经提到的原因,在 SQL Server 代理级别激活电子邮件配置文件也很重要,如下所示:
尝试重新启动 SQL Server
昨天,在运行了几个月没有出现任何问题后,SQL 邮件突然无缘无故停止发送邮件,或者更确切地说,每次尝试都以失败告终,重试也是如此。我最初认为这是目的地的问题(它特定于一个特定的邮件服务器),并询问密码是否已更改 - 回答否。
最终,在使用 powershell 向自己证明连接详细信息和凭据正常后,我重新启动了 SQL 服务器,一切又开始工作了。
至于是什么原因造成的:刚刚有相当多的电子邮件在一个批次中发送到目的地——大约 400 封电子邮件,所以这显然是导致问题的原因。其中大约一半是在它开始失败之前发送的。
如果重新启动 SQL 有问题,您可以尝试 sysmail_stop_sp / sysmail_start_sp(根据评论中的建议)。