.NET中使用Exchange 2007 Webservice来读取邮件
2010-09-09 13:59
441 查看
很久没
有更新过博客了,这几个月比较忙,人也比较懒散,今天已经是八月份,新的一个月希望要换一个状态。今天要写的文章是我四月份写的一个功能,一直拖到现在才
发表。在企业内部我们一般都是使用微软的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
9
//
Create the CreateItem request.
10
CreateItemType createItemRequest
=
new
CreateItemType();
11
12
//
Specifiy how the created items are handled
13
//
如何处理邮件
14
createItemRequest.MessageDisposition
=
MessageDispositionType.SendAndSaveCopy;
15
createItemRequest.MessageDispositionSpecified
=
true
;
16
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
23
//
Create the array of items.
24
createItemRequest.Items
=
new
NonEmptyArrayOfAllItemsType();
25
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
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
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
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
}
抓取以及删除邮件:
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
7
//
建立信任连接
8
exchangeServer.Credentials
=
creds;
9
exchangeServer.Url
=
url;
10
11
//
定义邮件的收件箱
12
DistinguishedFolderIdType[] folderIDArray
=
new
DistinguishedFolderIdType[
1
];
13
folderIDArray[
0
]
=
new
DistinguishedFolderIdType();
14
folderIDArray[
0
].Id
=
DistinguishedFolderIdNameType.inbox;
15
16
PathToUnindexedFieldType ptuftDisplayName
=
new
PathToUnindexedFieldType();
17
ptuftDisplayName.FieldURI
=
UnindexedFieldURIType.folderDisplayName;
18
19
PathToExtendedFieldType pteftComment
=
new
PathToExtendedFieldType();
20
pteftComment.PropertyTag
=
"
0x3004
"
;
//
PR_COMMENT
21
pteftComment.PropertyType
=
MapiPropertyTypeType.String;
22
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
32
//
获取服务器中的文件夹的集合
33
GetFolderResponseType myFolder
=
exchangeServer.GetFolder(myfoldertype);
34
35
//
获取收件箱
36
FolderInfoResponseMessageType firmtInbox
=
37
(FolderInfoResponseMessageType)myFolder.ResponseMessages.Items[
0
];
38
39
//
显示收件箱
40
Console.WriteLine(
string
.Format(
"
got folder: {0}
"
, firmtInbox.Folders[
0
].DisplayName));
41
42
43
PathToUnindexedFieldType ptuftSubject
=
new
PathToUnindexedFieldType();
44
ptuftSubject.FieldURI
=
UnindexedFieldURIType.itemSubject;
45
46
PathToUnindexedFieldType ptuftBody
=
new
PathToUnindexedFieldType();
47
ptuftBody.FieldURI
=
UnindexedFieldURIType.itemAttachments;
48
49
PathToExtendedFieldType pteftFlagStatus
=
new
PathToExtendedFieldType();
50
pteftFlagStatus.PropertyTag
=
"
0x1090
"
;
//
PR_FLAG_STATUS
51
pteftFlagStatus.PropertyType
=
MapiPropertyTypeType.Integer;
52
53
//
定义FindItemType对象,准备获取收件箱中的集合
54
FindItemType findItemRequest
=
new
FindItemType();
55
findItemRequest.Traversal
=
ItemQueryTraversalType.Shallow;
56
findItemRequest.ItemShape
=
new
ItemResponseShapeType();
57
findItemRequest.ItemShape.BaseShape
=
DefaultShapeNamesType.AllProperties;
58
59
60
findItemRequest.ParentFolderIds
=
new
FolderIdType[
1
];
61
findItemRequest.ParentFolderIds[
0
]
=
firmtInbox.Folders[
0
].FolderId;
62
63
//
获取邮件
64
FindItemResponseType firt
=
exchangeServer.FindItem(findItemRequest);
65
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
96
//
获得服务器的相应
97
GetItemResponseType getItemResponse
=
exchangeServer.GetItem(getItemRequest);
98
99
//
得到邮件体
100
ItemInfoResponseMessageType getItemResponseMessage
=
101
getItemResponse.ResponseMessages.Items[
0
]
as
102
ItemInfoResponseMessageType;
103
104
//
显示邮件正文
105
Console.WriteLine(
"
邮件格式:{0}
"
, getItemResponseMessage.Items.Items[
0
].Body.BodyType1);
106
Console.WriteLine(
string
.Format(
"
正文:{0}
"
, getItemResponseMessage.Items.Items[
0
].Body.Value));
107
108
//
获取当前邮件的附件集合
109
if
(getItemResponseMessage.Items.Items[
0
].HasAttachments)
110
{
111
AttachmentType[] attachments
=
getItemResponseMessage.Items.Items[
0
].Attachments;
112
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
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
143
//
删除当前邮件
144
DeleteItemType deleteItem
=
new
DeleteItemType();
145
deleteItem.ItemIds
=
new
BaseItemIdType[
1
];
146
147
//
将要删除邮件的ID,changekey赋值给ItemIdType对象
148
ItemIdType itemIDType
=
new
ItemIdType();
149
itemIDType.Id
=
it.ItemId.Id;
150
itemIDType.ChangeKey
=
it.ItemId.ChangeKey;
151
152
deleteItem.ItemIds[
0
]
=
itemIDType;
153
154
//
执行删除
155
DeleteItemResponseType deleteResponse
=
exchangeServer.DeleteItem(deleteItem);
156
157
//
删除成功
158
if
(deleteResponse.ResponseMessages.Items.Length
>
0
&&
deleteResponse.ResponseMessages.Items[
0
].ResponseClass
==
ResponseClassType.Success)
159
{
160
Console.WriteLine(
"
删除成功
"
);
161
}
162
163
}
164
}
165
166
}
167
}
有更新过博客了,这几个月比较忙,人也比较懒散,今天已经是八月份,新的一个月希望要换一个状态。今天要写的文章是我四月份写的一个功能,一直拖到现在才
发表。在企业内部我们一般都是使用微软的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
9
//
Create the CreateItem request.
10
CreateItemType createItemRequest
=
new
CreateItemType();
11
12
//
Specifiy how the created items are handled
13
//
如何处理邮件
14
createItemRequest.MessageDisposition
=
MessageDispositionType.SendAndSaveCopy;
15
createItemRequest.MessageDispositionSpecified
=
true
;
16
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
23
//
Create the array of items.
24
createItemRequest.Items
=
new
NonEmptyArrayOfAllItemsType();
25
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
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
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
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
}
抓取以及删除邮件:
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
7
//
建立信任连接
8
exchangeServer.Credentials
=
creds;
9
exchangeServer.Url
=
url;
10
11
//
定义邮件的收件箱
12
DistinguishedFolderIdType[] folderIDArray
=
new
DistinguishedFolderIdType[
1
];
13
folderIDArray[
0
]
=
new
DistinguishedFolderIdType();
14
folderIDArray[
0
].Id
=
DistinguishedFolderIdNameType.inbox;
15
16
PathToUnindexedFieldType ptuftDisplayName
=
new
PathToUnindexedFieldType();
17
ptuftDisplayName.FieldURI
=
UnindexedFieldURIType.folderDisplayName;
18
19
PathToExtendedFieldType pteftComment
=
new
PathToExtendedFieldType();
20
pteftComment.PropertyTag
=
"
0x3004
"
;
//
PR_COMMENT
21
pteftComment.PropertyType
=
MapiPropertyTypeType.String;
22
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
32
//
获取服务器中的文件夹的集合
33
GetFolderResponseType myFolder
=
exchangeServer.GetFolder(myfoldertype);
34
35
//
获取收件箱
36
FolderInfoResponseMessageType firmtInbox
=
37
(FolderInfoResponseMessageType)myFolder.ResponseMessages.Items[
0
];
38
39
//
显示收件箱
40
Console.WriteLine(
string
.Format(
"
got folder: {0}
"
, firmtInbox.Folders[
0
].DisplayName));
41
42
43
PathToUnindexedFieldType ptuftSubject
=
new
PathToUnindexedFieldType();
44
ptuftSubject.FieldURI
=
UnindexedFieldURIType.itemSubject;
45
46
PathToUnindexedFieldType ptuftBody
=
new
PathToUnindexedFieldType();
47
ptuftBody.FieldURI
=
UnindexedFieldURIType.itemAttachments;
48
49
PathToExtendedFieldType pteftFlagStatus
=
new
PathToExtendedFieldType();
50
pteftFlagStatus.PropertyTag
=
"
0x1090
"
;
//
PR_FLAG_STATUS
51
pteftFlagStatus.PropertyType
=
MapiPropertyTypeType.Integer;
52
53
//
定义FindItemType对象,准备获取收件箱中的集合
54
FindItemType findItemRequest
=
new
FindItemType();
55
findItemRequest.Traversal
=
ItemQueryTraversalType.Shallow;
56
findItemRequest.ItemShape
=
new
ItemResponseShapeType();
57
findItemRequest.ItemShape.BaseShape
=
DefaultShapeNamesType.AllProperties;
58
59
60
findItemRequest.ParentFolderIds
=
new
FolderIdType[
1
];
61
findItemRequest.ParentFolderIds[
0
]
=
firmtInbox.Folders[
0
].FolderId;
62
63
//
获取邮件
64
FindItemResponseType firt
=
exchangeServer.FindItem(findItemRequest);
65
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
96
//
获得服务器的相应
97
GetItemResponseType getItemResponse
=
exchangeServer.GetItem(getItemRequest);
98
99
//
得到邮件体
100
ItemInfoResponseMessageType getItemResponseMessage
=
101
getItemResponse.ResponseMessages.Items[
0
]
as
102
ItemInfoResponseMessageType;
103
104
//
显示邮件正文
105
Console.WriteLine(
"
邮件格式:{0}
"
, getItemResponseMessage.Items.Items[
0
].Body.BodyType1);
106
Console.WriteLine(
string
.Format(
"
正文:{0}
"
, getItemResponseMessage.Items.Items[
0
].Body.Value));
107
108
//
获取当前邮件的附件集合
109
if
(getItemResponseMessage.Items.Items[
0
].HasAttachments)
110
{
111
AttachmentType[] attachments
=
getItemResponseMessage.Items.Items[
0
].Attachments;
112
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
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
143
//
删除当前邮件
144
DeleteItemType deleteItem
=
new
DeleteItemType();
145
deleteItem.ItemIds
=
new
BaseItemIdType[
1
];
146
147
//
将要删除邮件的ID,changekey赋值给ItemIdType对象
148
ItemIdType itemIDType
=
new
ItemIdType();
149
itemIDType.Id
=
it.ItemId.Id;
150
itemIDType.ChangeKey
=
it.ItemId.ChangeKey;
151
152
deleteItem.ItemIds[
0
]
=
itemIDType;
153
154
//
执行删除
155
DeleteItemResponseType deleteResponse
=
exchangeServer.DeleteItem(deleteItem);
156
157
//
删除成功
158
if
(deleteResponse.ResponseMessages.Items.Length
>
0
&&
deleteResponse.ResponseMessages.Items[
0
].ResponseClass
==
ResponseClassType.Success)
159
{
160
Console.WriteLine(
"
删除成功
"
);
161
}
162
163
}
164
}
165
166
}
167
}
相关文章推荐
- .NET中使用Exchange 2007 Webservice来读取邮件
- [转] .NET中使用Exchange 2007 Webservice来读取邮件
- .NET中使用Exchange 2007 Webservice来读取邮件
- .NET中使用Exchange 2007 Webservice来读取邮件
- 使用 EWS(Exchange Web Service)协议读取邮件、发送邮件
- 使用Exchange 2007搭建多域名邮件系统
- 使用Exchange 2007搭建多域名邮件系统
- 使用Exchange 2007搭建多域名邮件系统
- 使用Exchange 2007部署邮件记录管理
- exchange 2007 smtp发邮件正常,使用owa发送邮件失败,邮件自动保存到草稿箱
- 使用.NET读取exchange邮件
- 使用Exchange读取邮件、发送邮件
- 使用支持Pop3的邮箱给好友群发邮件. C# .Net 2.0 邮件发送 + XML 读取操作代码.
- C#使用 LumiSoft.Net.dll 通过IMAP 登陆QQ邮箱读取未读邮件
- 使用Exchange 2007搭建多域名邮件系统 推荐
- 使用Exchange 2007搭建多域名邮件系统
- 在asp.net中使用Powershell操作Exchange 2007(启用邮箱)
- python 使用exchange发送邮件
- ASP.NET读取POP3邮件的操作
- 在ASP.NET中使用SOAP Extensions捕获WebService异常