Exchange Server 2007整合与二次开发---代码篇(一)

      通过Exchange Server 2007整合与二次开发---入门篇,相信对Exchange Server 2007二次开发有了初步的了解,在本文中,是我在项目中对EWS的具体应用。

      要使用EWS,首先要设置ExchangeServiceBinding代理类,如下:

            ExchangeServiceBinding esb = new ExchangeServiceBinding();

            esb.Url = EWS地址;
            esb.Credentials = new NetworkCredential(用户名, 密码, 域名);

            这样我们就创建了该用户的代理,通过这个代理可以进行收发邮件、预定会议、应答会议等。

            也可以用这种方式创建esb.Credentials=CredentialCache.DefaultCredentials,这样为当前登录系统的账户创建代理。

以下是一些具体的应用示例:

 创建普通邮件:

 1 public   static   void  CreateEmail(ExchangeServiceBinding esb)
 2          {
 3            createItemRequest = new CreateItemType();
 4            createItemRequest.MessageDisposition = MessageDispositionType.SendAndSaveCopy;
 5            createItemRequest.MessageDispositionSpecified = true;
 6            // Specify the location of sent items. 
 7            createItemRequest.SavedItemFolderId = new TargetFolderIdType();
 8            DistinguishedFolderIdType sentitems = new DistinguishedFolderIdType();
 9            sentitems.Id = DistinguishedFolderIdNameType.sentitems;
10            createItemRequest.SavedItemFolderId.Item = sentitems;
11            // Create the array of items.
12            createItemRequest.Items = new NonEmptyArrayOfAllItemsType();
13            // Create a single e-mail message.
14            MessageType message = new MessageType();
15            message.Subject = "test";
16            message.Body = new BodyType();
17            message.Body.BodyType1 = BodyTypeType.Text;     
18            message.Body.Value = "this is a test mail from exchange services";
19            message.ItemClass = "IPM.Note";
20            message.From = new SingleRecipientType();
21            message.From.Item = new EmailAddressType();
22            message.ToRecipients = new EmailAddressType[1];
23            message.ToRecipients[0= new EmailAddressType();            
24message.ToRecipients[0].EmailAddress = "收件人地址";
25            message.Sensitivity = SensitivityChoicesType.Confidential;
26            message.Importance = ImportanceChoicesType.High;
27            // Add the message to the array of items to be created.
28            createItemRequest.Items.Items = new ItemType[1];
29            createItemRequest.Items.Items[0= message;
30            try
31            {
32                // Send the request to create and send the e-mail item, and get the response.
33                CreateItemResponseType createItemResponse = esb.CreateItem(createItemRequest);
34                // Determine whether the request was a success.
35                if (createItemResponse.ResponseMessages.Items[0].ResponseClass == ResponseClassType.Error)
36                {
37                    throw new Exception(createItemResponse.ResponseMessages.Items[0].MessageText);
38                }

39                else
40                {
41                    Console.WriteLine("Item was created");
42                }

43
44            }

45            catch (Exception e)
46            {
47                Console.WriteLine(e.Message);
48            }

49
50        }

若要代某人发送邮件,只需添加以下代码,但要注意,EWS代理账户需要对实际发送者有代理发送邮件权限,否则会收到发送失败的邮件。

message.From = new SingleRecipientType();
message.From.Item = new EmailAddressType();
message.From.Item.EmailAddress = "实际的发送者邮件地址";

创建带附件的邮件:

  1 创建带附件的邮件
  2 public   static  ItemIdType CreateMessage(ExchangeServiceBinding esb,  string  subject, string  body, string  toEmailAddress)
  3          {
  4            ItemIdType iiItemid = new ItemIdType();
  5            // Create a CreateItem request object
  6            CreateItemType request = new CreateItemType();
  7           
  8            // Setup the request:
  9            // Indicate that we only want to send the message. No copy will be saved.
 10            request.MessageDisposition = MessageDispositionType.SaveOnly;
 11            request.MessageDispositionSpecified = true;
 12
 13            // Create a message object and set its properties
 14            MessageType message = new MessageType();
 15            message.Subject = subject;
 16            message.Body = new BodyType();
 17            message.Body.BodyType1 = BodyTypeType.Text;
 18            message.Body.Value = body;
 19
 20            message.ToRecipients = new EmailAddressType[1];
 21            message.ToRecipients[0= new EmailAddressType();
 22            message.ToRecipients[0].EmailAddress = toEmailAddress;
 23            message.ToRecipients[0].RoutingType = "SMTP";
 24
 25            //Note: Same you can set CC and BCC Recipients
 26
 27            // Construct the array of items to send
 28            request.Items = new NonEmptyArrayOfAllItemsType();
 29            request.Items.Items = new ItemType[1];
 30            request.Items.Items[0= message;
 31
 32            // Call the CreateItem EWS method.
 33            CreateItemResponseType createItemResponse = esb.CreateItem(request);
 34   
 35            if (createItemResponse.ResponseMessages.Items[0].ResponseClass == ResponseClassType.Error)
 36            {
 37                Console.WriteLine("Error Occured");
 38                Console.WriteLine(createItemResponse.ResponseMessages.Items[0].MessageText);
 39            }

 40            else
 41            {
 42                ItemInfoResponseMessageType rmResponseMessage = createItemResponse.ResponseMessages.Items[0as ItemInfoResponseMessageType;
 43
 44                Console.WriteLine("Item was created");
 45
 46                Console.WriteLine("Item ID : " + rmResponseMessage.Items.Items[0].ItemId.Id.ToString());
 47
 48                Console.WriteLine("ChangeKey : " + rmResponseMessage.Items.Items[0].ItemId.ChangeKey.ToString());
 49
 50
 51                iiItemid.Id = rmResponseMessage.Items.Items[0].ItemId.Id.ToString();
 52
 53                iiItemid.ChangeKey = rmResponseMessage.Items.Items[0].ItemId.ChangeKey.ToString();
 54            }

 55            return iiItemid;
 56        }

 57
 58 // Here the itemID is returned by the CreateMessage Function         
 59          private   static  ItemIdType CreateAttachment(ExchangeServiceBinding ewsServiceBinding, String fnFileName, ItemIdType iiCreateItemid)
 60          {
 61
 62            ItemIdType iiAttachmentItemid = new ItemIdType();
 63
 64            FileStream fsFileStream = new FileStream(fnFileName, System.IO.FileMode.Open,
 65
 66            System.IO.FileAccess.Read);
 67
 68            byte[] bdBinaryData = new byte[fsFileStream.Length];
 69
 70            long brBytesRead = fsFileStream.Read(bdBinaryData, 0, (int)fsFileStream.Length);
 71
 72            fsFileStream.Close();
 73
 74            FileAttachmentType faFileAttach = new FileAttachmentType();
 75
 76            faFileAttach.Content = bdBinaryData;
 77
 78            faFileAttach.Name = fnFileName;
 79
 80            CreateAttachmentType amAttachmentMessage = new CreateAttachmentType();
 81
 82            amAttachmentMessage.Attachments = new AttachmentType[1];
 83
 84            amAttachmentMessage.Attachments[0= faFileAttach;
 85
 86            amAttachmentMessage.ParentItemId = iiCreateItemid;
 87
 88            CreateAttachmentResponseType caCreateAttachmentResponse = ewsServiceBinding.CreateAttachment
 89
 90            (amAttachmentMessage);
 91
 92            if (caCreateAttachmentResponse.ResponseMessages.Items[0].ResponseClass == ResponseClassType.Error)
 93            {
 94
 95                Console.WriteLine("Error Occured");
 96
 97                Console.WriteLine(caCreateAttachmentResponse.ResponseMessages.Items[0].MessageText);
 98
 99            }

100
101            else
102            {
103
104                AttachmentInfoResponseMessageType amAttachmentResponseMessage =
105
106                caCreateAttachmentResponse.ResponseMessages.Items[0as AttachmentInfoResponseMessageType;
107
108                Console.WriteLine("Attachment was created");
109
110                Console.WriteLine("Change Key : " + amAttachmentResponseMessage.Attachments
111
112                [0].AttachmentId.RootItemChangeKey.ToString());
113
114                iiAttachmentItemid.Id = amAttachmentResponseMessage.Attachments[0].AttachmentId.RootItemId.ToString
115
116                ();
117
118                iiAttachmentItemid.ChangeKey = amAttachmentResponseMessage.Attachments
119
120                [0].AttachmentId.RootItemChangeKey.ToString();
121
122            }

123
124            return iiAttachmentItemid;
125
126        }

127
128    public   static   bool  SendMessage(ExchangeServiceBinding esb, ItemIdType p_itemId)
129          {
130            bool blnResult = false;
131            SendItemType siSendItem = new SendItemType();
132            siSendItem.ItemIds = new BaseItemIdType[1];
133            siSendItem.SavedItemFolderId = new TargetFolderIdType();
134            DistinguishedFolderIdType siSentItemsFolder = new DistinguishedFolderIdType();
135            siSentItemsFolder.Id = DistinguishedFolderIdNameType.sentitems;
136            siSendItem.SavedItemFolderId.Item = siSentItemsFolder;
137            siSendItem.SaveItemToFolder = true;
138
139            siSendItem.ItemIds[0= (BaseItemIdType)p_itemId;
140            SendItemResponseType srSendItemResponseMessage = esb.SendItem(siSendItem);
141            if (srSendItemResponseMessage.ResponseMessages.Items[0].ResponseClass ==
142               ResponseClassType.Success)
143            {
144                blnResult = true;
145            }

146            else
147            {
148                blnResult = false;
149            }

150            return blnResult;
151        }

152

调用过程如下所示:
            ItemIdType iiCreateItemid = CreateMessage(esb,"test mail with attachment","this is a mail for testing attachment","收件人邮箱地址");

            iiCreateItemid = CreateAttachment(esb, @"c:\\test attachment.txt", iiCreateItemid);

            if(SendMessage(esb,iiCreateItemid))
                Console.WriteLine("Send mail with attachment success!");
            else
                Console.WriteLine("Something error!");

创建会议邀请:

 

 1 创建会议邀请邮件
 2       public   static   void  CreateAppointment(ExchangeServiceBinding esb)
 3          {
 4            // Create the appointment.
 5            CalendarItemType appointment = new CalendarItemType();  
 6            // Add item properties to the appointment.
 7            appointment.Body = new BodyType();
 8            appointment.Body.BodyType1 = BodyTypeType.Text;
 9            appointment.Body.Value = "Agenda Items.";
10            //appointment.Categories = new string[] { "Category1", "Category2" };
11            appointment.Importance = ImportanceChoicesType.High;
12            appointment.ImportanceSpecified = true;
13            appointment.ItemClass = "IPM.Appointment";
14            appointment.Subject = "测试约会邮件";
15            // Add an attendee
16            EmailAddressType eat1 = new EmailAddressType();
17            eat1.EmailAddress = "第一个与会者邮箱地址";
18            eat1.Name = "姓名";
19            AttendeeType at1 = new AttendeeType();
20            at1.Mailbox = eat1;
21
22            EmailAddressType eat2 = new EmailAddressType();
23            eat2.EmailAddress = "第一二个与会者邮箱地址";
24            eat2.Name = "姓名";
25            AttendeeType at2 = new AttendeeType();
26            at2.Mailbox = eat2;
27
28            AttendeeType[] rAtt = new AttendeeType[2];
29            rAtt[0= at1;
30            rAtt[1= at2;
31            appointment.RequiredAttendees = rAtt;
32
33            //add meeting room attendee
34            EmailAddressType meetingRoom = new EmailAddressType();
35            meetingRoom.EmailAddress = "会议室邮箱地址";
36            meetingRoom.Name = "会议室名称";
37            AttendeeType meetingType = new AttendeeType();
38            meetingType.Mailbox = meetingRoom;
39            AttendeeType[] meetingTypeList = new AttendeeType[1];
40            meetingTypeList[0= meetingType;
41            appointment.Resources = meetingTypeList;
42            appointment.Location = "会议地点";
43            // Add calendar properties to the appointment.
44            appointment.Start = System.DateTime.Parse("2009-05-25GMT14:00:00Z");
45            appointment.StartSpecified = true;
46            appointment.End = System.DateTime.Parse("2009-05-25GMT15:00:00Z");
47            appointment.EndSpecified = true;
48
49            // Identify the destination folder that will contain the appointment.
50            DistinguishedFolderIdType folder = new DistinguishedFolderIdType();
51            folder.Id = DistinguishedFolderIdNameType.calendar;
52
53            // Create the array of items that will contain the appointment.
54            NonEmptyArrayOfAllItemsType arrayOfItems = new NonEmptyArrayOfAllItemsType();
55            arrayOfItems.Items = new ItemType[1];
56
57            // Add the appointment to the array of items.
58            arrayOfItems.Items[0= appointment;
59
60            // Create the CreateItem request.
61            CreateItemType createItemRequest = new CreateItemType();
62            // The SendMeetingInvitations attribute is required for calendar items.
63            //createItemRequest.SendMeetingInvitations = CalendarItemCreateOrDeleteOperationType.SendToNone;
64            createItemRequest.SendMeetingInvitations = CalendarItemCreateOrDeleteOperationType.SendToAllAndSaveCopy;
65            createItemRequest.SendMeetingInvitationsSpecified = true;
66            // Add the destination folder to the CreateItem request.
67            createItemRequest.SavedItemFolderId = new TargetFolderIdType();
68            createItemRequest.SavedItemFolderId.Item = folder;
69            // Add the items to the CreateItem request.
70            createItemRequest.Items = arrayOfItems;
71            try
72            {
73                // Send the request and get the response.
74                CreateItemResponseType createItemResponse = esb.CreateItem(createItemRequest);
75                // Get the response messages.
76                ResponseMessageType[] rmta = createItemResponse.ResponseMessages.Items;
77                foreach (ResponseMessageType rmt in rmta)
78                {
79                    ArrayOfRealItemsType itemArray = ((ItemInfoResponseMessageType)rmt).Items;
80                    ItemType[] items = itemArray.Items;
81
82                    // Get the item identifier and change key for each item.
83                    foreach (ItemType item in items)
84                    {
85                        Console.WriteLine("Item identifier: " + item.ItemId.Id);
86                        Console.WriteLine("Item change key: " + item.ItemId.ChangeKey);
87                    }

88                }

89            }

90            catch (Exception e)
91            {
92                Console.WriteLine("Error Message: " + e.Message);
93            }

94        }

应答会议邀请:

 

 1 应答会议邀请
 2     public   static   void  AcceptItem(ExchangeServiceBinding esb, string  meetingID)
 3           {
 4            // Create the request.
 5            CreateItemType request = new CreateItemType();
 6
 7            // Set the message disposition on the request.
 8            request.MessageDisposition = MessageDispositionType.SendAndSaveCopy;
 9            request.MessageDispositionSpecified = true;
10            
11            // Create the AcceptItem response object.
12            AcceptItemType acceptItem = new AcceptItemType();
13
14            // Identify the meeting request to accept.
15            acceptItem.ReferenceItemId = new ItemIdType();
16            acceptItem.ReferenceItemId.Id = meetingID;
17
18            // Add the AcceptItem response object to the request.
19            request.Items = new NonEmptyArrayOfAllItemsType();
20            request.Items.Items = new ItemType[1];
21            request.Items.Items[0= acceptItem;           
22            // Send the request and get the response.
23            CreateItemResponseType response = esb.CreateItem(request);
24
25            ArrayOfResponseMessagesType aormt = response.ResponseMessages;
26            ResponseMessageType[] rmta = aormt.Items;
27            foreach (ResponseMessageType rmt in rmta)
28            {
29                ItemInfoResponseMessageType iirmt = (rmt as ItemInfoResponseMessageType);
30                if (iirmt.ResponseClass == ResponseClassType.Success)
31                {
32                    Console.WriteLine("Successfully accepted meeting");
33                }

34            }

35        }

           未完待续。。。。

你可能感兴趣的:(Exchange)