我有以下要求:
我正在工作的拖放操作
准备重播电子邮件并将其显示给我也有工作的用户,使用以下代码:
MailItem mail = GetMailBySubject(dateReceived, subject);
if (mail != null)
{
MailItem mailReply = mail.ReplyAll();
// add text and stuff to mailReply...
mailReply.Display();
}
这将在Outlook中打开一个窗口,就像用户单击Outlook中的答复一样。
现在我坚持第三个要求,
用户发送回复电子邮件后,我需要以某种方式在Outlook中找到此电子邮件以将其添加到我的datagrid中。
但是我不知道该怎么做。
我所拥有的只是用于准备回复的原始邮件。
是否只有这样才能找到答复,或者这可能是一种完全错误的方法?
更加困难的是,我必须显示回复电子邮件NON Modal,因此当用户单击“发送到Outlook”中时,我没有触发器。
供参考,这是GetMailBySubject的代码
private MailItem GetMailBySubject(DateTime dateReceived, string subject)
{
MailItem Result = null;
Microsoft.Office.Interop.Outlook.Application OutlookIns = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.NameSpace olNamespace = OutlookIns.GetNamespace("MAPI");
MAPIFolder myInbox = olNamespace.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
Items items = myInbox.Items;
int count = items.Count;
MailItem mail = null;
int i = 1; //DO NOT START ON 0
while ((i < count) && (Result == null))
{
if (items[i] is MailItem)
{
mail = (MailItem)items[i];
if ((mail.ReceivedTime.ToString("yyyyMMdd hh:mm:ss") == dateReceived.ToString("yyyyMMdd hh:mm:ss")) && (mail.Subject == subject))
{
Result = mail;
}
}
i++;
}
return Result;
}
编辑
我按照建议尝试了此代码,但是Items.ItemAdd
事件未触发。
所以我仍然必须做错事,但看不到
这是我的代码
MailItem mail = GetMailBySubject((DateTime)sentOn, msg.Subject);
if (mail != null)
{
MailItem mailReply = mail.ReplyAll();
mailReply.HTMLBody = GetDefaultReplyText() + Environment.NewLine + mailReply.HTMLBody;
Guid guid = Guid.NewGuid();
UserProperties mailUserProperties = null;
UserProperty mailUserProperty = null;
mailUserProperties = mailReply.UserProperties;
mailUserProperty = mailUserProperties.Add("myproperty", OlUserPropertyType.olText);
mailUserProperty.Value = guid.ToString(); ;
// the code below gives error "The property cannot be parsed or has an invalid format"
//mailReply.PropertyAccessor.SetProperty("myproperty", guid.ToString());
mailReply.Display();
}
private MailItem GetMailBySubject(DateTime dateReceived, string subject)
{
MailItem Result = null;
Microsoft.Office.Interop.Outlook.Application OutlookIns = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.NameSpace olNamespace = OutlookIns.GetNamespace("MAPI");
MAPIFolder myInbox = olNamespace.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
Items items = myInbox.Items;
int count = items.Count;
MailItem mail = null;
int i = 1; //DO NOT START ON 0
while ((i < count) && (Result == null))
{
if (items[i] is MailItem)
{
mail = (MailItem)items[i];
if ((mail.ReceivedTime.ToString("yyyyMMdd hh:mm:ss") == dateReceived.ToString("yyyyMMdd hh:mm:ss")) && (mail.Subject == subject))
{
Result = mail;
MAPIFolder mySent = olNamespace.GetDefaultFolder(OlDefaultFolders.olFolderSentMail);
mySent.Items.ItemAdd += Items_SentMailItemAdd;
}
}
i++;
}
return Result;
}
最后
private void Items_SentMailItemAdd(object Item)
{
//throw new NotImplementedException();
; // this event is never fired
}
答案 0 :(得分:1)
您可以在“已发送邮件”文件夹上使用Items.ItemAdd
事件。要检查是否是您的消息,请在您创建和显示的消息上设置自定义属性。您可以使用MailItem.UserProperties.Add
,但是这可以强制以TNEF格式发送邮件。为防止这种情况发生,您可以使用MailItem.PropertyAccessro.SetProperty
来设置命名的MAPI属性,而无需使用UserProperties
集合。您可以使用OutlookSpy设置测试用户属性并查看其DASL名称(供SetProperty
使用)(选择消息,单击IMessage按钮,选择自定义属性,请参见DASL编辑框)。