我们将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)
)
无代码(开箱即用的默认值):
mailbox<n>_at_domain_dot_com
。mailbox<n>_at_domain_dot_com
。其他所有操作均显示mailbox<n>
(无域)。使用代码:
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