Vba 如何将发送的邮件保存到Office 365中SentOnBehalfName邮箱的文件夹?
在工作中,我们通过共享收件箱发送电子邮件。电子邮件将进入用户自己发送的邮件,而不是共享收件箱 我写了一些VBA代码来整理这个问题。我们正在迁移到Outlook 365&那里的代码不起作用Vba 如何将发送的邮件保存到Office 365中SentOnBehalfName邮箱的文件夹?,vba,outlook,office365,Vba,Outlook,Office365,在工作中,我们通过共享收件箱发送电子邮件。电子邮件将进入用户自己发送的邮件,而不是共享收件箱 我写了一些VBA代码来整理这个问题。我们正在迁移到Outlook 365&那里的代码不起作用 私有子应用程序\u ItemSend(ByVal项作为对象,取消作为布尔值) 如果TypeName(Item)=“MailItem”,则“如果Item是MailItem” 如果Item.SentOnBehalfOfName为“”,则为“”,如果项目是代表收件箱发送的 '将已发送的电子邮件保存在相关收件箱的“已发
私有子应用程序\u ItemSend(ByVal项作为对象,取消作为布尔值)
如果TypeName(Item)=“MailItem”,则“如果Item是MailItem”
如果Item.SentOnBehalfOfName为“”,则为“”,如果项目是代表收件箱发送的
'将已发送的电子邮件保存在相关收件箱的“已发送邮件”文件夹中
Item.SaveSentMessageFolder GetNamespace(“MAPI”)。文件夹(Item.SentonBehalfName)。文件夹(“已发送项目”)
如果结束
如果结束
端接头
我试过了
msgbox GetNamespace(“MAPI”).Folders(Item.sentonBehalfName).Folders(“Sent Items”).Name
它给出了文件夹的名称,但发送的项目不在其中
我创建了一个“Test”文件夹并保存到忽略Item.SentOnBehalfOfName的文件夹中&如果“Test”文件夹在我自己的收件箱中,但如果它在共享收件箱中,则不起作用
我尝试更改代码以使用Set&包含应用程序,如下所示
Set Item.SaveSentMessageFolder=Application.GetNamespace(“MAPI”).Folders(Item.sentonBehalfName).Folders(“已发送项目”)
您可以从单个存储设置文件夹,但无法从其他存储/帐户设置文件夹。如果要将项目保存到另一个存储区,必须先保存项目,然后以编程方式将其移动到另一个文件夹/存储区
此外,我建议在提交项目之前设置属性:
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
在ThisOutlookSession模块中添加以下变量声明:
Private WithEvents Items As Outlook.Items
如果您还没有启动应用程序
事件过程,请在代码区左侧下拉菜单中选择应用程序
,并在代码区右侧下拉菜单中选择启动
,创建它
要添加到此过程中的代码:
Set Items = Session.GetDefaultFolder(olFolderSentMail).Items
然后在代码区域的左侧下拉列表中,您需要选择项目
&在代码区域的右侧下拉列表中,选择项目发送
以下是此过程的外观:
Private子项\u ItemAdd(ByVal项作为对象)
如果TypeName(Item)=“MailItem”,则“如果Item是MailItem”
如果Item.SentOnBehalfOfName Session.Accounts.Item(1).CurrentUser则为“”,如果项目是代表用户自己的收件箱发送的
'将电子邮件移动到相关收件箱的“已发送邮件”文件夹中
Item.Move GetNamespace(“MAPI”).Folders(Item.SentonBehalfName).Folders(“已发送项目”)
如果结束
如果结束
端接头
在提交项目之前是否尝试设置属性?嗨,Eugene,谢谢你的想法,但它不起作用&这是有道理的-这些是我正在发送的电子邮件,因此将myResponse设置为myItem.Reply时代码会出错。这是一个示例代码,显示在发送之前需要尝试设置SaveSentMessageFolder
属性。您好,Eugene,用户可能有多个共享收件箱,因此无法在发送前真正设置SaveSentMessageFolder。我想你可以让用户运行一个宏,但这意味着要制作一个自动化的过程手册,这远远不够理想&老实说,我认为他们不会费心去做。我刚刚发现,你正在尝试从Outlook的另一个存储设置一个文件夹。我认为这根本不可能。你必须只处理单个存储区中的文件夹。嗨,尤金,如果是这样的话,那就很不幸了&我不明白为什么这在365年发生了变化。此代码与Outlook 2013一起使用,没有任何问题。