很久没有更新过博客了,这几个月比较忙,人也比较懒散,今天已经是八月份,新的一个月希望要换一个状态。今天要写的文章是我四月份写的一个功能,一直拖到现在才发表。在企业内部我们一般都是使用微软的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 下面就是具体的代码,具体的请看注释:
发送邮件:
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