SoapUI中讀取Office365郵件

常見郵件服務通常使用IMAP郵件訪問協議,若是你所在公司更換到Office 365則須要另外一個組件。java

Office 365使用的是Exchange Server電子郵件服務組件,須要微軟的Jar包來支持。web

  • 經過Maven下載ews-java-api-2.0.jar
  • 下載地址http://mvnrepository.com/artifact/com.microsoft.ews-java-api/ews-java-api
  • 在Groovy腳本中調用便可(可參考下面示例腳本)
package GroovyScript

import java.util.Date
import microsoft.exchange.webservices.data.core.enumeration.property.BodyType
import microsoft.exchange.webservices.data.core.service.item.Item
import microsoft.exchange.webservices.data.property.complex.MessageBody
import microsoft.exchange.webservices.data.search.FindItemsResults
import microsoft.exchange.webservices.data.core.enumeration.service.ConflictResolutionMode

int executeCount = 0 // 執行次數
int executeMax = 30 // 最大執行次數 同時也是最大執行時間
boolean checkIt = false // 是否找到須要的郵件

String emailAddress = context.expand( '${#Project#resetPWD_Email}' ) // 郵箱
String password = context.expand( '${#Project#resetPWD_OriginalPWD}' ) // 密碼
int maxEmailsGet = 5 // 最大郵件獲取數
String queryString = "Regarding area" // 篩選條件

while (executeCount < executeMax){

	ReadEmail readEmail = new ReadEmail() 
	FindItemsResults getEmails = readEmail.getEmails(emailAddress, password, maxEmailsGet, "") // 鏈接郵箱 拿郵件

	if (hasFound(getEmails, queryString)){
		checkIt = true
		break
	} else{
		Thread.sleep(1000)
		executeCount += 1
		log.info  "---ExecuteCount: $executeCount"
		continue
	}
}

assert checkIt, "Can not get the FeedBack email"


// ----------------------------判斷是否成功----------只針對此step------------------------------------------------------
def boolean hasFound(FindItemsResults getEmails, String queryString){

	boolean hasFound = false
	// 迭代 郵件內容
	for (Item email : getEmails) {
		
		Date date = new Date() // 時間對象
		def currentTime = date.getTime() // 當前時間
		def lastEmailTime = email.getDateTimeReceived().getTime() // 此封郵件收取時間
		def interval = currentTime - lastEmailTime // 時間間隔
		def subject = email.getSubject() // 郵件標題
		boolean hasAttachment = email.getHasAttachments() // 是否存在附件
		def body = email.getBody() // 郵件內容
		
		if ( interval < 30000 && subject.contains(queryString) && hasAttachment && email.getIsRead().equals(false)){ // 30秒之內的郵件有效
			hasFound =  true

			//置email爲已讀,而且同步到郵件服務器,這樣不管以什麼方式查看郵件,郵件都是已讀狀態
			email.setIsRead(true)
	 		email.update(ConflictResolutionMode.AlwaysOverwrite)
			
			break
		} else {
			continue
		}
	}
	return hasFound
}
相關文章
相關標籤/搜索