通过Exchange Server 2007整合与二次开发---入门篇,相信对Exchange Server 2007二次开发有了初步的了解,在本文中,是我在项目中对EWS的具体应用。
要使用EWS,首先要设置ExchangeServiceBinding代理类,如下:
ExchangeServiceBinding esb = new ExchangeServiceBinding();
esb.Url = EWS地址;
esb.Credentials = new NetworkCredential(用户名, 密码, 域名);
这样我们就创建了该用户的代理,通过这个代理可以进行收发邮件、预定会议、应答会议等。
也可以用这种方式创建esb.Credentials=CredentialCache.DefaultCredentials,这样为当前登录系统的账户创建代理。
以下是一些具体的应用示例:
创建普通邮件:
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(); 24
message.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
try31
{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
else40
{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 = "实际的发送者邮件地址";
创建带附件的邮件:
创建带附件的邮件2
public static ItemIdType CreateMessage(ExchangeServiceBinding esb, string subject,string body,string toEmailAddress)3
{4
ItemIdType iiItemid = new ItemIdType();5
// Create a CreateItem request object6
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 properties14
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 Recipients26

27
// Construct the array of items to send28
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
else41
{42
ItemInfoResponseMessageType rmResponseMessage = createItemResponse.ResponseMessages.Items[0] as 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.CreateAttachment89

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
else102
{103

104
AttachmentInfoResponseMessageType amAttachmentResponseMessage =105

106
caCreateAttachmentResponse.ResponseMessages.Items[0] as AttachmentInfoResponseMessageType;107

108
Console.WriteLine("Attachment was created");109

110
Console.WriteLine("Change Key : " + amAttachmentResponseMessage.Attachments111

112
[0].AttachmentId.RootItemChangeKey.ToString());113

114
iiAttachmentItemid.Id = amAttachmentResponseMessage.Attachments[0].AttachmentId.RootItemId.ToString115

116
();117

118
iiAttachmentItemid.ChangeKey = amAttachmentResponseMessage.Attachments119

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
else147
{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!");
创建会议邀请:
创建会议邀请邮件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 attendee16
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 attendee34
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
try72
{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
}应答会议邀请:
应答会议邀请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
}未完待续。。。。

浙公网安备 33010602011771号