• 读取exchange邮件的未读数(转载)


    protected void Page_Load(object sender, EventArgs e)
            {
                Response.Write("administrator的未读邮件数是:" + UnReadCount("administrator@domainname"));
            }
            int UnReadCount(string userMailAddress)
            {
                EwsConfig config = new EwsConfig();
                config.ExchangeVersion = ExchangeVersion.Exchange2010;
                //config.ExchangeVersion = ExchangeVersionType.Exchange2010_SP2;// ExchangeVersion.Exchange2010_SP3;
                config.EWSServiceUrl = "https://1.1.100.130/EWS/exchange.asmx";
                config.ExchangeAdministrator = "administrator";
                config.ExchangeAdministratorPassword = "password";
                config.DomainName = "domainname";
                config.OtherUserName = "";
                //下面这句屏蔽服务器证书验证,防止页面报“根据验证过程,远程证书无效”的错误
                ServicePointManager.ServerCertificateValidationCallback =
                delegate(Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; };
                ExchangeService service = new ExchangeService(config.ExchangeVersion);

                service.Credentials = new NetworkCredential(config.ExchangeAdministrator, config.ExchangeAdministratorPassword, config.DomainName);
                service.Url = new Uri(config.EWSServiceUrl);
                //前提打开Exchange 2010服务器在命令行中输入:
                //New-ManagementRoleAssignment -Name:impersonationAssignmentName -Role:ApplicationImpersonation -User:
                service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.PrincipalName, config.OtherUserName);
                ImpersonatedUserId imperson = new ImpersonatedUserId();
                imperson.IdType = ConnectingIdType.SmtpAddress;
                imperson.Id = userMailAddress;
                service.ImpersonatedUserId = imperson;
                int unRead = Folder.Bind(service, WellKnownFolderName.Inbox).UnreadCount;
                return unRead;
                //HttpContext.Current.Response.Write(config.OtherUserName + "未读邮件数:" + unRead);
            }
            public struct EwsConfig
            {
                //ExchangeServiceBinding ser = new ExchangeServiceBinding();

                public ExchangeVersion ExchangeVersion;
                //public ExchangeVersionType ExchangeVersion;
                public string EWSServiceUrl;
                public string ExchangeAdministrator;
                public string ExchangeAdministratorPassword;
                public string DomainName;
                public string OtherUserName;

            }

    以下是方法:

    #region 给本人插入会议日程

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Data;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;

    using System.Net.Mail;
    using System.Net.Mime;
    using System.Net;
    using System.Text;
    using System.Data.SqlClient;
    using System.IO;
    using System.Xml;
    using System.Security.Cryptography.X509Certificates;
    using System.Net.Security;


            public void CreateAppointment(ExchangeServiceBinding esb, string sub, string roommail, string location, DateTime datefrom, DateTime dateto,string bodyvalue)
            {
                // Create the appointment.
                CalendarItemType appointment = new CalendarItemType();
                // Add item properties to the appointment.
                appointment.Body = new BodyType();
                appointment.Body.BodyType1 = BodyTypeType.Text;
                appointment.Body.Value = bodyvalue;//"Agenda Items.";
                //appointment.Categories = new string[] { "Category1", "Category2" };
                appointment.Importance = ImportanceChoicesType.High;
                appointment.ImportanceSpecified = true;
                appointment.ItemClass = "IPM.Appointment";
                appointment.Subject = sub;
                // Add an attendee

                MailAddressCollection mc = GetrMailAddressList();
                AttendeeType[] rAtt = new AttendeeType[mc.Count];
                for (int ii = 0; ii < rAtt.Length; ii++)
                {
                    EmailAddressType eat = new EmailAddressType();
                    eat.EmailAddress = mc[ii].Address;
                    eat.Name = mc[ii].DisplayName;
                    AttendeeType att = new AttendeeType();
                    att.Mailbox = eat;
                    rAtt[ii] = att;
                }
                //EmailAddressType eat1 = new EmailAddressType();
                //eat1.EmailAddress = "第一个与会者邮箱地址";
                //eat1.Name = "姓名";
                //AttendeeType at1 = new AttendeeType();
                //at1.Mailbox = eat1;

                //EmailAddressType eat2 = new EmailAddressType();
                //eat2.EmailAddress = "第一二个与会者邮箱地址";
                //eat2.Name = "姓名";
                //AttendeeType at2 = new AttendeeType();
                //at2.Mailbox = eat2;
              
                //AttendeeType[] rAtt = new AttendeeType[2];
                //rAtt[0] = at1;
                //rAtt[1] = at2;
                appointment.RequiredAttendees = rAtt;

                //add meeting room attendee
                EmailAddressType meetingRoom = new EmailAddressType();
                meetingRoom.EmailAddress = roommail ;// "会议室邮箱地址";
                meetingRoom.Name =  location ;
                AttendeeType meetingType = new AttendeeType();
                meetingType.Mailbox = meetingRoom;
                AttendeeType[] meetingTypeList = new AttendeeType[1];
                meetingTypeList[0] = meetingType;
                appointment.Resources = meetingTypeList;
                appointment.Location = location;
                // Add calendar properties to the appointment.
                appointment.Start = datefrom;
                appointment.StartSpecified = true;
                appointment.End = dateto;
                appointment.EndSpecified = true;

                // Identify the destination folder that will contain the appointment.
                DistinguishedFolderIdType folder = new DistinguishedFolderIdType();
                folder.Id = DistinguishedFolderIdNameType.calendar;

                // Create the array of items that will contain the appointment.
                NonEmptyArrayOfAllItemsType arrayOfItems = new NonEmptyArrayOfAllItemsType();
                arrayOfItems.Items = new ItemType[1];

                // Add the appointment to the array of items.
                arrayOfItems.Items[0] = appointment;

                // Create the CreateItem request.
                CreateItemType createItemRequest = new CreateItemType();
                // The SendMeetingInvitations attribute is required for calendar items.
                //createItemRequest.SendMeetingInvitations = CalendarItemCreateOrDeleteOperationType.SendToNone;
                createItemRequest.SendMeetingInvitations = CalendarItemCreateOrDeleteOperationType.SendToAllAndSaveCopy;
                createItemRequest.SendMeetingInvitationsSpecified = true;
                // Add the destination folder to the CreateItem request.
                createItemRequest.SavedItemFolderId = new TargetFolderIdType();
                createItemRequest.SavedItemFolderId.Item = folder;
                // Add the items to the CreateItem request.
                createItemRequest.Items = arrayOfItems;
                try
                {
                    // Send the request and get the response.
                    CreateItemResponseType createItemResponse = esb.CreateItem(createItemRequest);
                    // Get the response messages.
                    ResponseMessageType[] rmta = createItemResponse.ResponseMessages.Items;
                    foreach (ResponseMessageType rmt in rmta)
                    {
                        ArrayOfRealItemsType itemArray = ((ItemInfoResponseMessageType)rmt).Items;
                        ItemType[] items = itemArray.Items;

                        // Get the item identifier and change key for each item.
                        foreach (ItemType item in items)
                        {
                            Console.WriteLine("Item identifier: " + item.ItemId.Id);
                            Console.WriteLine("Item change key: " + item.ItemId.ChangeKey);
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error Message: " + e.Message);
                }
            }
            //应答会议邀请:

            //应答会议邀请
            public static void AcceptItem(ExchangeServiceBinding esb, string meetingID)
            {
                // Create the request.
                CreateItemType request = new CreateItemType();

                // Set the message disposition on the request.
                request.MessageDisposition = MessageDispositionType.SendAndSaveCopy;
                request.MessageDispositionSpecified = true;

                // Create the AcceptItem response object.
                AcceptItemType acceptItem = new AcceptItemType();

                // Identify the meeting request to accept.
                acceptItem.ReferenceItemId = new ItemIdType();
                acceptItem.ReferenceItemId.Id = meetingID;

                // Add the AcceptItem response object to the request.
                request.Items = new NonEmptyArrayOfAllItemsType();
                request.Items.Items = new ItemType[1];
                request.Items.Items[0] = acceptItem;
                // Send the request and get the response.
                CreateItemResponseType response = esb.CreateItem(request);

                ArrayOfResponseMessagesType aormt = response.ResponseMessages;
                ResponseMessageType[] rmta = aormt.Items;
                foreach (ResponseMessageType rmt in rmta)
                {
                    ItemInfoResponseMessageType iirmt = (rmt as ItemInfoResponseMessageType);
                    if (iirmt.ResponseClass == ResponseClassType.Success)
                    {
                        Console.WriteLine("Successfully accepted meeting");
                    }
                }
            }

            private ExchangeServiceBinding esb;

            public static ExchangeServiceBinding GetExchangeService(ExchangeSession session)
            {
                ExchangeServiceBinding esb = new ExchangeServiceBinding();

                //esb.Credentials = session.GetNetworkCredential();
                string ocsuser = System.Configuration.ConfigurationManager.AppSettings["OcsUser"];
                string password = System.Configuration.ConfigurationManager.AppSettings["password"];
                string domain = System.Configuration.ConfigurationManager.AppSettings["Domain"];
                string ExchangeServer = System.Configuration.ConfigurationManager.AppSettings["ExchangeServer"];
                esb.Credentials = session.GetNetCS(ocsuser, password, domain );
                esb.Url = ExchangeServer; //session.Url;

                ServicePointManager.ServerCertificateValidationCallback += CheckCert;

                ExchangeImpersonationType imp = new ExchangeImpersonationType();
                imp.ConnectingSID = new ConnectingSIDType { PrimarySmtpAddress = session.Impersonation };
                esb.ExchangeImpersonation = imp;

                FindItemType fit = new FindItemType();
                fit.ItemShape = new ItemResponseShapeType { BaseShape = DefaultShapeNamesType.Default };
                fit.ParentFolderIds = new DistinguishedFolderIdType[]
                {
                    new DistinguishedFolderIdType{ Id = DistinguishedFolderIdNameType.calendar }
                };

                fit.Traversal = ItemQueryTraversalType.Shallow;

                FindItemResponseType firt = esb.FindItem(fit);

                fit.Traversal = ItemQueryTraversalType.Shallow;

                return esb;
            }

            protected static bool CheckCert(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
            {
                return true;
            }

            public void ExchangeOperation(string userMail)
            {
                //string unUserName = ConfigurationManager.AppSettings["UserName"];
                //string pnPassWord = ConfigurationManager.AppSettings["Password"];
                //string dnDomain = ConfigurationManager.AppSettings["Domain"];
                //string url = ConfigurationManager.AppSettings["Url"];

                //ExchangeImpersonationType Impersonation = new ExchangeImpersonationType();
                //Impersonation.ConnectingSID = new ConnectingSIDType();

                //esb = new ExchangeServiceBinding();
                //esb.Credentials = new System.Net.NetworkCredential(unUserName, pnPassWord, dnDomain);
                //esb.Url = url;
                //esb.ExchangeImpersonation = Impersonation;

                ExchangeSession m_Session = new ExchangeSession(userMail);
                try
                {
                    esb = GetExchangeService(m_Session);
                }
                catch (Exception ex)
                {
                    string strError = ex.Message;
                }
            }
            #endregion

    这样使用

        //给本人差日程 20110419解决自己发的会议邀请,自己的日历看不到日程的问题
                ExchangeOperation(organigerEmail);//发起者的邮箱
                CreateAppointment(esb, meeting.Subject, organigerEmail , roomAddress, startTime, endTime, content.Text.Trim() );

    webconfig配置:

      <!-- exchange配置-->
        <add key="ExchangeServer" value="https://10.0.8.13/EWS/Exchange.asmx"/>
        <add key="OcsUser" value="ocsuser"/>
        <add key="Domain" value="sinooceanland.com"/>
        <add key="password" value="password"/>

  • 相关阅读:
    [PAT] 1012 The Best Rank (25 分)Java
    scroll-view 隐藏滚动条
    python bool
    wx小程序 button 属性open-typ 用法 按钮分享
    python str 的常用方法
    node global文件夹和chace文件夹位置全局位置修改
    wx.showModal() 内容如何换行?
    自定义导航栏头部 并简单设置标题和返回按键
    jquery绑定事件如何传递参数
    复习第一天内容
  • 原文地址:https://www.cnblogs.com/mqingqing123/p/2588152.html
Copyright © 2020-2023  润新知