如何使用Outlook应用程序从其本地路径获取邮件信息并将ReplyAll传递给它

时间:2018-12-14 17:37:44

标签: c# outlook

所以我需要获取诸如以下信息:

  • 发件人邮件地址(以便以后获取他的域个人资料信息)

  • 邮件主题(应为“文件路径”减去“ 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;

2 个答案:

答案 0 :(得分:0)

Outlook无法直接与MSG文件一起使用-当您调用CreateFromTemplate甚至OpenSharedItem时,Outlook会在其默认存储区中创建一个新项目并导入MSG或OFT文件。它不会暴露任何让您弄清楚该消息来自文件的内容;该项目与直接使用CreateItemMAPIFolder.Items.Add创建的项目没有区别。

答案 1 :(得分:0)

查看对原始问题的修改以获得答案!