Sql-Server

SQL Server 2016 DB 郵件未發送

  • July 1, 2020

我在 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 編碼保存

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true"> 
<supportedRuntime version="v4.0"/>     
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>

來源: 修復:SQL Server 2016 數據庫郵件在未安裝 .NET Framework 3.5 的電腦上不起作用

引用自:https://dba.stackexchange.com/questions/142080