在 itemadd 事件中从 outlook 添加回复两次

Reply twice from outlook add in itemadd event

我需要从 Outlook 加载项 item_Add 事件中回复两次,一次是在邮件到达时立即回复,一次是在经过一些处理后回复一次。注册回调的代码如下所示:

void items_ItemAdd(object Item)
{
  Outlook.MailItem mail = (Outlook.MailItem)Item;
  Outlook.MailItem reply = mail.Reply();
  // Add some stuff to reply body and subject
  reply.Send();
  Marshal.ReleaseComObject(reply); 
  // Some processing for few seconds
  reply = mail.Reply();
  // Update reply body and subject
  reply.Send()
  // Release reply object
}

我遇到的问题是处理完成后最后发送了2个回复。有没有办法第一条回复就立即发送,而不是等到最后?

请注意,您 运行 来自事件处理程序的代码。处理程序应该 return 控制流到 Outlook 以处理您的回复。

您可以尝试使用命名空间class的SyncObjects属性来强制同步。

Public Sub Sync() 
  Dim nsp As Outlook.NameSpace  
  Dim sycs As Outlook.SyncObjects  
  Dim syc As Outlook.SyncObject  
  Dim i As Integer  
  Dim strPrompt As Integer  
  Set nsp = Application.GetNamespace("MAPI")  
  Set sycs = nsp.SyncObjects  
  For i = 1 To sycs.Count  
    Set syc = sycs.Item(i)  
    strPrompt = MsgBox("Do you wish to synchronize " & syc.Name &"?", vbYesNo)  
    If strPrompt = vbYes Then  
     syc.Start   
    End If  
  Next  
End Sub

我将代码修改如下:

...
outlookNameSpace = this.Application.GetNamespace("MAPI");
...
void items_ItemAdd(object Item)
{
  Outlook.MailItem mail = (Outlook.MailItem)Item;
  Outlook.MailItem reply = mail.Reply();
  // Add some stuff to reply body and subject
  reply.Send();
  outlookNameSpace.Session.SendAndReceive(false);
  Marshal.ReleaseComObject(reply); 
  // Some processing for few seconds
  reply = mail.Reply();
  // Update reply body and subject
  reply.Send()
  // Release reply object
}

谢谢