2023年10月31日 星期二

【IT Notes】用VBA巨集在Outlook上自動預設寄件帳號

又整整一個多月沒有發文了,來新公司後幾乎碰觸到的都是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,將此檔案傳給使用者並執行即能解決問題。



沒有留言:

張貼留言

【IT Notes】透過api移轉Gmail到Exchange

 在雲端裡面串接api不是一件很好學的技術,第一次有機會學習到將GWS的Gmail信件全部轉移到M365的Exchange,其實方法很多種,像以前用的pst檔匯出轉移的方式等,但透過api串接,可以批次和排程轉移,是非常方便且準確的作法。唯一讓人感到困難的是學習成本不小,通常需要...