Outlook 插件在其他打开的 Outlook 中显示相同的对话框
Outlook Addin shows same dialog in other opened Outlook
我有一个 Outlook 加载项,它会在用户每次发送消息时显示一个对话框。
我正在打开对话框并获取有关 onItemSend 事件的消息信息。这按预期工作:消息发送后,它会打开一个对话框,其中包含一些信息,例如收件人、主题等。
问题是当用户保持 Outlook 打开并从其他来源(例如 phone 或平板电脑)发送邮件时。用户发送邮件后,打开的 Outlook 将显示该对话框,即使它不是从该实例发送的。
例如,有一个用户在他的家里和办公室安装了插件。他让家里的 Outlook 保持打开状态,在忙碌了一天的工作、发送了几条消息并显示了对话框之后,他检查了家里的 Outlook。这将是几个打开的对话框,关于他白天发送的消息。
有没有办法限制对话?有点打开用户发送消息的对话框?这样用户将不会在任何其他打开的 outlook 中有任何对话框...
谢谢
EDIT
刚刚检查了我的代码,有一个误解(我的部分偏离了轨道)。我从方法中删除了一些代码,只是为了更容易阅读...
代码中有两个事件处理程序:
Outlook.Folder sentbox;
Outlook.Items myOlItems = null;
this.itemsendhndler = newicrosoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
this.Application.ItemSend += itemsendhndler;
this.hndler = new Outlook.ItemsEvents_ItemAddEventHandler(Application_ItemAdd);
sentbox = this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail) as Outlook.Folder;
myOlItems = sentbox.Items;
myOlItems.ItemAdd += this.hndler;
然后,在 Application_ItemAdd 中有一个 onItemSend 方法,我认为它是 Application_ItemSend...
void Application_ItemAdd(object Item)
{
this.onItemSend(Item);
}
private void Application_ItemSend(object item, ref bool Cancel)
{
Outlook.MailItem mail = item as MailItem;
if (mail == null)
return;
//Make sure this is a E-mail message
if (string.Compare(OutlookItemHelper.GetMessageClass(mail), "IPM.Note") != 0)
return;
mail.DeleteAfterSubmit = false;
Outlook.Folder sentFolder = this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail) as Outlook.Folder;
if (sentFolder != null)
mail.SaveSentMessageFolder = sentFolder; // override the default sent items location
Cancel = false;
}
private void onItemSend(object Item)
{
Outlook.MailItem itm = null;
itm = (Outlook.MailItem)Item;
using (ExampleDialog dlg = new ExampleDialog())
{
//code after actions...
}
}
无论如何,在 Application_ItemSend 事件中没有打开对话框。我的坏人...我今天学到了新东西!
谢谢大家,我为新手问题道歉...
你确定吗? Application.ItemSend 只会在实际发送邮件的 Outlook 实例上触发。 Items.ItemAdd 另一方面,“已发送邮件”文件夹中的事件将在每个 Outlook 实例中触发。这是您的代码正在做的吗?
我有一个 Outlook 加载项,它会在用户每次发送消息时显示一个对话框。
我正在打开对话框并获取有关 onItemSend 事件的消息信息。这按预期工作:消息发送后,它会打开一个对话框,其中包含一些信息,例如收件人、主题等。
问题是当用户保持 Outlook 打开并从其他来源(例如 phone 或平板电脑)发送邮件时。用户发送邮件后,打开的 Outlook 将显示该对话框,即使它不是从该实例发送的。
例如,有一个用户在他的家里和办公室安装了插件。他让家里的 Outlook 保持打开状态,在忙碌了一天的工作、发送了几条消息并显示了对话框之后,他检查了家里的 Outlook。这将是几个打开的对话框,关于他白天发送的消息。
有没有办法限制对话?有点打开用户发送消息的对话框?这样用户将不会在任何其他打开的 outlook 中有任何对话框...
谢谢
EDIT
刚刚检查了我的代码,有一个误解(我的部分偏离了轨道)。我从方法中删除了一些代码,只是为了更容易阅读...
代码中有两个事件处理程序:
Outlook.Folder sentbox;
Outlook.Items myOlItems = null;
this.itemsendhndler = newicrosoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
this.Application.ItemSend += itemsendhndler;
this.hndler = new Outlook.ItemsEvents_ItemAddEventHandler(Application_ItemAdd);
sentbox = this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail) as Outlook.Folder;
myOlItems = sentbox.Items;
myOlItems.ItemAdd += this.hndler;
然后,在 Application_ItemAdd 中有一个 onItemSend 方法,我认为它是 Application_ItemSend...
void Application_ItemAdd(object Item)
{
this.onItemSend(Item);
}
private void Application_ItemSend(object item, ref bool Cancel)
{
Outlook.MailItem mail = item as MailItem;
if (mail == null)
return;
//Make sure this is a E-mail message
if (string.Compare(OutlookItemHelper.GetMessageClass(mail), "IPM.Note") != 0)
return;
mail.DeleteAfterSubmit = false;
Outlook.Folder sentFolder = this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail) as Outlook.Folder;
if (sentFolder != null)
mail.SaveSentMessageFolder = sentFolder; // override the default sent items location
Cancel = false;
}
private void onItemSend(object Item)
{
Outlook.MailItem itm = null;
itm = (Outlook.MailItem)Item;
using (ExampleDialog dlg = new ExampleDialog())
{
//code after actions...
}
}
无论如何,在 Application_ItemSend 事件中没有打开对话框。我的坏人...我今天学到了新东西!
谢谢大家,我为新手问题道歉...
你确定吗? Application.ItemSend 只会在实际发送邮件的 Outlook 实例上触发。 Items.ItemAdd 另一方面,“已发送邮件”文件夹中的事件将在每个 Outlook 实例中触发。这是您的代码正在做的吗?