最機車的茶包-SQL Job Mail 問題(CDO:The transport failed to connect to the server)

本來想說很簡單的一件事:

SQL Job 中,如果出錯時,跳到下一個步驟時,就發 Mail 出來。

結果,花了四個小時,還有一肚子火…

使用執行身份,登入在命令列上執行 cscript.exe email.vbs “subject” 就會發出 Mail

相同身份,使用 SQL 2005 Job 執行(CmdExec)時,就會出現

CDO.Message.1: The transport failed to connect to the server

怪怪,一樣的執行身份,一樣的程式,就出現不同的結果。

後來搬出 ProcMon 來看(點圖可以看大圖)
image

結果兩個的行為是相同的。

黑大的討論後,似乎是在 SQL Job的執行環境中,無法建立 TCP Connection(很奇怪的是File Sharing 是可以的)。

從 SMTP Server 看的結果,這個推論正確,SQL Job 執行後,SMTP Log 音訊全無,連個 HELO 都沒有。

解決方式

在 CDO.Configuration 有一個設定 smtpServerPickupDirectory 可以指定產生 xxx.eml 的檔案,

如果將這個檔案存入有 SMTP Service 的 Pickup Folder 時,就會進行寄送。

所以,我將程式小改了一下,增加了這個部份

set Flds = iCon.Fields

Flds.Item(“http://schemas.microsoft.com/cdo/configuration/sendusing“) = 1
Flds.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory“) = “\xxxxinetpubmailrootpickup

Flds.Update
set objmail.Configuration=iCon

 

很鳥的解決方式,不過確實是可行,希望有人也有遇到,看有沒有根本的解決方式。

 

什麼是茶包? 即 Trouble 的音譯。

源自於黑大的用語,詳見http://blog.darkthread.net/blogs/darkthreadtw/archive/tags/Trouble-Shooting/default.aspx

Bookmark the permalink.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *