我目前在C#中使用Exchange Web服务。我基本上有一个小应用程序,可以从收件箱中读取电子邮件并处理它们。
我想转发我收到的电子邮件作为电子邮件的附件。此附件将是一封Outlook电子邮件,其中包含原始电子邮件(如果有的话,还包括其自己的附件)。
有什么想法吗?
谢谢!
编辑:
我不确定为什么我会获得选票,但似乎这是不可能的,因为EWS API不提供此类功能
答案 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();
}
}