从共享帐户的地址更改为禁用了缓存模式的默认帐户的地址

时间:2019-01-28 18:06:59

标签: vba outlook-vba

我们将Exchange 2010/16与Outlook 2010/16结合使用。我们有团队(也称为共享)邮箱,这些邮箱已作为适当的帐户(而不仅仅是其他邮箱)添加到Outlook,以使用Exchange的本机存档功能。

我们不想从团队邮箱发送/接收。团队邮箱是电子邮件通过进出电子邮件的传输规则进入的中心位置。我们尚未为团队邮箱设置“代理发送”或“代理发送”权限。

在回复/全部答复/转发等操作中,“发件人”框默认为共享邮箱,用户必须手动更改“发件人”框。

我遇到了SendUsingAccount属性的邮件项目。我挂在Inspector_Activate事件上,因此任何未发送的邮件都将被拦截。这包括“新建”,“答复”,“全部答复”,“转发”,“作为附件转发”。

这就是我所经历的。假设用户邮箱是mailbox1_at_domain_dot_com(映射到Session.Accounts(1)),共享邮箱是mailbox2_at_domain_dot_com(映射到Session.Accounts(2)

无代码(开箱即用的默认值):

  1. 启用缓存模式后,每个操作(新操作,回复等)将“发件人”框显示为mailbox<n>_at_domain_dot_com
  2. 在禁用缓存模式的情况下,只有new的发件人框显示为mailbox<n>_at_domain_dot_com。其他所有操作均显示mailbox<n>(无域)。

使用代码:

  1. 启用缓存模式后,每个操作(新操作,回复等)都会将“发件人”框显示为默认(用户)帐户。
  2. 禁用缓存模式时,仅新作品。所有其他操作都将“发件人”框保留为共享帐户。就像上面的默认默认设置一样,当我单击新电子邮件时,“发件人”框将填充mailbox<n>_at_domain_dot_com,而其他任何操作都将其填充mailbox<n>(无域)。如果我手动将“发件人”框更改为共享邮箱,它将显示mailbox2_at_domain_dot_com(具有域),此时,我可以从编辑器运行ChangeSender()例程,然后将“发件箱”更改为默认帐户。

Debug.Print会在调用ChangeSender()之前返回共享帐户,而在调用Debug.Print之后会返回ChangeSender()返回默认帐户(正确!),无论Outlook使用哪种配置。代码正在运行,但是在某些配置中,检查器窗口不会使用SendUsingAccount更新。

ThisOutlookSession:

Option Explicit

Private WithEvents Inspectors As Outlook.Inspectors
Private WithEvents Inspector As Outlook.Inspector
Private WithEvents MailItem As Outlook.MailItem

Private Sub Application_Startup()
    Set Inspectors = Application.Inspectors
End Sub

Private Sub Inspectors_NewInspector(ByVal NewInspector As Outlook.Inspector)
    Set Inspector = NewInspector
End Sub

Private Sub Inspector_Activate()

    Set MailItem = Inspector.CurrentItem

    If MailItem.Class = olMail And Not MailItem.Sent Then
        Debug.Print "Before: " & MailItem.SendUsingAccount
        Call ChangeSender(MailItem)
        Debug.Print "After:  " & MailItem.SendUsingAccount
    End If

End Sub

Private Sub Inspector_Close()
    Set MailItem = Nothing
    Set Inspector = Nothing
End Sub

Module1:

Function DefaultMailAccount() As Outlook.Account
    Set DefaultMailAccount = Application.Session.Accounts(1)
    Exit Function
End Function

Sub ChangeSender(ByRef Item As Outlook.MailItem)
    Item.SendUsingAccount = DefaultMailAccount()
End Sub

0 个答案:

没有答案