Share via


嗨,Scripting Guy!

Hey,Scripting Guy!

歡迎使用全新的 TechNet 專欄,Microsoft Scripting Guys 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

今天的問題:如何將檔案附加到使用 CDO 傳送的電子郵件中?


如何將檔案附加到使用 CDO 傳送的電子郵件中?

嗨,Scripting Guy!我知道如何使用 CDO 傳送電子郵件,但是如何將附件加入電子郵件呢?

-- RT

RT,您好。首先,謝謝您的問題。至少有一位 Scripting Guys 在感恩節的週末,花了大半時間在吃東西上。偶然間,當他沒在吃東西時,他就陪一群又高又壯的姪子打橄欖球,而這些姪子 – 唉 – 都比他年輕上好幾歲。想當然囉,這位 Scripting Guy 希望回到工作崗位時能鬆一口氣,這個問題可說是個好的開始。

對於那些不熟悉 CDO (Collaboration Data Objects 的簡稱) 的人,這項技術提供了從指令碼傳送電子郵件的方法。只要您在網路上的某處安裝 SMTP 伺服器,就可以使用類似下列的程式碼建立並傳送電子郵件:

Set objEmail = CreateObject("CDO.Message")
objEmail.From = "helpdesk@fabrikam.com"
objEmail.To = "administrator@fabrikam.com"
objEmail.Subject = "Server down" 
objEmail.Textbody = "Server1 is no longer accessible over the network."
objEmail.Configuration.Fields.Item _
    ("https://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item _
    ("https://schemas.microsoft.com/cdo/configuration/smtpserver") = _
        "smtpmailer" 
objEmail.Configuration.Fields.Item _
    ("https://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send

今天我們不會對這個指令碼作詳細的解釋;如需此處所使用之個別屬性的概觀,請參閱 Microsoft Windows 2000 指令碼指南 (英文)。您可能輕易就能瞭解 FromToSubjectTextbody 屬性。有些 URIs (例如,https://schemas.microsoft.com/cdo/configuration/sendusing) 是重複使用的程式碼,一般來說保留原樣就好;大多數狀況中,您唯一要變更的是 smtpserver。在我們的範例程式碼中,已經參照了名為 smtpmailer 的 SMTP 郵件伺服器;您需要將名稱取代為「您的」SMTP 郵件伺服器。

此外,這些 URIs 困擾了許多人:他們納悶為什麼要連線到 Microsoft 才能傳送電子郵件呢?事實上,您不是真正連線到 Microsoft;這些 URIs 只是屬性。為什麼它們的參照方式是如此呢?老實說,我們也不知道。不過不要緊張。您的郵件不會路由傳送到 Microsoft,這裡也沒有人會閱讀您的郵件。請相信我們,我們光處理自己的郵件就夠麻煩了,不會有空去閱讀別人的郵件。

現在,要怎麼將附件加入這封電子郵件中呢?這只需要多一行程式碼,差不多類似這一行就可將 C:\Scripts\Output.txt 檔案附加到電子郵件中:

objEmail.AddAttachment "C:\Scripts\Output.txt"

就是這樣;將這行程式碼加入指令碼中,您就有自己的附件了。完整的指令碼看起來像這樣:

Set objEmail = CreateObject("CDO.Message")
objEmail.From = "helpdesk@fabrikam.com"
objEmail.To = "administrator@fabrikam.com"
objEmail.Subject = "Server down" 
objEmail.Textbody = "Server1 is no longer accessible over the network."
objEmail.AddAttachment "C:\Scripts\Output.txt"
objEmail.Configuration.Fields.Item _
    ("https://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item _
    ("https://schemas.microsoft.com/cdo/configuration/smtpserver") = _
        "smtpmailer" 
objEmail.Configuration.Fields.Item _
    ("https://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send

值得注意的是,有許多人詢問我們如果 SMTP 伺服器需要驗證時,該怎麼傳送電子郵件。說實話,這是個很難回答的問題,因為 (基於各種理由) 我們無法測試這個案例。不過,將使用者名稱及密碼加入指令碼中會是個好的開始:

objEmail.Configuration.Fields.Item _
    ("https://schemas.microsoft.com/cdo/configuration/sendusername") = "fabrikam\kenmyer"
objEmail.Configuration.Fields.Item _ 
    ("https://schemas.microsoft.com/cdo/configuration/sendpassword") = "&gr54#wgha"

前面的程式碼讓您以 fabrikam\kenmyer 身分及 &gr54#wgha 為密碼登入 SMTP 伺服器。請注意,這會以純文字格式傳送使用者名稱及密碼。因此,您可能不會想使用 Administrator 帳戶傳送電子郵件。相反的,建立有權傳送電子郵件 (但權限很小,除非有別的權限) 的使用者帳戶,並使用該帳戶登入。如需詳細資訊,請查看 MSDN 上的正式 CDO 說明文件 (英文)。


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首