从共享收件箱创建 Outlook 任务

Create outlook task from shared inbox

我需要从共享收件箱创建 Outlook 任务。到目前为止,当下面的代码运行时,任务是根据我的意愿与共享收件箱的所有者一起创建的,但是当保存时我得到 "You must be in a public folder to change the owner field of a task" 错误并且所有者被更改回我。

我找不到解决方案,或者它可能超出了我的理解范围。感谢您的帮助。谢谢!

If task = "YES" Then
   user_task = "GR"
   Const olTaskItem = 3
   Dim OlApp As Object
   Dim OlTask As Object

   Set OlApp = CreateObject("Outlook.Application")
   Set OlTask = OlApp.CreateItem(olTaskItem)

   With OlTask
       '.Assign
       '.Recipients.Add "shared@inbox.com" 'workaround to assign task for another owner, but does not show .BCC so not suitable solution.
       .Owner = "shared@inbox.com" ' does not work. changes back to my user
       .Subject = material_full_email & " spp "
       .StartDate = Date
       .DueDate = Date + 7
       .Status = 1                 '0=not started, 1=in progress, 2=complete, 3=waiting,
                                   '4=deferred
       .Importance = 1             '0=low, 1=normal, 2=high
       .ReminderSet = False
       '.ReminderTime = dtReminderDate
       '.Categories = "Business" 'use any of the predefined Categorys or create your own
       .Body = Date & " " & user_task & ":" & " RFQ sent: " & Supplier1 & " / " & Supplier2 & " / " & Supplier3 & " / " & Supplier4
       '.Save   'use .Display if you wish the user to see the task form and make
       .Display       'them perform the save
   End With
End If

不使用Application.CreateItem,调用Application.Session.CreateRecipient传递邮箱所有者的姓名或地址,调用Application.Session.GetSharedDefaultFolder,然后使用MAPIFolder.Items.Add.

更新:

Set OlApp = CreateObject("Outlook.Application")
set NS = olApp.getNamespace("MAPI")
NS.Logon
ste Recip = NS.CreateRecipient("someuser@company.demo")
set SharedFolder = NS.GetSharedDefaultFolder(Recip, olFoldersTasks)
Set OlTask = SharedFolder.Items.Add
...

我设法完成了以下代码工作。我认为最大的问题是 MS Outlook 库未在参考中打勾。

If task = "YES" Then
   user_task = "GR"
   Const olTaskItem = 3
   Dim olApp As Object
   Dim ns As Object
   Dim OlTask As Object
   Dim SharedFolder As Object
   Set olApp = CreateObject("Outlook.Application")
   Set ns = olApp.GetNamespace("MAPI")
   ns.Logon
   Set Recip = ns.CreateRecipient("inboxname")
   Set SharedFolder = ns.GetSharedDefaultFolder(Recip, olFolderTasks)
   Set OlTask = SharedFolder.Items.Add("IPM.Task")
   'Set OLApp = CreateObject("Outlook.Application")
   'Set OlTask = OLApp.CreateItem(olTaskItem)

   With OlTask
       '.Assign
       '.Recipients.Add "shared@inbox.com"
       '.Owner = "shared@inbox.com" ' not needed
       .Subject = material_full_email & " spp "
       .StartDate = Date
       .DueDate = Date + 7
       .Status = 1                 '0=not started, 1=in progress, 2=complete, 3=waiting,
                                   '4=deferred
       .Importance = 1             '0=low, 1=normal, 2=high
       .ReminderSet = False
       '.ReminderTime = dtReminderDate
       '.Categories = "Business" 'use any of the predefined Categorys or create your own
       .Body = Date & " " & user_task & ":" & " RFQ sent to suppliers: " & Supplier1 & " / " & Supplier2 & " / " & Supplier3 & " / " & Supplier4
       '.Save   'use .Display if you wish the user to see the task form and make
       .Display       'them perform the save
   End With
End If

我想我有更简单的方法:

Dim objOLApp As Outlook.Application
Dim NewTask As Outlook.TaskItem
' Set the Application object
Set objOLApp = New Outlook.Application
Set NewTask = objOLApp.Session.Folders.Item(x).Items.Add(olTaskItem)
With NewTask...

其中 'x' 代表您的共享收件箱 ID(对我来说是 5)。您可以使用 MsgBox Prompt:=objOLApp.Session.Folders.Item(x) 来检查。它应该 return 在正确的 ID 上共享收件箱地址(地址@server.com)。