在 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
}
谢谢
我需要从 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
}
谢谢