将所有电子邮件数据从outlook addin

时间:2015-06-27 16:41:03

标签: c# email outlook outlook-addin

我是办公室插件的新手。我是一名MVC程序员,但是这个项目已被抛弃,因为没有其他人愿意这样做。我需要创建一个outlook addin,它将所有电子邮件数据转发到一个可以通过招聘系统跟踪通信的服务 我正在使用

Application.ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(saveEmail); 

然后我将电子邮件转换为Outlook.MailItem。问题是我看不到获取来自和发送电子邮件地址的方法。它给我的全部是人民的名字。我错过了什么吗?

到目前为止,我能想到的最佳解决方案是将msg保存为.msg文件。将其转发给我的服务,然后使用我发现的解析器将其转换为HTML。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

要访问收件人,请遍历MailItem.Recipients集合并访问Recipient.Name和Recipient.Address属性。

发件人相关属性尚未在ItemSend事件触发时设置 - 最早可以访问发件人属性的是Items.ItemAdd事件在已发送邮件文件夹上触发(使用Namespace.GetDefaultFolder检索它)。

您可以阅读MailItem.SendUsingAccount。如果为null,请使用Namespace.Acounts集合中的第一个Account。然后,您可以使用Account.Recipient对象。

请记住,您不应盲目地将传出项目转换为MailItem对象 - 您还可以使用MeetingItem和TaskRequestItem对象。

答案 1 :(得分:0)

确定使用Dmitry Streblechenko给我的信息以及我刚看到的其他信息是我到目前为止的解决方案。

在ItemSend事件中,我首先确保已发送的电子邮件已移至默认的已发送邮件文件夹。我正在使用gmail测试outlook,所以通常这些都会转到其他地方。 sentMailItems是一个类字段,显然如果它刚刚在Startup函数中声明它将被收集垃圾(对我来说是一个很奇怪的MVC程序员:)。

我'当我回到办公室时,我会在交换中测试这个,希望一切顺利。

public partial class ThisAddIn
{

    public Outlook.Items sentMailItems;

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        Application.ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(ItemSend);
        sentMailItems = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items;
        sentMailItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd);
    }

    void Items_ItemAdd(object item)
    {
        MessageBox.Show(((Outlook.MailItem)item).Subject);

        var msg = Item as Outlook.MailItem;


        string from = msg.SenderEmailAddress;

        string allRecip = "";
        foreach (Outlook.Recipient recip in msg.Recipients)
        {
            allRecip += "," + recip.Address;
        }
    }


    private void ItemSend(object Item, ref bool Cancel)
    {
        if (!(Item is Outlook.MailItem))
            return;

        var msg = Item as Outlook.MailItem;

        msg.DeleteAfterSubmit = false; // force storage to sent items folder (ignore user options)
        Outlook.Folder sentFolder = this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail) as Outlook.Folder;
        if (sentFolder != null)
            msg.SaveSentMessageFolder = sentFolder; // override the default sent items location
        msg.Save();            

    }
    //Other auto gen code here....
}