使用 EWS(Exchange Web Service)协议读取邮件、发送邮件

问题:

公司之前可以通过POP3协议收发邮件,因而在SoapUI中用JavaMail可以读取邮件,后来配置了Office 365,POP3协议端口不再开放,邮件全部读取失败,报login timeout,需要改用EWS(Exchange Web Service)协议。

参考 : http://blog.csdn.net/yangcheng33/article/details/55049629

需要导入此JAR包 : ews-java-api-2.0.jar

import java.net.URI
import java.net.URISyntaxException

import microsoft.exchange.webservices.data.core.*
import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion
import microsoft.exchange.webservices.data.core.enumeration.property.*
import microsoft.exchange.webservices.data.core.enumeration.service.ConflictResolutionMode
import microsoft.exchange.webservices.data.core.service.item.Item
import microsoft.exchange.webservices.data.core.service.schema.AppointmentSchema
import microsoft.exchange.webservices.data.credential.*
import microsoft.exchange.webservices.data.property.complex.MessageBody
import microsoft.exchange.webservices.data.search.*

String contentSubject = "Regarding area"
String emailAddress = "[email protected]"
String password = "Autotest202010"
int maxEmailsGet = 5
String queryString = ""

ExchangeService service = getService(emailAddress, password);

FindItemsResults<Item> findItems = getEmails(maxEmailsGet, queryString, service);

// 迭代 邮件内容
for (Item mail : findItems) {
	String subject = mail.getSubject()
	//log.info "Email subject : "+subject

	MessageBody messageBody = mail.getBody()
	messageBody.setBodyType(BodyType.Text)

	def hasAttachment = mail.getHasAttachments()
	//log.info "Has attatchment ? :"+hasAttachment

	if(subject.contains(contentSubject)&&hasAttachment.equals(true)&&mail.getIsRead().equals(false)){
		assert true,"Check email pass"

		//置email为已读,并且同步到邮件服务器,这样无论以什么方式查看邮件,邮件都是已读状态
		mail.setIsRead(true)
	 	mail.update(ConflictResolutionMode.AlwaysOverwrite)
		break
	}

	else if(maxEmailsGet==1){
		assert false,"Check email fail"
	}

	maxEmailsGet--
}

// 读取 Inbox下的邮件
public static FindItemsResults<Item> getEmails(int maxEmailsGet, String queryString, ExchangeService service) throws Exception {
	// 默认读取 Inbox下的邮件,最大读取5封
	WellKnownFolderName folderName = WellKnownFolderName.Inbox;
	ItemView itemView = new ItemView(maxEmailsGet);
	FindItemsResults<Item> findItems = service.findItems(folderName, queryString, itemView);

	// 定义基础属性,此步骤必须要,否则会抛异常
	PropertySet detailedPropertySet = new PropertySet(BasePropertySet.FirstClassProperties, AppointmentSchema.Recurrence);
	service.loadPropertiesForItems(findItems, detailedPropertySet);
	return findItems;
}

// 连接服务器
public static ExchangeService getService(String emailAddress, String password) throws URISyntaxException {
	ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
	ExchangeCredentials credentials = new WebCredentials(emailAddress, password);
	service.setUrl(new URI("https://outlook.office365.com/EWS/Exchange.asmx"));
	service.setCredentials(credentials);
	return service;
}

  

时间: 2024-08-15 02:13:14

使用 EWS(Exchange Web Service)协议读取邮件、发送邮件的相关文章

C# Po3协议读取邮件内容遇到的问题

背景:最近在做一个小工具,读取PO3协议邮件服务器的指定人员的邮件,东西做出来了,弄了一个While死循环,20秒执行一次, 结果运行了3天,周一来IT人员找上门来了,你的电脑什么情况,怎么一个小时下载流量达到1个G多,而且都是PO3协议的,哈哈,哈哈 心理很想呵呵,但是还得如实跟他解释了一下情况,然后立刻把程序停止了. 接下来我就是找问题啦,最后找到了原因是因为我每次都是循环读取邮箱中的180条邮件,这180条中还有好多有几十兆附件的,哈哈 解决办法和问题原因: 问题就出现这循环读取以及读取过

Web Service和WCF的到底有什么区别

[1]Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互.WSDL来实现服务接口相关的描述.此外Web services 可以注册到UDDI中心.供其客户查找使用.  

面试题:Web Service与wcf的区别

Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互.WSDL来实现服务接口相关的描述.此外Web services 可以注册到UDDI中心.供其客户查找使用.     

Web Service和WCF的区别。其实二者不属于一个范畴!!!

Web Service和WCF的区别 [1]Web Service:严格来说是行业标准,也就是Web Service 规范. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展标记语言来表示数据(这个是跨语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互.WSDL来实现服务接口相关的描述.此外Web services 可以注册到UDDI中心.供其客户查找使用.     

从WEB SERVICE 上返回大数据量的DATASET

原文链接:http://www.cnblogs.com/flyskywlh/archive/2005/08/18/217382.html 前段时间在做一个项目的时候,遇到了要通过WEB SERVICE从服务器上返回数据量比较大的DATASET,当然,除了显示在页面上以外,有可能还要用这些数据在客户端进行其它操作.查遍了网站的文章,问了一些朋友,也找了一些解决方法.        众所周知,如果不用其它方法,直接从WEB SERVICE上传回一个10W条记录的DATASET,可想而知的后果是什么,

如何用纯文本方式(XML)+HTTP协议调用Workday的web service?

我们知道,Workday系统本身很复杂,其发布的web服务(web service)也很多,而且其中的Web 服务(web service)中定义的Schema也很复杂.如果用AXIS或者XFire生成存根代码调用其相应模块的web service,比如Human Resource模块,也可以,但是生成的存根代码比较复杂,而且Workday的web服务本身也在不断的升级过程中,在升级的过程中,其Schema的信息也在不断变化和调整过程中,那么有没有一种以不变应万变的方式,答案是肯定的.那就是通过

转-Web Service中三种发送接受协议SOA、http get、http post

原文链接:web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 一.web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 在web服务中,有三种可供选择的发送和接受信息的协议:SOAP,HTTP GET,HTTP POST,但是SOAP支持的数据类型更为广泛 SOAP=RPC+HTTP+XML SOAP简单的理解,就是这样的一个开放协议SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议:RPC作为一致性的调用途径,XML作为数据传送的格式

Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法

1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ (命名空间)进行反序列化时出错: InnerException 消息是“反序列化对象异常,读取 XML 数据时,超出最大字符串内容长度配额 (8192).通过更改在创建 XML 读取器时所使用的 XmlDictionaryRea

Web Service笔记(三):wsdl 与 soap协议详解

注:1.结合Web Service笔记(二):利用CXF开发Web Service 一.WSDL语言:(web service definition language - web service定义语言) (一)简介: 1.wsdl 是全完基于xml 的,特别是xml schema.详见: XML学习笔记(三):XML规范:Schema详解. 2.wsdl 文档描述了 ws 主要的3个方面: 1)WHATA:该 ws 包含"什么"操作,即有几个方法. 2)HOW:该 ws 的操作应该&