又整整一個多月沒有發文了,來新公司後幾乎碰觸到的都是Windows系統,因此也學習到一些新技術,而VBA巨集算是我比較感興趣的,這篇文章就記錄如何用VBA巨集、將Outlook的寄件帳號自動帶入,不用每次很麻煩都要手動選。
公司最近在將Exchange信箱上到雲端的O365,過程中遇到很多困難,上雲也並非想像中容易,很多原先使用者所習慣的操作方式,到了雲端上後也沒有那麼簡單就能同步。這次遇到的難題是有許多屬於個人使用的信箱帳號要轉成O365的共用信箱,而且要能夠收發信,更多的要求是共用信箱要當作主要的發信帳號,然後發信後的寄件備份又要能正常落入共用信箱自己,很多奇奇怪怪的需求。最初的做法是在帳號設定上直接新增共用信箱帳號,並且設定為預設帳號,結果這就變成悲劇的開始。
在微軟的政策上這樣做是不可行的,共用信箱是不能設定成預設帳號來用,一旦這樣用的結果就是Outlook會變得收信非常緩慢,更慘的是發信會失敗,最近整個動彈不得,使用者叫苦連天,原廠給的協助訊息大多是官方教程,像這樣自己要硬來的需求,他們通常是不會花太多時間幫忙處理的,花了好幾周後,網路上還是找到了神人的做法,要滿足這樣的特殊需求,就不要用不符合微軟原廠設計的做法,乾脆維持原樣,不要硬加共用信箱帳號,如果使用者想把共用信箱當作預設寄件帳號的話,就用巨集自動化的方式,這樣問題就能解決了。
1.共用信箱如果在後台已經委派好,它自己會隨著使用者登入時推播出現的
|
不用特別再手動新增帳號 |
2.像下列這樣把共用信箱帳號設定進去的作法是會衝突的,應該刪除,只留個人信箱
|
如果有像這樣的設定,就刪除共用信箱帳號 |
|
可以刪除掉暫存檔,不用擔心會信箱資料遺失 |
3.進入Outlook,按下Alt+F11或者是Fn+Alt+F11,打開巨集編寫程式
(此步驟是針對某些用戶想把共用信箱當作預設寄件帳號,又懶得每次都要手動選的解決方式)
|
打開vba編輯用的程式 |
4.將下列VBA貼入,並修改部分內容
'================================================================================
'Description: Outlook macro to automatically set a different
' From address.
'
'Comment: You can set the email address at the bottom of the code.
' Uncomment the myOlExp_InlineResponse sub to also make it
' work with the Reading Pane reply feature of Outlook 2013/2016/2019/365.
'
' author : Robert Sparnaaij
' version: 1.1
' website: https://www.howto-outlook.com/howto/setfromaddress.htm
'================================================================================
Dim WithEvents objInspectors As Outlook.Inspectors
Dim WithEvents objMailItem As Outlook.MailItem
Dim WithEvents myOlExp As Outlook.Explorer
Private Sub Application_Startup()
Initialize_handler
End Sub
Public Sub Initialize_handler()
Set objInspectors = Application.Inspectors
Set myOlExp = Application.ActiveExplorer
End Sub
Private Sub objInspectors_NewInspector(ByVal Inspector As Inspector)
If Inspector.CurrentItem.Class = olMail Then
Set objMailItem = Inspector.CurrentItem
If objMailItem.Sent = False Then
Call SetFromAddress(objMailItem)
End If
End If
End Sub
'Uncomment the next 3 lines to enable Outlook 2013/2016/2019/365 Reading Pane Reply
'Private Sub myOlExp_InlineResponse(ByVal objItem As Object)
' Call SetFromAddress(objItem)
'End Sub
Public Sub SetFromAddress(oMail As Outlook.MailItem)
' Set your preferred default From address below.
' Exchange permissions determine if it is actually stamped
' as "Sent On Behalf Of" or "Sent As".
' The address is not properly updated for the InlineResponse
' feature in Outlook 2013/2016/365. This is only a visual bug.
oMail.SentOnBehalfOfName = "delegate@domain.com"
End Sub
5.移除此段落前面的註解符號,使其生效
Private Sub myOlExp_InlineResponse(ByVal objItem As Object)
Call SetFrom(objItem)
End Sub
6.將想要作為主要發信信箱的帳號修改至雙引號內
oMail.SentOnBehalfOfName = "delegate@domain.com"
7.透過自簽憑證啟用巨集
這份巨集得要有一個自簽憑證才能夠生效,所以就去Office內建的程式製作
依不同版本的Office,自簽憑證程式的位置有所不同
- Windows 32-bit
C:\Program Files\Microsoft Office\Office <version number>
- Windows 64-bit with Office 32-bit
C:\Program Files (x86)\Microsoft Office\Office <version number>
- Windows 64-bit with Office 64-bit
C:\Program Files\Microsoft Office\Office <version number>
- Office 365 32-bit (Subscription based or Click-to-Run version of Office 2016 / 2019)
C:\Program Files (x86)\Microsoft Office\root\Office16
- Office 365 64-bit (Subscription based or Click-to-Run version of Office 2016 / 2019)
C:\Program Files\Microsoft Office\root\Office16
|
找到程式並底兩下製作憑證 |
|
自命名憑證的名稱 |
|
憑證完成後,再到Outlook上啟用巨集憑證 |
|
選用剛剛建立的憑證 |
檔案>選項>信任中心>信任中心設定>巨集設定>經由數位簽章的巨集會啟用,其他所有巨集會停用
|
確認啟用巨集的安全層級 |
完成以上流程以後,就可以把共用信箱作為寄件的預設帳號發信了。
8.設定共用信箱的寄件備份不移入個人備份
在網頁版上使用共用信箱寄件會以正常方式進入到寄件備份,但在Outlook 2016則會跑到個人信箱的寄件備份,此部分只需要修改機碼來修正即可。製作機碼的內容如下:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Outlook\Preferences]
"DelegateSentItemsStyle"=dword:00000001
機碼檔命名為DelegateSentItemsStyle.reg,將此檔案傳給使用者並執行即能解決問題。