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 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
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;
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 />");
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