利用Outlook VBA自動附加密件副本

自從N年前Email完全整合至雲端(Hotmail、Outlook.com)後,因為手頭上有某工作信箱來自不同的Domain,接收都還好解決,但一直以來深受代表信箱(on behalf)所困擾,因此如果要用某工作信箱發信,只能乖乖切回單位的WebMail介面上發信,實在是非常不方便。日前想到在Office Outlook 2013建立原本Email帳號,但設定用來傳送Email,藉此解決工作信箱之發信代表帳號化問題,但是衍生出另外的問題便是...寄件備份根本無法自動存在Outlook.com中,現行的Office Outlook 2013是不允許POP3/SMTP等級的帳號與Exchange等級的帳號,進行跨Email帳號信件拖曳方法的備份動作。

20140625_01

要解決這個問題只有一種方式,就是把每封你在Office Outlook 2013中,利用工作用帳號寄出的信件,一律密件副本(BCC)一份回到Outlook.com中,並在該處設定Sender Address contains規則,讓它自動Move到寄件備份,這樣一來Email完全整合到雲端才有其可能性。

有了這樣合理的想法,接下來遇到的問題就是,你怎麼可能在每一封工作性Email發出後,都「記得」在BCC欄位中填入你要轉寄的Email位址呢?答案就是要靠寫程式啦!請跟著以下的步驟進行即可。

Step 1. 先去Office Outlook 2013中,把開發者工具打開,才好寫VBA。

20140625_02

Step 2. 在左邊視窗中移到ThisOutlookSession後點兩下,在右視窗中下拉Application及ItemSend,接下來進行下列程式碼的設計!

20140625_03
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
	If Item.Class = olMail Then
		If Item.SendUsingAccount.DisplayName = "你的OutlookMailProfile名稱" Then
			Dim oRecipient As Recipient
			Set oRecipient = Item.Recipients.Add("你的EmailAddress")
			oRecipient.Type = olBCC
			oRecipient.Resolve
			Set oRecipient = Nothing
		End If
	End If
End Sub

在這裡也藉機會說明一下事情,以免有人重複實驗浪費時間:

  1. 事實上Outlook.com允許你取消on behalf,但是如果你工作用的Email不接受從外網域進行SMTP(通常都不行),那就殘念吧!
  2. 在Outlook.com的介面下,你去選擇不同的Sender Email Alias,是真的可以隱匿變成該信箱的。
  3. (直到)Office Outlook 2013的發信介面,允許你開設許多的Sender Email Address,但是別傻了,如果Sender是非本Email帳號的情況下,他全部都會在後面補上代表信箱的格式,無論你這個帳號是普通的POP3/SMTP,還是Outlook Exchange帳號都一樣。
  4. 你在Office Outlook 2013中,進行Outlook.com之Sender Address Alias後的帳號設定,基本上是完完全全沒有用處的(儘管你在雲端是真的有這個alias帳號),比代表信箱更慘,他會到Outlook.com去取你的設定「Default "From" address」,然後用這個alias信箱當作是Sender Address幫你寄出。
  5. 有些新一代的Email收信軟體,會自動把代表後的信箱當作是回信信箱,但別把這種狀況當作是全面性的,查看看Email原文最靠的住,以免你的真實Email不知不覺中外流。

補充說明

有網友來信詢問如何得知「OutlookMailProfile名稱」,請詳見下圖步驟,在Step.4即可得知「OutlookMailProfile名稱」。

20140625_04

相關連結:從VBA巨集談Office之自我數位簽章

Office Outlook VBA BCC SendEmail CarbonCopy Clone