在日常辦公自動化或資料報表流程中,很多人希望能夠由 Excel 自動寄送電子郵件,而不是手動開啟 Outlook 逐封寄信。利用 VBA(Visual Basic for Applications) 搭配 CDO(Collaboration Data Objects) 物件庫,你可以直接從 Excel 傳送郵件,而不需要依賴 Outlook 介面或其它第三方程式。
為什麼使用 CDO?
CDO 是 Windows 提供的一組 COM 物件,它讓開發者可以在程式中建立與操作電子郵件,例如:
-
建立郵件內容
-
設定 SMTP 伺服器
-
指定寄件者與收件者
-
支援 SMTP 驗證與 SSL 設定
透過 VBA 呼叫 CDO,你可以直接透過 SMTP 伺服器寄出郵件,而不需要開啟 Outlook 應用程式本身。
VBA 自動寄送郵件範例
以下程式碼示範如何在 Excel 中利用 CDO 物件自動寄送包含工作表內容的郵件。
📌 請先在 VBA 編輯器的工具選單中設定引用項目:
勾選 ☑ Microsoft CDO for Windows 2000 Library
VBA 程式碼範例
Option Explicit'宣告變數及參數
Dim objCDO As CDO.Message
Public theRng As Range
Const myUserId = "yourID" '請修改成你的帳號
Const myPassword = "yourPSW" '請修改成你的帳號密碼
Const mySMTPServer = "smtp.gmail.com" '請修改成你的寄送郵件伺服器
Const mySMTPport = 465 '須修改成你的送件伺服器使用的PORT, Gmail使用的是465
'寄信程式
Sub SendingEMail()
Application.StatusBar = "Sending..." '狀態訊息顯示
Set objCDO = New CDO.Message '創建新的物件
'設置郵件伺服器參數
'這是用Gmail測試成功的參數, 請參閱 Email Server 的設置說明
With objCDO
With .Configuration.Fields
.Item(cdoSendUsingMethod) = cdoSendUsingPort
.Item(cdoSendUserName) = myUserId
.Item(cdoSendPassword) = myPassword
.Item(cdoSMTPServer) = mySMTPServer
.Item(cdoSMTPAuthenticate) = True
.Item(cdoSMTPServerPort) = mySMTPport
.Item(cdoSMTPUseSSL) = True
.Update
End With
End With
'填寫郵件各欄位資訊並寄送
With objCDO
.From = """報表傳送系統""<" & myUserId & "@" & VBA.Mid(mySMTPServer, 6) & ">" '寄件者信箱
.To = ActiveSheet.Range("a1").Text 'Excel 工作表中的收件者信箱
.Subject = "Excel 報表測試" '郵件主旨
.TextBody = "測試內容" '郵件內容
'設定重要性
'.Fields("urn:schemas:mailheader:importance") = 2
'.Fields("urn:schemas:httpmail:importance") = 2
.Fields(cdoImportance) = cdoHigh
.Fields.Update
.Send
End With
Set objCDO = Nothing '釋放物件
Application.StatusBar = False '恢復狀態訊息
End Sub
教學重點說明
📌 1. 設定 SMTP 伺服器
程式中使用的是 Gmail SMTP 設定:
-
SMTP 伺服器:smtp.gmail.com
-
Port:465
-
需啟用 SSL
若使用不同的郵件服務,請依照該服務提供者的 SMTP 設定調整參數。
📌 2. 郵件內容與格式
此範例使用 TextBody 屬性寄送純文字格式的郵件內容,而非 HTML 格式。
若未來需要寄送格式較豐富的內容(例如表格、顏色或排版),則可以改用 HTMLBody 屬性,並撰寫 HTML 標籤內容。
📌 3. 不透過 Outlook 寄送
利用 CDO 寄送郵件不需要開啟 Outlook 或把 Outlook 設為預設郵件程式,這對於伺服器環境或無 Outlook 安裝的機器特別有用。
注意事項與相容性
🔔 版本注意:
使用 CDO 物件庫需要安裝對應的系統元件,而且在最新版的 Outlook 或 Office 環境中,CDO 支援程度已降低,不一定支援最新 Outlook 版本。
總結
透過 CDO 物件在 VBA 中寄送郵件,是一種簡單、靈活的方式,可直接在 Excel 中實現自動寄信的需求。只要正確設定 SMTP 參數、引用 CDO Library,就能輕鬆整合郵件寄送到工作流程中。這對報表自動化、提醒系統與批次通知等應用場景非常有用。
參考資料
本文在撰寫過程中,參考了 Ron de Bruin(Microsoft Excel MVP 專家)所整理的相關技術文章與範例程式。Ron de Bruin 長期專注於 Excel VBA 自動化、郵件整合與 Office 應用開發領域,其網站提供許多實務範例與說明,對於理解 VBA 寄信機制與 CDO 設定細節有極大幫助。可惜 Ron de Bruin 於 2023 年 10 月移除了所有關於 Windows 版 Excel 的內容,也在 2024 年正式退出擔任了 21 年的 Microsoft Excel MVP 專家。
另外,Microsoft 的技術文章 Working with Excel Workbooks and Worksheets in E-Mail 也有很多範例,建議有進階需求的讀者,可進一步前往參考。
沒有留言:
張貼留言