SoapUI中读取Office365邮件
阅读原文时间:2023年07月12日阅读:2

常见邮件服务一般使用IMAP邮件访问协议,如果你所在公司更换到Office 365则需要另一个组件。

Office 365使用的是Exchange Server电子邮件服务组件,需要微软的Jar包来支持。

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  

}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器