依赖包:

commons-httpclient-3.1.jar

commons-codec-1.10.jar

commons-logging-1.2.jar

jcifs-1.3.17.jar

代码示例:

创建MailBean类:

import java.util.Date;

public class MailBean {

public BigDecimal getId() {
return id;
} public void setId(BigDecimal id) {
this.id = id;
}
public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getFromPeople() {
return fromPeople;
} public void setFromPeople(String fromPeople) {
this.fromPeople = fromPeople;
} public String getReceivePeople() {
return receivePeople;
} public void setReceivePeople(String receivePeople) {
this.receivePeople = receivePeople;
} public Date getReceiveTime() {
return receiveTime;
} public void setReceiveTime(Date receiveTime) {
this.receiveTime = receiveTime;
} public String getReadUrl() {
return readUrl;
} public void setReadUrl(String readUrl) {
this.readUrl = readUrl;
} public int getIsRead() {
return isRead;
} public void setIsRead(int isRead) {
this.isRead = isRead;
} public String getMailId() {
return mailId;
} public void setMailId(String mailId) {
this.mailId = mailId;
} public MailBean() {
} public MailBean(BigDecimal id,String title, String fromPeople, String receivePeople, Date receiveTime, String mailId,
String readUrl, int isRead) {
this.id=id;
this.title = title;
this.fromPeople = fromPeople;
this.receivePeople = receivePeople;
this.receiveTime = receiveTime;
this.mailId = mailId;
this.readUrl = readUrl;
this.isRead = isRead;
} private BigDecimal id;
private String title;
private String mailId;
private String fromPeople;
private String receivePeople;
private Date receiveTime;
private String readUrl;
private int isRead;

}

创建ExchangeMailUtil工具类:

import java.net.URI;

import java.net.URISyntaxException;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import microsoft.exchange.webservices.data.core.ExchangeService;

import microsoft.exchange.webservices.data.core.PropertySet;

import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;

import microsoft.exchange.webservices.data.core.enumeration.property.BodyType;

import microsoft.exchange.webservices.data.core.enumeration.property.WellKnownFolderName;

import microsoft.exchange.webservices.data.core.enumeration.search.OffsetBasePoint;

import microsoft.exchange.webservices.data.core.enumeration.search.SortDirection;

import microsoft.exchange.webservices.data.core.service.folder.Folder;

import microsoft.exchange.webservices.data.core.service.item.EmailMessage;

import microsoft.exchange.webservices.data.core.service.item.Item;

import microsoft.exchange.webservices.data.core.service.schema.EmailMessageSchema;

import microsoft.exchange.webservices.data.core.service.schema.ItemSchema;

import microsoft.exchange.webservices.data.credential.ExchangeCredentials;

import microsoft.exchange.webservices.data.credential.WebCredentials;

import microsoft.exchange.webservices.data.property.complex.MessageBody;

import microsoft.exchange.webservices.data.search.FindItemsResults;

import microsoft.exchange.webservices.data.search.ItemView;

import microsoft.exchange.webservices.data.search.filter.SearchFilter;

/**

  • Exchange邮件服务工具类

*/

