使用 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 = "auto.tester@zhang.com"
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;
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM