如何使用EWS获取邮件及其附件
ExchangeServiceBinding esb = new ExchangeServiceBinding(); esb.Credentials = new NetworkCredential(username, password, domain); esb.Url = url; ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate; FindItemType findItemRequest = new FindItemType(); findItemRequest.Traversal = ItemQueryTraversalType.Shallow; ItemResponseShapeType itemProperties = new ItemResponseShapeType(); ////获取邮件地址 PathToExtendedFieldType PidTagSenderSmtpAddress = new PathToExtendedFieldType(); PidTagSenderSmtpAddress.PropertyTag = "0x5D01"; PidTagSenderSmtpAddress.PropertyType = MapiPropertyTypeType.String; // Define which item properties are returned in the response itemProperties.BaseShape = DefaultShapeNamesType.AllProperties; findItemRequest.ItemShape = itemProperties; // Add properties shape to request itemProperties.AdditionalProperties = new BasePathToElementType[1]; //获取邮件地址的 itemProperties.AdditionalProperties[0] = PidTagSenderSmtpAddress; // Identify which folders to search to find items DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1]; folderIDArray[0] = new DistinguishedFolderIdType(); folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox; // Add folders to request findItemRequest.ParentFolderIds = folderIDArray; //Create unread only restriction -------------------------- RestrictionType restriction = new RestrictionType(); IsEqualToType isEqualTo = new IsEqualToType(); PathToUnindexedFieldType pathToFieldType = new PathToUnindexedFieldType(); pathToFieldType.FieldURI = UnindexedFieldURIType.messageIsRead; FieldURIOrConstantType constantType = new FieldURIOrConstantType(); ConstantValueType constantValueType = new ConstantValueType(); constantValueType.Value = "0"; constantType.Item = constantValueType; isEqualTo.Item = pathToFieldType; isEqualTo.FieldURIOrConstant = constantType; restriction.Item = isEqualTo; findItemRequest.Restriction = restriction; FindItemResponseType findItemResponse = esb.FindItem(findItemRequest); FindItemResponseMessageType folder = (FindItemResponseMessageType)findItemResponse.ResponseMessages.Items[0]; ArrayOfRealItemsType folderContents = new ArrayOfRealItemsType(); folderContents = (ArrayOfRealItemsType)folder.RootFolder.Item; ItemType[] items = folderContents.Items; if (items == null) { return; } ProcessEmail(items[i], basicTime);
处理邮件
DateTime createdate; int timezone = int.Parse(Helper.GetWebconfig("timezone")); string username = Helper.GetWebconfig("username"); string password = Helper.GetWebconfig("password"); string domain = Helper.GetWebconfig("domain"); string exchangewebservice = Helper.GetWebconfig("exchangewebservice"); ExchangeServiceBinding esb = new ExchangeServiceBinding(); esb.Credentials = new NetworkCredential(username, password, domain); esb.Url = exchangewebservice; string categoryname = "未分类"; int categoryid = 0; string status = "unsolved"; string priority = "medium"; string title = ""; string contents = ""; string email = ""; title = itemType.Subject; createdate = itemType.DateTimeReceived.AddHours(timezone); if (createdate < baseTime) { return; } #region 附件路径定义 string subpath = DateTime.Now.ToString("yyyy-MM"); string path = Helper.GetWebconfig("helpdesk_webconfig").Replace("web.config", "uploads") + @"\" + subpath + @"\"; string phypath = path; if (!System.IO.Directory.Exists(phypath)) { System.IO.Directory.CreateDirectory(phypath); } string filepre = DateTime.Now.ToString("yyyyMMddHHmmss_"); #endregion #region 获取邮件的内容 GetItemType g = new GetItemType(); g.ItemShape = new ItemResponseShapeType(); g.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties; g.ItemIds = new BaseItemIdType[] { itemType.ItemId }; GetItemResponseType p_mailResponse = esb.GetItem(g); ArrayOfResponseMessagesType arrMail = p_mailResponse.ResponseMessages; ResponseMessageType[] responseMessages = arrMail.Items; foreach (ResponseMessageType respmsg in responseMessages) { #region 邮件内容 if (respmsg is ItemInfoResponseMessageType) { ItemInfoResponseMessageType createItemResp = (respmsg as ItemInfoResponseMessageType); ArrayOfRealItemsType aorit = createItemResp.Items; foreach (MessageType myMessage in aorit.Items) { if (myMessage.Body.BodyType1 == BodyTypeType.Text) { contents = myMessage.Body.Value.Replace(Environment.NewLine, "<br />"); } else { contents = myMessage.Body.Value; } if (myMessage.From != null) { email = myMessage.From.Item.EmailAddress; } } } #endregion #region 邮件附件 if (itemType.HasAttachments) { ItemInfoResponseMessageType res = (ItemInfoResponseMessageType)respmsg; if (res != null) { if (res.ResponseClass == ResponseClassType.Success && res.Items.Items != null && res.Items.Items.Length > 0) { ItemType inboxItem2 = res.Items.Items[0]; int m = 0; string pname = ""; string vname = ""; string ext = ""; string url = Helper.GetWebconfig("helpdesk_url"); string app = Helper.GetApp(url); string absurl = ""; #region 保存附件 AttachmentType[] attachments = inboxItem2.Attachments; for (int attachmentCount = 0; attachmentCount < attachments.Length; attachmentCount++) { GetAttachmentType getAttachmentRequest = new GetAttachmentType(); RequestAttachmentIdType[] attachmentIDArray = new RequestAttachmentIdType[1]; attachmentIDArray[0] = new RequestAttachmentIdType(); attachmentIDArray[0].Id = attachments[attachmentCount].AttachmentId.Id; getAttachmentRequest.AttachmentIds = attachmentIDArray; GetAttachmentResponseType getAttachmentResponse = esb.GetAttachment(getAttachmentRequest); AttachmentInfoResponseMessageType attachmentResponseMessage = getAttachmentResponse.ResponseMessages.Items[0] as AttachmentInfoResponseMessageType; if (attachmentResponseMessage != null) { if (attachmentResponseMessage.ResponseClass == ResponseClassType.Success && attachmentResponseMessage.Attachments != null && attachmentResponseMessage.Attachments.Length > 0) { AttachmentType attachment = attachmentResponseMessage.Attachments[0]; if (attachment is FileAttachmentType) { FileAttachmentType fat = (FileAttachmentType)attachment; ext = Helper.GetExt(fat.Name); pname = phypath + filepre + m + ext; vname = url + "uploads/" + subpath + "/" + filepre + m + ext; absurl = url + "uploads/" + subpath + "/" + filepre + m + ext; File.WriteAllBytes(pname, fat.Content); contents = contents.Replace("cid:" + attachment.ContentId, vname); m++; contents += " <br>附件" + (m + 1) + ": <a href=" + absurl + ">" + absurl + "</a><br>"; } } } } #endregion } } } #endregion } #endregion