public class ExchangeMailUtil {

private String mailServer;
private String user;
private String password;
private String domain; // 自定义一个邮件前缀
private String readUrlPrefix; public ExchangeMailUtil() {
} public ExchangeMailUtil(String mailServer, String user, String password, String readUrlPrefix) {
this.mailServer = mailServer;
this.user = user;
this.password = password;
this.readUrlPrefix = readUrlPrefix;
} public List getUserUnReadMail() throws Exception {
// Outlook Web Access路径通常为/EWS/exchange.asmx
List list = new ArrayList<>();
// 接收邮件
// 原本的读取全部,改为读取“未读”
// ArrayList<EmailMessage> mails = this.receive(20);
// 不要停下来啊,我这里就写死20邮件了,做分页的交给你了(提示ItemView)
SearchFilter searchFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false);
ArrayList<EmailMessage> mails = this.receive(20, searchFilter);
for (EmailMessage mail : mails) {
if (mail.getIsRead())
continue;
String title = mail.getSubject(); Date receiveTime = mail.getDateTimeReceived(); String fromPeople = mail.getFrom().getName();
String receivePeople = mail.getReceivedBy().getName(); String id = mail.getRootItemId().toString();
int index = id.indexOf("AAAAA");
String readUrl = readUrlPrefix + id.substring(index + 2, id.length() - 1) + "A"; MailBean mailBean = new MailBean(null, title, fromPeople, receivePeople, receiveTime, id, readUrl, 0);
list.add(mailBean); }
return list;
} public List getUserUnReadMailPage(int start, int limit) throws Exception {
// Outlook Web Access路径通常为/EWS/exchange.asmx
List list = new ArrayList<>();
// 接收邮件
// ArrayList<EmailMessage> mails = this.receive(20);
// 原本的读取全部,改为读取“未读”
SearchFilter searchFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, true);
// 循环获取邮箱邮件
ItemView view = new ItemView(limit, (start - 1) * limit, OffsetBasePoint.Beginning);
// 按照时间顺序收取
view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Descending);
ArrayList<EmailMessage> mails = this.receive(20, searchFilter, view);
for (EmailMessage mail : mails) {
if (mail.getIsRead())
continue;
String title = mail.getSubject(); Date receiveTime = mail.getDateTimeReceived(); String fromPeople = mail.getFrom().getName();
String receivePeople = mail.getReceivedBy().getName(); String id = mail.getRootItemId().toString();
int index = id.indexOf("AAAAA");
String readUrl = readUrlPrefix + id.substring(index + 2, id.length() - 1) + "A"; MailBean mailBean = new MailBean(null, title, fromPeople, receivePeople, receiveTime, id, readUrl, 0);
list.add(mailBean); }
return list;
} /**
* 创建邮件服务
*
* @return 邮件服务
*/
public ExchangeService getExchangeService() { ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
// 用户认证信息
ExchangeCredentials credentials;
if (domain == null) {
credentials = new WebCredentials(user, password); } else {
credentials = new WebCredentials(user, password, domain);
}
service.setCredentials(credentials);
try {
service.setUrl(new URI(mailServer));
} catch (URISyntaxException e) {
e.printStackTrace();
}
return service;
} /**
* 收取邮件
*
* @param max
* 最大收取邮件数
* @param searchFilter
* 收取邮件过滤规则
* @return
* @throws Exception
*/
public ArrayList<EmailMessage> receive(int max, SearchFilter searchFilter) throws Exception {
ArrayList<EmailMessage> result = new ArrayList<>();
try {
System.out.println(user + "," + password + "," + mailServer);
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
ExchangeCredentials credentials = new WebCredentials(user, password); service.setCredentials(credentials);
service.setUrl(new URI(mailServer));
// 绑定收件箱,同样可以绑定发件箱
Folder inbox = Folder.bind(service, WellKnownFolderName.Inbox);
// 获取文件总数量
int count = inbox.getTotalCount();
// 没有邮件直接返回
if (count == 0)
return result;
if (max > 0) {
count = count > max ? max : count;
}
// 循环获取邮箱邮件
ItemView view = new ItemView(count);
// 按照时间顺序收取
view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Descending);
FindItemsResults<Item> findResults;
if (searchFilter == null) {
findResults = service.findItems(inbox.getId(), view);
} else {
findResults = service.findItems(inbox.getId(), searchFilter, view);
}
service.loadPropertiesForItems(findResults, PropertySet.FirstClassProperties); for (Item item : findResults.getItems()) {
EmailMessage message = (EmailMessage) item;
result.add(message);
} } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
throw e;
}
return result;
} /**
* 收取邮件
*
* @param max
* 最大收取邮件数
* @param searchFilter
* 收取邮件过滤规则
* @return
* @throws Exception
*/
public ArrayList<EmailMessage> receive(int max, SearchFilter searchFilter, ItemView itemView) throws Exception {
ArrayList<EmailMessage> result = new ArrayList<>();
try {
System.out.println(user + "," + password + "," + mailServer);
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
ExchangeCredentials credentials = new WebCredentials(user, password); service.setCredentials(credentials);
service.setUrl(new URI(mailServer));
// 绑定收件箱,同样可以绑定发件箱
Folder inbox = Folder.bind(service, WellKnownFolderName.Inbox);
// 获取文件总数量
int count = inbox.getTotalCount();
// 没有邮件直接返回
if (count == 0)
return result;
if (max > 0) {
count = count > max ? max : count;
}
/*
* // 循环获取邮箱邮件 ItemView view = new ItemView(count); // 按照时间顺序收取
* view.getOrderBy().add(ItemSchema.DateTimeReceived,
* SortDirection.Descending);
*/
FindItemsResults<Item> findResults;
if (searchFilter == null) {
findResults = service.findItems(inbox.getId(), itemView);
} else {
findResults = service.findItems(inbox.getId(), searchFilter, itemView);
}
if (findResults.isMoreAvailable())
service.loadPropertiesForItems(findResults, PropertySet.FirstClassProperties); for (Item item : findResults.getItems()) {
EmailMessage message = (EmailMessage) item;
result.add(message);
} } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
throw e;
}
return result;
} /**
* 收取所有邮件
*
* @throws Exception
*/
public ArrayList<EmailMessage> receive(int max) throws Exception {
return receive(max, null);
} /**
* 收取邮件
*
* @throws Exception
*/
public ArrayList<EmailMessage> receive() throws Exception {
return receive(0, null);
} /**
* 发送带附件的mail
*
* @param subject
* 邮件标题
* @param to
* 收件人列表
* @param cc
* 抄送人列表
* @param bodyText
* 邮件内容
* @param attachmentPaths
* 附件地址列表
* @throws Exception
*/
public void send(String subject, String[] to, String[] cc, String bodyText, String[] attachmentPaths)
throws Exception {
ExchangeService service = getExchangeService(); EmailMessage msg = new EmailMessage(service);
msg.setSubject(subject);
MessageBody body = MessageBody.getMessageBodyFromText(bodyText);
body.setBodyType(BodyType.HTML);
msg.setBody(body);
for (String toPerson : to) {
msg.getToRecipients().add(toPerson);
}
if (cc != null) {
for (String ccPerson : cc) {
msg.getCcRecipients().add(ccPerson);
}
}
if (attachmentPaths != null) {
for (String attachmentPath : attachmentPaths) {
msg.getAttachments().addFileAttachment(attachmentPath);
}
}
msg.send();
} /**
* 发送不带附件的mail
*
* @param subject
* 邮件标题
* @param to
* 收件人列表
* @param cc
* 抄送人列表
* @param bodyText
* 邮件内容
* @throws Exception
*/
public void send(String subject, String[] to, String[] cc, String bodyText) throws Exception {
send(subject, to, cc, bodyText, null);
} public int getUnreadCount() throws Exception {
int unreadCount = 0;
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
ExchangeCredentials credentials = new WebCredentials(user, password); service.setCredentials(credentials);
service.setUrl(new URI(mailServer));
// 绑定收件箱,同样可以绑定发件箱
Folder inbox = Folder.bind(service, WellKnownFolderName.Inbox);
unreadCount = inbox.getUnreadCount();
return unreadCount;
}

}

