SoapUI中读取Office365邮件
常见邮件服务一般使用IMAP邮件访问协议,如果你所在公司更换到Office 365则需要另一个组件。
Office 365使用的是Exchange Server电子邮件服务组件,需要微软的Jar包来支持。
- 通过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 }