将所有电子邮件数据从outlook加载项发送到服务

本文关键字:加载项 服务 outlook 电子邮件 数据 | 更新日期: 2023-09-27 17:59:58

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

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

然后我将电子邮件投射到Outlook中。邮件项目。问题是,我看不出有什么方法可以获得发件人和收件人的电子邮件地址。它给我的只是人民的名字。我是不是错过了什么?

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

有什么建议吗?

将所有电子邮件数据从outlook加载项发送到服务

若要访问收件人,请循环使用MailItem。Recipients集合和访问Recipient。姓名和收件人。地址属性。

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

您可以阅读MailItem。SendUsingAccount。如果为null,请使用命名空间中的第一个帐户。Acounts系列。然后您可以使用帐户。收件人对象。

请记住,您不应该盲目地将传出项目强制转换为MailItem对象——您也可以拥有MeetingItem和TaskRequestItem对象。

好吧,使用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....
}