Java使用EWS读取exchange邮件和会议信息

2 篇文章 0 订阅

一、依赖的包

commons-codec-1.11.jar

commons-lang3-3.9.jar

commons-logging-1.2.jar

ews-java-api-2.0.jar

httpclient-4.5.10.jar

httpcore-4.4.12.jar

jcifs-2.1.11.jar

joda-time-2.4.jar

 

二、代码

package xxx;

import java.net.URI;
import java.util.ArrayList;
import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
import microsoft.exchange.webservices.data.core.enumeration.property.WellKnownFolderName;
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.credential.ExchangeCredentials;
import microsoft.exchange.webservices.data.credential.WebCredentials;
import microsoft.exchange.webservices.data.search.FindItemsResults;
import microsoft.exchange.webservices.data.search.ItemView;

public class EWSLoad {

	public static void main(String[] args)throws Exception {
		ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
              //登录的账号和密码,账号一定是可以登录进去的账号,不一定是邮箱地址
	      ExchangeCredentials credentials = new WebCredentials("emailAddress", "password", "域");
	      service.setCredentials(credentials);
	      service.setUrl(new URI("https://serverHost /ews/exchange.asmx"));
	      // Bind to the Inbox.
	      Folder inbox = Folder.bind(service, WellKnownFolderName.Inbox);
	      System.out.println(inbox.getDisplayName());
	      ItemView view = new ItemView(10);
	       // 查询
	    FindItemsResults<Item> findResults = service.findItems(inbox.getId(), view);
	    ArrayList<Item> items = findResults.getItems();
	       for(int i=0;i<items.size();i++){
	           EmailMessage message = EmailMessage.bind(service, items.get(i).getId());
	                    message.load();
	        System.out.println(message.getSender());
	        System.out.println("邮件主题 -->" +items.get(i).getSubject());
	        System.out.println("接收方:"+message.getReceivedBy());
	        System.out.println("抄送方:"+message.getCcRecipients());
	        System.out.println("发送:"+message.getSender());
	        System.out.println("发送人:"+message.getFrom());
	        System.out.println("接收时间:"+items.get(i).getDateTimeReceived());
	        System.out.println("是否已读:"+message.getIsRead());
	        System.out.println("邮件内容:"+getContentFromHtml(message.getBody().toString()));
	        System.out.println("邮件ID:"+items.get(i).getId());
	      }
               // 查询会议信息
               getAppoinement(service,"adc@456.com");
               // 新建一条会议信息
	       saveAppoinement(service);
	}
	
	// 获取会议信息
	public static void getAppoinement(ExchangeService service,String emailAddress) throws Exception{
		Date start = new Date();
		Date end = new Date(start.getTime() + 1000*3600*24);
		 
		CalendarView cView = new CalendarView(start, end);
		//指定要查看的邮箱
		FolderId folderId = new FolderId(WellKnownFolderName.Calendar, new Mailbox(emailAddress));
		FindItemsResults<Appointment> findResults = null;
		try {
		    findResults = service.findAppointments(folderId, cView);
		} catch (Exception e) {
		    e.printStackTrace();
		}
		ArrayList<Appointment> appointmentItems = findResults==null?null:findResults.getItems();
		
		for(Appointment ap:appointmentItems){
			  ap.load();
			  String subject = ap.getSubject();
			  //如邮箱主题以“已取消”开头,说明该会议已经被取消
			  if(subject.startsWith("已取消")){
				  continue;
			  }
			  //得到HTML格式的内容,通过工具类提取body标签的内容
			  String html_body = ap.getBody().toString();
			  String body = getContentFromHtml(html_body);
			  System.out.println(body);
			  //会议的开始和结束时间
			  Date start1 = ap.getStart();
			  Date end1 = ap.getEnd();
			  
			  //会议使用的资源
			  List<Attendee> resources = ap.getResources().getItems();
			  
			  //参加会议的员工
			  List<Attendee> RequiredAttendees = ap.getRequiredAttendees().getItems();
			  List<Attendee> OptionalAttendees = ap.getOptionalAttendees().getItems();
			}
    }
	
	// 向 Exchange 发送一条会议邮件
	public static void saveAppoinement(ExchangeService service) throws Exception{
		Appointment appointment = null;
		try {
			appointment = new Appointment(service);
			appointment.setSubject("会议主题");
			appointment.setBody(MessageBody.getMessageBodyFromText("会议消息体"));
		 
			appointment.setStart(new Date());
			appointment.setEnd(new Date());
		 
			appointment.setLocation("会议位置");
			appointment.getResources().add("会议资源账号,如:meetingroom@company.com");
			// 必须参加的员工的账号
			appointment.getRequiredAttendees().add("abc@456.com");
			// 可选参加的员工的账号
			appointment.getOptionalAttendees().add("abc@456.com");
			
			appointment.save();
			appointment.update(ConflictResolutionMode.AutoResolve);
			System.out.println("会议创建成功");
		} catch (Exception e) {
			e.printStackTrace();
		}
    }

	// 从HTML提取body信息
	public static String getContentFromHtml(String content){
        content = content.replaceAll("</?[^>]+>", ""); //剔出<html>的标签
        content = content.replaceAll("<a>\\s*|\t|\r|\n</a>", "");
        content = content.replaceAll("&nbsp;", "");
        content = content.replaceAll("\n", "");
	        return content;
	}

}

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值