所以我需要获取诸如以下信息:
发件人邮件地址(以便以后获取他的域个人资料信息)
邮件主题(应为“文件路径”减去“ msg”扩展名)。
然后,就像我在Outlook中按下“ ReplyAll”按钮一样,回复它。因此,答复需要获得通常的标头,例如“发件人:....”,“收件人:...”,“抄送人...”等等。
我所需要做的就是更改其主题,并根据将按下按钮的用户的“ FromAddress”来删除地址
我在这里和那里已经阅读了一些,人们谈论的是MailItem,但是没有有关如何获得此项目或如何从.msg文件构建它的信息。
在特定的用户操作之后,我要做的事情。
用户应该将邮件拖放到面板中,从那里我可以找到其本地路径。
感谢您的时间!
编辑#1
我设法找出信息,并将.msg文件设置为MailItem:
Outlook.Application appOutlook = new Outlook.Application();
var email = (Outlook.MailItem)appOutlook.Session.OpenSharedItem(filepath);
string getCC = "";
string getFrom = ""; // From is never null
string getTo = "";
string getSubject = "";
bool lengthCC = email.CC.HasValue();
bool lengthTo = email.To.HasValue();
bool lengthSubject = email.Subject.HasValue();
if (lengthCC)
{
getCC = email.CC.ToString();
}
// and so on...
//
// Display it in MessageBox to confirm test succeeded :
MessageBox.Show("CC : " + getCC +
"\nFrom : " + getFrom +
"\nTo : " + getTo +
"\nSubject : " + getSubject);
email.Close(Outlook.OlInspectorClose.olDiscard);
现在我只需要构建ReplyAll主体并自己手动添加标题...
编辑#2
显然不需要重写标头:
Outlook._MailItem reply = email.ReplyAll();
reply.To = getFrom;
reply.CC = getCC;
reply.Body = "SomeReplyMessage" + reply.Body;
reply.Send();
Marshal.ReleaseComObject(appOutlook);
Marshal.ReleaseComObject(email);
Marshal.ReleaseComObject(reply);
但是它消除了原始消息上方的分隔符,我会找到一种方法来重新添加它!!!
编辑#3
实际上,没有显示所谓的“分隔符”,因为我没有在重新声明HTML正文! 因此,要保留它,您可以这样做:
reply.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
string ReplyMessageBody = String.Format("AddSome<br>HTMLCode<br>ThereAndHere<br>ButFinishWith : BodyTag</body>");
reply.HTMLBody = ReplyMessageBody + reply.HTMLBody;
或更简单,如果您不需要将答复作为HTML答复:
reply.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
reply.HTMLBody = "AddSomeReplyMessage" + reply.HTMLBody;
答案 0 :(得分:0)
Outlook无法直接与MSG文件一起使用-当您调用CreateFromTemplate
甚至OpenSharedItem
时,Outlook会在其默认存储区中创建一个新项目并导入MSG或OFT文件。它不会暴露任何让您弄清楚该消息来自文件的内容;该项目与直接使用CreateItem
或MAPIFolder.Items.Add
创建的项目没有区别。
答案 1 :(得分:0)
查看对原始问题的修改以获得答案!