SQL Server 2014 Database Mail重復發送郵件特殊案例


在一數據庫服務器(Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64))發現有個作業調用Database Mail發送郵件時,有時候出現同樣的郵件發送兩封的情況,經過詳細檢查,排除了該作業里面業務邏輯有問題的情況,確實存在重復發送郵件的情況, 檢查Database Mail日志,發現在0:00~0.03報“The mail could not be sent to the recipients because of the mail server failure. (Sending Mail using Account 1 (2016-10-27T00:03:21). Exception Message: Cannot send mails to mail server”這類的錯誤,具體信息如下所示

clipboard

Date 2016/10/27 0:03:21

Log Database Mail (Database Mail Log)

Log ID 29022

Process ID 11300

Mail Item ID 747326

Last Modified 2016/10/27 0:03:21

Last Modified By sa

Message

The mail could not be sent to the recipients because of the mail server failure. (Sending Mail using Account 1 (2016-10-27T00:03:21). Exception Message: Cannot send mails to mail server. (Mailbox unavailable. The server response was: 5.7.1 Unable to relay for zhouxxxx@xxxx.mail.onmicrosoft.com).

)

 

從上面日志可以看到是SMTP反饋zhouxxxx@xxxx.mail.onmicrosoft.com這個郵箱無法送達。Mail Item ID就可以查到相關,然后和開發人員一排查,就找到了發送郵件的存儲過程,檢查發現還是因為其中一個郵箱地址弄錯了,導致這些錯誤出現在Database Mail日志中,當然如果遇到這類錯誤,必須查看Exception Message: Cannot send mails to mail server后面括號里面詳細的報錯信息,然后檢查、分析確認(Mailbox unavailable. The server response was: 5.7.1 Unable to relay for zhouxxxx@xxxx.mail.onmicrosoft.com). 不同的日志信息,往往反饋不同的問題。也正是這種情況的郵件,都出現了重復發送情況。

 

手工測試這樣的情形(發送給多個收件人,其中一個郵件名稱故意寫錯),發現郵箱確實會收到兩封這樣的郵件。

EXEC msdb.dbo.sp_send_dbmail @subject='郵件重復發生問題測試——1',@recipients='xxxx@xxxx.microsoft.com;konglb@xxxx.com',@body='test the email send twice problem';

 

 

然后我想定位到底是SQL Server版本問題,還是SMTP設置問題,結果測試過程讓我更迷惑了

 

1: 測試了SQL Server 2008配置了同樣SMTP服務器的數據庫,發現這種情況,郵件不會重復發送。那么可以排除SMTP的一些設置問題導致。

 

2: 測試了SQL Server 2014相同版本,相同SMTP配置的數據庫,發現這種情況,居然不會發生郵件重復發送的情況。吶呢,讓人懵了。也就是只有那台環境下才會出現這種情況,其它環境都無法重現。

 

3: 檢查了Database Mail配置信息以及系統參數設置,基本一致,沒有區別。也不應該是這個導致郵件重復發送問題。

 

4: 系統管理員幫忙檢查了SMTP服務器的日志,發現重復發送的郵件除了下面Message ID不一樣外,其它一樣,但是檢查msdb.dbo.sysmail_mailitems表里面記錄,只有一條發送記錄。如下截圖所示

clipboard

 

網上也搜索了一下,沒有看到類似的問題或bug信息。真是一個非常奇怪的問題,好在這個問題解決倒非常簡單。 不過問題的詭異倒是讓人摸不着頭腦。

 

-------------------------------------------------------------------------分割線-------------------------------------------------------------------------

一網友反饋出現郵件重復發送的原因是因為Database Mail Configuration里面設置為1的緣故,測試了一下,在收件人列表輸入一個錯誤郵箱,確實會收到兩封郵件。這個問題解決了!

 

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM