.NET中使用Exchange 2007 Webservice来读取邮件
很久没有更新过博客了,这几个月比较忙,人也比较懒散,今天已经是八月份,新的一个月希望要换一个状态。今天要写的文章是我四月份写的一个功能,一直拖到现在才发表。在企业内部我们一般都是使用微软的Exchange服务器来进行邮件的存储及发送,我们一般在客户端用outlook来收发邮件。工作中遇到了一个需求,需要写一个程序来抓取邮件服务器的邮件,并将抓取下来的邮件存储到数据库中。之前已经发表过一篇文章,是利用Jmail组件来抓取,可以抓取我们常用的一些邮箱的邮件,比如说163,gmail等,但是不能抓取exchange服务器中的邮件,所以需要重新写,最后决定使用Exchange 2007 中提供的webservice来抓取邮件。网络上这方面的资料很少,所以大部分的参考是来自MSDN:
http://msdn.microsoft.com/en-us/library/exchangewebservices(EXCHG.80).aspx
2007版的Exchange服务器提供了webservice,我们可以方便的在.NET程序中添加该引用,然后就可以方便的实现邮件的抓取,发送,删除等功能。我测试是在控制台程序中使用该webservice,步骤如下:
1 新建一个站点,然后添加exchange webservice 的引用,输入邮件服务器的OWA地址:http://yourmailserver/EWS/Services.wsdl,如果是在公司的内部域中,添加的过程中要求输入你的域帐号和密码。
2 添加成功以后再项目中导入该命名空间以其他必须的命名空间;
3 下面就是具体的代码,具体的请看注释:
发送邮件:
1
public static void CreateEmail(string userName, string passWord, string domain, string url, string mailFrom, string mailTo)
2
{
3
// Create service binding.
4
// 建立service绑定
5
ExchangeServiceBinding esb = new ExchangeServiceBinding();
6
esb.Credentials = new NetworkCredential(userName, passWord, domain);
7
esb.Url = url;
8![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
// Create the CreateItem request.
10
CreateItemType createItemRequest = new CreateItemType();
11![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
// Specifiy how the created items are handled
13
// 如何处理邮件
14
createItemRequest.MessageDisposition = MessageDispositionType.SendAndSaveCopy;
15
createItemRequest.MessageDispositionSpecified = true;
16![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
// Specify the location of sent items.
18
createItemRequest.SavedItemFolderId = new TargetFolderIdType();
19
DistinguishedFolderIdType sentitems = new DistinguishedFolderIdType();
20
sentitems.Id = DistinguishedFolderIdNameType.sentitems;
21
createItemRequest.SavedItemFolderId.Item = sentitems;
22![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
// Create the array of items.
24
createItemRequest.Items = new NonEmptyArrayOfAllItemsType();
25![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
// Create a single e-mail message.
27
// 新建一封邮件message对象
28
MessageType message = new MessageType();
29
message.Subject = "Tommy Test";
30
message.Body = new BodyType();
31
message.Body.BodyType1 = BodyTypeType.Text;
32
message.Body.Value = "This is tommy's test use exchange webservice";
33
message.ItemClass = "IPM.Note";
34
message.Sender = new SingleRecipientType();
35
message.Sender.Item = new EmailAddressType();
36
message.Sender.Item.EmailAddress = mailFrom;
37
message.ToRecipients = new EmailAddressType[1];
38
message.ToRecipients[0] = new EmailAddressType();
39
message.ToRecipients[0].EmailAddress = mailTo;
40
message.Sensitivity = SensitivityChoicesType.Normal;
41![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
// Add the message to the array of items to be created.
43
createItemRequest.Items.Items = new ItemType[1];
44
createItemRequest.Items.Items[0] = message;
45![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
try
47
{
48
// Send the request to create and send the e-mail item, and get the response.
49
CreateItemResponseType createItemResponse = esb.CreateItem(createItemRequest);
50![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
// Determine whether the request was a success.
52
if (createItemResponse.ResponseMessages.Items[0].ResponseClass == ResponseClassType.Error)
53
{
54
throw new Exception(createItemResponse.ResponseMessages.Items[0].MessageText);
55
}
56
else
57
{
58
Console.WriteLine("Item was created");
59
Console.ReadLine();
60
}
61
}
62
catch (Exception e)
63
{
64
Console.WriteLine(e.Message);
65
Console.ReadLine();
66
}
67
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
61
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
62
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
63
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
64
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
65
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
66
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
抓取以及删除邮件:
1
public static void GetMailMessage(string userName, string passWord, string domain, string url)
2
{
3
// 绑定exchange服务器
4
ExchangeServiceBinding exchangeServer = new ExchangeServiceBinding();
5
ICredentials creds = new NetworkCredential(userName, passWord, domain);
6![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
// 建立信任连接
8
exchangeServer.Credentials = creds;
9
exchangeServer.Url = url;
10![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
// 定义邮件的收件箱
12
DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
13
folderIDArray[0] = new DistinguishedFolderIdType();
14
folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox;
15![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
PathToUnindexedFieldType ptuftDisplayName = new PathToUnindexedFieldType();
17
ptuftDisplayName.FieldURI = UnindexedFieldURIType.folderDisplayName;
18![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
PathToExtendedFieldType pteftComment = new PathToExtendedFieldType();
20
pteftComment.PropertyTag = "0x3004"; // PR_COMMENT
21
pteftComment.PropertyType = MapiPropertyTypeType.String;
22![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
// 定义GetFolderType对象,设置相应属性
24
GetFolderType myfoldertype = new GetFolderType();
25
myfoldertype.FolderIds = folderIDArray;
26
myfoldertype.FolderShape = new FolderResponseShapeType();
27
myfoldertype.FolderShape.BaseShape = DefaultShapeNamesType.IdOnly;
28
myfoldertype.FolderShape.AdditionalProperties = new BasePathToElementType[2];
29
myfoldertype.FolderShape.AdditionalProperties[0] = ptuftDisplayName;
30
myfoldertype.FolderShape.AdditionalProperties[1] = pteftComment;
31![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
32
// 获取服务器中的文件夹的集合
33
GetFolderResponseType myFolder = exchangeServer.GetFolder(myfoldertype);
34![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
// 获取收件箱
36
FolderInfoResponseMessageType firmtInbox =
37
(FolderInfoResponseMessageType)myFolder.ResponseMessages.Items[0];
38![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
// 显示收件箱
40
Console.WriteLine(string.Format("got folder: {0}", firmtInbox.Folders[0].DisplayName));
41![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
PathToUnindexedFieldType ptuftSubject = new PathToUnindexedFieldType();
44
ptuftSubject.FieldURI = UnindexedFieldURIType.itemSubject;
45![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
PathToUnindexedFieldType ptuftBody = new PathToUnindexedFieldType();
47
ptuftBody.FieldURI = UnindexedFieldURIType.itemAttachments;
48![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
PathToExtendedFieldType pteftFlagStatus = new PathToExtendedFieldType();
50
pteftFlagStatus.PropertyTag = "0x1090"; // PR_FLAG_STATUS
51
pteftFlagStatus.PropertyType = MapiPropertyTypeType.Integer;
52![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
// 定义FindItemType对象,准备获取收件箱中的集合
54
FindItemType findItemRequest = new FindItemType();
55
findItemRequest.Traversal = ItemQueryTraversalType.Shallow;
56
findItemRequest.ItemShape = new ItemResponseShapeType();
57
findItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties;
58![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
60
findItemRequest.ParentFolderIds = new FolderIdType[1];
61
findItemRequest.ParentFolderIds[0] = firmtInbox.Folders[0].FolderId;
62![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
63
// 获取邮件
64
FindItemResponseType firt = exchangeServer.FindItem(findItemRequest);
65![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
66
// 循环迭代每一封邮件
67
foreach (FindItemResponseMessageType firmtMessage in firt.ResponseMessages.Items)
68
{
69
// 如果包含邮件,显示出来
70
if (firmtMessage.RootFolder.TotalItemsInView > 0)
71
{
72
// 循环迭代每一封邮件详细信息
73
foreach (ItemType it in ((ArrayOfRealItemsType)firmtMessage.RootFolder.Item).Items)
74
{
75
Console.WriteLine(string.Format("邮件标题: {0} ", it.Subject));
76
Console.WriteLine(string.Format("发件人: {0} ",((MessageType)(it)).From.Item.Name));
77
Console.WriteLine(string.Format("收件人: {0} ", it.DisplayTo));
78
Console.WriteLine(string.Format("抄送: {0} ", it.DisplayCc));
79
Console.WriteLine(string.Format("大小: {0} ", it.Size.ToString()));
80
Console.WriteLine(string.Format("重要性: {0} ", it.Importance.ToString()));
81
Console.WriteLine(string.Format("是否已读: {0} ", ((MessageType)(it)).IsRead.ToString()));
82
Console.WriteLine(string.Format("是否有附件: {0} ", it.HasAttachments.ToString()));
83
//Console.WriteLine(string.Format("发送时间:{0}", it.DateTimeSent.ToString()));
84
Console.WriteLine(string.Format("接收时间: {0} ", it.DateTimeReceived.ToString()));
85
86
87
// 通过GetItemType对象来得到邮件的正文
88
GetItemType getItemRequest = new GetItemType();
89
// 设置必要的属性
90
getItemRequest.ItemIds = new BaseItemIdType[1];
91
getItemRequest.ItemIds[0] = (BaseItemIdType)it.ItemId;
92
getItemRequest.ItemShape = new ItemResponseShapeType();
93
getItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties;
94
getItemRequest.ItemShape.IncludeMimeContent = true;
95![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
96
// 获得服务器的相应
97
GetItemResponseType getItemResponse = exchangeServer.GetItem(getItemRequest);
98![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
99
// 得到邮件体
100
ItemInfoResponseMessageType getItemResponseMessage =
101
getItemResponse.ResponseMessages.Items[0] as
102
ItemInfoResponseMessageType;
103![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
104
// 显示邮件正文
105
Console.WriteLine("邮件格式:{0}", getItemResponseMessage.Items.Items[0].Body.BodyType1);
106
Console.WriteLine(string.Format("正文:{0}", getItemResponseMessage.Items.Items[0].Body.Value));
107![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
108
// 获取当前邮件的附件集合
109
if (getItemResponseMessage.Items.Items[0].HasAttachments)
110
{
111
AttachmentType[] attachments = getItemResponseMessage.Items.Items[0].Attachments;
112![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
113
// 循环获取当前邮件的每一个附件
114
for (int i = 0; i <= attachments.Length - 1;i++ )
115
{
116
// 定义GetAttachmentType,设置相应的属性,进行模式验证来获取附件
117
GetAttachmentType getAttachment = new GetAttachmentType();
118
RequestAttachmentIdType[] attachmentIDArry = new RequestAttachmentIdType[1];
119
attachmentIDArry[0] = new RequestAttachmentIdType();
120
attachmentIDArry[0].Id = attachments[i].AttachmentId.Id;
121
getAttachment.AttachmentIds = attachmentIDArry;
122
getAttachment.AttachmentShape = new AttachmentResponseShapeType();
123
124
// 获取附件
125
GetAttachmentResponseType getAttachmentResponse = exchangeServer.GetAttachment(getAttachment);
126![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
127
// 返回服务器的响应对象
128
AttachmentInfoResponseMessageType responseMessage = getAttachmentResponse.ResponseMessages.Items[0] as AttachmentInfoResponseMessageType;
129
if (responseMessage != null)
130
{
131
// 没有异常,显示附件信息
132
if (responseMessage.ResponseClass == ResponseClassType.Success && responseMessage.Attachments != null
133
&& responseMessage.Attachments.Length > 0)
134
{
135
AttachmentType attachment = responseMessage.Attachments[0];
136
Console.WriteLine("附件名:{0}\n", attachment.Name);
137
//Console.WriteLine("附件类型:{0}\n", attachment.ContentId);
138
}
139
}
140
}
141
}
142![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
143
// 删除当前邮件
144
DeleteItemType deleteItem = new DeleteItemType();
145
deleteItem.ItemIds = new BaseItemIdType[1];
146![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
147
// 将要删除邮件的ID,changekey赋值给ItemIdType对象
148
ItemIdType itemIDType = new ItemIdType();
149
itemIDType.Id = it.ItemId.Id;
150
itemIDType.ChangeKey = it.ItemId.ChangeKey;
151![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
152
deleteItem.ItemIds[0] = itemIDType;
153![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
154
// 执行删除
155
DeleteItemResponseType deleteResponse = exchangeServer.DeleteItem(deleteItem);
156![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
157
// 删除成功
158
if (deleteResponse.ResponseMessages.Items.Length > 0 && deleteResponse.ResponseMessages.Items[0].ResponseClass == ResponseClassType.Success)
159
{
160
Console.WriteLine("删除成功");
161
}
162
163
}
164
}
165![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
166
}
167
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
61
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
62
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
63
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
64
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
65
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
66
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
68
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
69
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
70
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
71
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
72
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
73
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
74
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
75
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
76
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
77
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
78
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
79
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
80
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
81
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
82
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
83
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
84
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
85
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
86
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
87
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
88
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
89
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
90
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
91
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
92
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
93
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
94
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
95
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
96
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
97
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
98
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
99
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
100
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
101
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
102
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
103
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
104
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
105
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
106
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
107
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
108
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
109
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
110
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
111
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
112
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
113
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
114
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
115
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
116
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
117
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
118
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
119
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
120
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
121
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
122
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
123
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
124
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
125
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
126
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
127
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
128
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
129
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
130
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
131
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
132
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
133
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
134
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
135
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
136
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
137
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
138
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
139
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
140
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
141
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
142
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
143
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
144
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
145
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
146
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
147
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
148
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
149
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
150
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
151
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
152
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
153
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
154
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
155
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
156
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
157
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
158
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
159
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
160
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
161
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
162
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
163
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
164
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
165
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
166
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
167
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)