关于如何使用EWS JAVA API读取exchange邮件看下篇:

https://www.cnblogs.com/itczybk/articles/11012107.html

Java---使用EWS 写个ExchangeMailUtil的更多相关文章

  1. c++ c# java 调用 c++ 写的dll

    1. vs 中新建win32 dll 项目   testdll 添加实现文件       test.cpp #include "stdafx.h" #include <ios ...

  2. 对着java并发包写.net并发包之原子类型实现

    众所周知,java1.5并发包通过volatile+CAS原理提供了优雅的并发支持.今天仔细想想.net也有volatile关键字保证内存的可见性,同时也有Interlocked提供了CAS的API, ...

  3. Java自己动手写连接池四

    Java自己动手写连接池四 测试: package com.kama.cn; import java.sql.Connection; public class Test { public static ...

  4. Java自己动手写连接池三

    Java自己动手写连接池三,核心代码; package com.kama.cn; import java.sql.Connection;import java.util.ArrayList;impor ...

  5. Java将数据写进excel

    Java将数据写进excel Java将数据写进excel class User { private String name ; private String password; public Use ...

  6. 【转载】java调用C++写的DLL

    用java调用C++写的DLL一直以来都是一个比较麻烦但又很常见的问题. 我们知道,使用 JNI 调用 .dll/.so 共享类库是非常非常麻烦和痛苦的. 如果有一个现有的 .dll/.so 文件,如 ...

  7. JAVA一个文件写多个类

    JAVA一个文件写多个类,并且是同级类,需注意: 在一个.java文件中可以有多个同级类,  其修饰符只可以public/abstract/final/和无修饰符 public修饰的只能有一个,且必须 ...

  8. java 从零开始手写 RPC (03) 如何实现客户端调用服务端?

    说明 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 写完了客户端和服务端,那么如何实现客户端和服务端的 ...

  9. java 从零开始手写 RPC (04) -序列化

    序列化 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何实 ...

随机推荐

  1. NYOJ - 括号匹配(二)(经典dp)

    括号匹配(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:6 描写叙述 给你一个字符串,里面仅仅包括"(",")","[&quo ...

  2. framework7使用问题汇总

    framework7 是个非常漂亮的Html框架,最近有个微信公众号的项目使用到了这个,后期还可以封装成APP. 淘宝版和中文官网都是V1,V2只能看英文版的http://framework7.io/ ...

  3. arcserver开发小结(二)

    一.关于服务器上下文 1,服务器上下文(ServerContext)本质上是一个GIS服务器上的进程,它是服务器端编程的起点. 2,只有本地资源才能得到服务器上下文,通常得到服务器上下文的主线是: M ...

  4. Archlinux 下Intel + NVIDIA 双显卡3D 游戏配置(dota2@steam)

    下午打了几场dota2 感觉流畅度还算非常不错的,写点东西记录一下.用Archlinux 的一般来说都会用搜索引擎,所以仅仅说下须要注意的地方就可以. 1. steam 自带的OpenGL 库是过时的 ...

  5. libev整体设计

    转自:http://m.blog.csdn.NET/blog/weiqubo/16355653 libev是Marc Lehmann用C写的高性能事件循环库.通过libev,可以灵活地把各种事件组织管 ...

  6. Ubuntu 15.04 clang++ 3.6 编译boost 1.59/1.55

    Ubuntu 15.04已经可以直接通过apt-get insall 安装clang 3.6, 并且预装的gcc版本是4.9.2.这些安装过程在这里介绍. 首先下载boost源码 wget -O bo ...

  7. Angular语法(一)——展示数据

    双花括号{{}} 展示数据 title = 'Tour of Heroes'; myHero = 'Windstorm'; <h1>{{title}}</h1> <h2& ...

  8. C#异步委托等待句柄的使用

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  9. entity framework 封装基类

    /// <summary> /// 查询业务基实现 /// </summary> /// <typeparam name="T"></ty ...

  10. 关于阿里云centos7安装svn,客服端无法链接的问题

    阿里云的centos7的版本中,通过yum安装了subversion之后,svn客服端无法链接svn服务器. 首先确定服务器的安全组策略中的3690端口是否打开 然后确定svnserve配置是否正确, ...