本來想說很簡單的一件事:
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 來看(點圖可以看大圖)
結果兩個的行為是相同的。
與黑大的討論後,似乎是在 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") = "\\xxxx\inetpub\mailroot\pickup"
Flds.Update
set objmail.Configuration=iCon
很鳥的解決方式,不過確實是可行,希望有人也有遇到,看有沒有根本的解決方式。
什麼是茶包? 即 Trouble 的音譯。
源自於黑大的用語,詳見http://blog.darkthread.net/blogs/darkthreadtw/archive/tags/Trouble-Shooting/default.aspx
[技術]KB | [技術]未分類