【问题标题】:How to save Sent Items to folder of SentOnBehalfName mailbox in Office 365?如何将已发送邮件保存到 Office 365 中 SentOnBehalfofName 邮箱的文件夹?
【发布时间】:2019-12-15 02:49:49
【问题描述】:

在工作中,我们从共享收件箱发送电子邮件。电子邮件将进入用户自己的已发送项目,而不是共享收件箱。

我写了一些 VBA 代码来解决这个问题。我们正在迁移到 Outlook 365,但代码在那里不起作用。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
If TypeName(Item) = "MailItem" Then     'If Item is a MailItem
        If Item.SentOnBehalfOfName <> "" Then   'And if Item is Sent on Behalf of an inbox
            'Save the sent email in the Sent Items folder for the inbox in question
            Item.SaveSentMessageFolder GetNamespace("MAPI").Folders(Item.SentOnBehalfOfName).Folders("Sent Items")

        End If
    End If
End Sub

我试过了

msgbox GetNamespace("MAPI").Folders(Item.SentOnBehalfOfName).Folders("Sent Items").Name

它给出了文件夹的名称,但已发送的项目没有去那里。

我创建了一个“测试”文件夹并保存到忽略 Item.SentOnBehalfOfName 的文件夹中,如果“测试”文件夹在我自己的收件箱中,但如果它在共享收件箱中,则此方法有效。

我尝试将代码更改为使用 Set & 以包含 Application,如下所示。

Set Item.SaveSentMessageFolder = Application.GetNamespace("MAPI").Folders(Item.SentOnBehalfOfName).Folders("Sent Items")

【问题讨论】:

  • 你有没有尝试在项目提交前设置属性?

标签: vba outlook office365


【解决方案1】:

您可以从单个商店设置文件夹,无法从另一个商店/帐户设置文件夹。如果您想将项目保存到另一个商店,您必须先保存它们,然后以编程方式将它们移动到另一个文件夹/商店。

另外,我建议在提交项目之前设置MailItem.SaveSentMessageFolder 属性:

Sub SetSentFolder()  
 Dim myItem As Outlook.MailITem  
 Dim myResponse As Outlook.MailITem  
 Dim mpfInbox As Outlook.Folder  
 Dim mpf As Outlook.Folder 

 Set mpfInbox = Application.Session.GetDefaultFolder(olFolderInbox)  
 Set mpf = mpfInbox.Folders.Add("SaveMyPersonalItems")  
 Set myItem = Application.ActiveInspector.CurrentItem  
 Set myResponse = myItem.Reply  
 myResponse.Display  
 myResponse.To = "Eugene Astafiev"  
 Set myResponse.SaveSentMessageFolder = mpf  
 myResponse.Send  
End Sub

【讨论】:

  • 嗨,Eugene,感谢您的想法,但它不起作用,这是有道理的 - 这些是我发送的电子邮件,因此将 myResponse 设置为 myItem.Reply 时出现代码错误。跨度>
  • 这是一个示例代码,显示您需要在发送前尝试设置SaveSentMessageFolder 属性。
  • 您好 Eugene,一个用户可能有多个共享收件箱,因此在发送之前无法真正设置 SaveSentMessageFolder。我想你可以让用户运行一个宏,但这意味着制作一个自动化的流程手册,这远非理想,老实说,我认为他们不会费心去做。
  • 我刚刚发现您正试图从 Outlook 中的另一个商店设置文件夹。我认为这根本不可能。您必须只处理来自单个商店的文件夹。
  • 嗨,尤金,如果是这种情况,那很不幸,我不明白为什么 365 会发生这种情况。此代码与 Outlook 2013 一起使用,没有任何问题。
【解决方案2】:

在 ThisOutlookSession 模块中添加以下变量声明:

Private WithEvents Items As Outlook.Items

如果您还没有Application_Startup 事件过程,请通过在代码区域的左侧下拉列表中选择Application 和在代码区域的右侧下拉列表中选择Startup 来创建它。

要添加到此过程的代码:

Set Items = Session.GetDefaultFolder(olFolderSentMail).Items

然后在代码区域的左侧下拉菜单中选择Items,然后在代码区域的右侧下拉菜单中选择ItemSend

下面是这个过程的样子:

Private Sub Items_ItemAdd(ByVal Item As Object)
    If TypeName(Item) = "MailItem" Then     'If Item is a MailItem
        If Item.SentOnBehalfOfName <> Session.Accounts.Item(1).CurrentUser Then   'And if Item is Sent on Behalf of the users own inbox
            'Move the email into the Sent Items folder for the inbox in question
            Item.Move GetNamespace("MAPI").Folders(Item.SentOnBehalfOfName).Folders("Sent Items")
        End If
    End If
End Sub

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 2021-06-11
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多