【问题标题】:Send all email data to a service from an outlook addin将所有电子邮件数据从 Outlook 插件发送到服务
【发布时间】:2023-03-09 18:42:01
【问题描述】:

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

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

然后我将电子邮件投射到 Outlook.MailItem 中。问题是我看不到从电子邮件地址和到电子邮件地址的方法。它给我的只是人民的名字。我错过了什么吗?

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

有什么建议吗?

【问题讨论】:

    标签: c# email outlook outlook-addin


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,这对收件人有用,但不幸的是,电子邮件似乎并不总是移动到 Outlook 中的已发送邮件文件夹,因此 ItemAdd 事件对我没有帮助。当我回到工作岗位时,我将不得不仔细检查这一点,因为我认为使用交换服务器时存在差异。
    【解决方案2】:

    好的,使用 Dmitry Streblechenko 提供给我的信息以及我刚刚在此处查找的其他一些信息是我目前的解决方案。

    在 ItemSend 事件中,我首先确保已发送的电子邮件被移动到默认的已发送邮件文件夹。我正在使用 gmail 测试前景,所以通常这些会去其他地方。 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....
    }
    

    【讨论】:

      猜你喜欢
      • 2018-07-24
      • 2016-12-18
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 2017-08-05
      • 2021-12-24
      • 2016-02-09
      相关资源
      最近更新 更多