Exchange Web服务 - 将电子邮件转发为附件

时间:2014-06-04 20:28:03

标签: c# exchangewebservices

我目前在C#中使用Exchange Web服务。我基本上有一个小应用程序,可以从收件箱中读取电子邮件并处理它们。

我想转发我收到的电子邮件作为电子邮件的附件。此附件将是一封Outlook电子邮件,其中包含原始电子邮件(如果有的话,还包括其自己的附件)。

有什么想法吗?

谢谢!

编辑:

我不确定为什么我会获得选票,但似乎这是不可能的,因为EWS API不提供此类功能

2 个答案:

答案 0 :(得分:1)

您可以使用EWS创建ItemAttachment,但无法完全复制Outlook中使用MAPI的功能。例如,使用EWS,您可以创建ItemAttachment,然后使用MIMEContent创建基于当前消息的附件作为解决方法,例如

            FolderId Inboxid = new FolderId(WellKnownFolderName.Inbox, "target@domain.com");    
        ItemView InboxItemView = new ItemView(1);
        FindItemsResults<Item> inFiResuls = service.FindItems(Inboxid,InboxItemView);
        if(inFiResuls.Items.Count == 1){
            EmailMessage fwdMail = new EmailMessage(service);
            EmailMessage orgMail = (EmailMessage)inFiResuls.Items[0];
            PropertySet psPropSet = new PropertySet(BasePropertySet.FirstClassProperties);
            psPropSet.Add(ItemSchema.MimeContent);
            orgMail.Load(psPropSet);
            ItemAttachment emAttach = fwdMail.Attachments.AddItemAttachment<EmailMessage>();
            emAttach.Item.MimeContent = orgMail.MimeContent;
            ExtendedPropertyDefinition pr_flags = new ExtendedPropertyDefinition(3591,MapiPropertyType.Integer);
            emAttach.Item.SetExtendedProperty(pr_flags,"1");
            emAttach.Name = orgMail.Subject;
            fwdMail.Subject = "see Attached";
            fwdMail.ToRecipients.Add("user@domain.com");
            fwdMail.Send();
        }

然而,这并不能完全保证与特定消息相关联的所有mapi属性,因为MIMEContent就是这样,对于大多数普通电子邮件消息,这对于附加消息不是一个问题。 Outlook任务或其他TNEF附件然后您将丢失这些附件或其他属性,如类别,标志,您也将松散这些(如果需要,您可以手动复制这些)。

干杯 格伦

答案 1 :(得分:0)

您可以使用这种方式转发电子邮件。它首先加载并读取每个附件的电子邮件,其中包含&#34; msg&#34;延期。然后将它转发到给定的地址。见下面的代码

FindItemsResults<Item> findResults = exchange.FindItems(WellKnownFolderName.Inbox, newItemView(50,50));

Item[] msgItems = findResults.Where(msgItem => msgItem.HasAttachments).ToArray();
EmailMessage msgInfo = null;

var fileExtensions = new List<string> { "msg", "MSG", "Msg" };

    foreach (MSEWS.Item msgItem  in msgItems )
    {
      msgInfo = EmailMessage.Bind(exchange, msgItem.Id);
      FileAttachment fa = msgInfo.Attachments[0] asFileAttachment;
      if (fileExtensions.Any(ext => ext.Contains(fa.Name.Substring(fa.Name.Length - 3))))                            
        {    
        fa.Load();
        ResponseMessage responseMessage = msgInfo.CreateForward();
        responseMessage.BodyPrefix = "messageBody";
        responseMessage.ToRecipients.Add("toAddress");
        responseMessage.Subject = "subject";
        responseMessage.SendAndSaveCopy();

        }    
    }