创建VBA宏以保存电子邮件副本

时间:2012-09-07 14:27:07

标签: vba outlook outlook-vba

我使用Outlook(MS Exchange)并拥有一个人和两个组收件箱(我正在使用个人配置文件登录,通过该配置文件我也可以访问组收件箱)。

当我发送电子邮件时,我选择了我个人或From字段中的两个群组电子邮件地址之一。发送电子邮件后,我希望保存在myIndividualMailboxgroupAMailboxgroupBMailbox的收件箱中的副本,具体取决于我使用的From电子邮件地址。

示例:如果我发送电子邮件From groupA@myCompany.com ,我想要保存在{{收件箱中的电子邮件的副本1}}(而不是我个人的收件箱)。

我已经明白,通过在Outlook中设置规则是不可能的,但可以使用 VBA宏来完成。我现在不知道如何编写VBA宏,也不知道这是一个简短的脚本还是更复杂的脚本。事实上,我从未在Outlook中编写宏,所以我甚至不知道如何开始。谁能说明如何做到这一点?

我开始寻找这个问题的解决方案:Outlook send-rule that filter on the 'From' field

2 个答案:

答案 0 :(得分:1)

据我所知,我为你做了这件事,它有效。您应该将它放在Microsoft Outlook对象 - ThisOutlookSession模块中。

请注意,除非您先运行myolApp_ItemSend,否则enableEvents事件永远不会触发。每次关闭重新打开的Outlook时,您都需要确保它已启用。这将需要一些自定义,但它应该给你一般的想法。

Option Explicit
Public WithEvents myolApp  As Outlook.Application

Sub enableEvents()
    Set myolApp = Outlook.Application
End Sub

Private Sub myolApp_ItemSend(ByVal item As Object, Cancel As Boolean)
    Dim items As MailItem
    Dim copyFolder As Outlook.Folder
    Dim sentWith As String
    'Identify sender address
    If item.Sender Is Nothing Then
        sentWith = item.SendUsingAccount.SmtpAddress
    Else
        sentWith = item.Sender.Address
    End If

    'Determin copy folder based on sendAddress
    Select Case sentWith
        Case "groupA@myCompany.com"
            'get groupAMailbox's inbox
            Set copyFolder = Application.GetNamespace("MAPI").folders("groupAMailbox").folders("Inbox")
        Case "myE-mailAddress"
            'get My inbox
            Set copyFolder = Application.GetNamespace("MAPI").folders("myE-mailAddress").folders("Inbox")
    End Select

    'copy the Item
    Dim copy As Object
    Set copy = item.copy
    'move copy to folder
    copy.Move copyFolder

End Sub

编辑:看起来他们实际上已经直接在Outlook的Application对象中构建了事件功能,但是通过测试,您仍然需要执行上面概述的操作。

答案 1 :(得分:0)

Outlook将所有已发送的项目存储在默认发送的项目文件夹中。但是,您可以应用修补程序将已发送的项目保存在自己的文件夹中。 http://support.microsoft.com/kb/2181579