常見郵件服務通常使用IMAP郵件訪問協議,若是你所在公司更換到Office 365則須要另外一個組件。java
Office 365使用的是Exchange Server電子郵件服務組件,須要微軟的Jar包來支持。web
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 }