Chr*_*ney 7 c# outlook vsto ms-office outlook-addin
我正在使用ApplicationEvents_11_ItemSendEventHandler(请参阅http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.applicationevents_11_itemsendeventhandler.aspx)在从Outlook发送项目时进行一些处理.
但是,由于此事件触发"发送"而不是"已发送",我无法获取某些信息,例如发件人,发送时间等.
项目实际发送后是否会触发另一个事件?我读过这篇博文; http://easyvsto.wordpress.com/2010/07/27/how-to-save-mail-content-when-a-mail-is-sent-from-outlook/但我对依赖出现的项目保持警惕在sent items文件夹中,考虑到用户可以禁用此功能.
编辑:我应该补充一点,我实际上已经尝试了"观察已发送的项目文件夹"的方法,并注意到该ItemAdd事件似乎只发送我发送的第一封电子邮件,然后再重新启动Outlook.我的代码如下;
var sentMail = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail);
sentMail.Items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd);
Run Code Online (Sandbox Code Playgroud)
我的方法......
void Items_ItemAdd(object item)
{
MessageBox.Show(((Outlook.MailItem)item).Subject);
}
Run Code Online (Sandbox Code Playgroud)
如果使用模式对话框(WPF/WinformsMessageBox),则只会获得第一个事件触发器.您必须实现非阻塞事件处理程序(可能是项目排队策略).
不要使用阻止UI调用模式对话框 - Outlook将注意到UI被阻止并忽略触发后续中断.
请参阅此表格帖子以供参考.
如果您担心控制已发送邮件存储的用户首选项,请使用以下代码段覆盖它们...
MailItem.DeleteAfterSubmit = false; // force storage to sent items folder (ignore user options)
Outlook.Folder sentFolder = ThisAddIn.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail);
if (sentFolder != null)
MailItem.SaveSentMessageFolder = sentFolder; // override the default sent items location
MailItem.Save();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7419 次 |
| 最近记录: |