如何使用mail-listener2获取最新的电子邮件

时间:2017-01-04 01:14:24

标签: email protractor

我正在使用mail-listener2监控电子邮件帐户,检查电子邮件是否已作为测试的一部分收到。

我使用了此处定义的相同实现:此处:Fetching values from email in protractor test case

但是,getLastEmail()会返回旧电子邮件,而不是在mail-listener2启动后收到的电子邮件。它返回第一封UNSEEN电子邮件。

我看过是否可以使用不同的mail-listener2配置来解决这个问题,但我还没有找到任何东西。我还尝试在返回的邮件上使用.last(),但这也没有用。

有没有人有配置解决方案,或者有助于解决此问题的自定义解决方案?

3 个答案:

答案 0 :(得分:3)

我认为这可能会对你有所帮助,我使用你所遵循的同一篇文章实现了mail-listener2,这对我来说非常有用。我刚刚添加了一些额外的参数:

在我的配置import java.io.Serializable; public class Pair<F extends Serializable, S extends Serializable> implements Serializable { private static final long serialVersionUID = 1L; private F first; private S second; public Pair(F first, S second) { this.first = first; this.second = second; } public F getFirst() { return first; } public S getSecond() { return second; } public String toString() { return "First: " + this.first.toString() + " Second: " + this.second.toString(); } } 下,我创建了一个日期:

onPrepare

然后在我的var emailDate = new Date().getTime();初始化下:

mailListener

这应该将mailListener配置为仅查找在您的测试开始时创建的 var mailListener = new MailListener({ username: ... password: ... ... searchFilter: ["NEW", "UNSEEN", ["SINCE", emailDate]] }); 时间之后发送的电子邮件。您还可以指定确切的日期,即emailDate

有关node-imap文档(mailListener2使用的)

的更多信息

答案 1 :(得分:0)

我在mailListener配置的conf文件中具有以下配置:


GET 

https://graph.facebook.com/v8.0/' + mid + '?fields=message%2Cfrom%2Csticker%2Ctags%2Cid%2Cattachments.limit(10)%7Bid%2Cimage_data%2Cmime_type%2Cname%2Cfile_url%2Cvideo_data%7D&access_token=XXXXXX

每次阅读电子邮件时,该电子邮件都被标记为已读,下次将不会提取。这意味着您将始终阅读新电子邮件。

答案 2 :(得分:0)

在我的情况下,由于服务器时间与 gmail 服务器时间的差异,先前的答案还不够。所以一个完整的方法可能是:

    var currentDate =  new Date().toUTCString()
    
    var mailListener = new MailListener({
        ...
        markSeen: true,
        port: 993,
        tls: true,
        searchFilter: ["UNSEEN", ["SINCE", currentDate]]
    });

那么您的 getLastEmail 助手可能是:

getLastEmail = function () {
var deferred = protractor.promise.defer();
console.log("Waiting for an email...");
const hrs = new Date().getUTCHours()
const minutes = new Date().getUTCMinutes()
mailListener.on("mail", function(mail){
    if( hrs=== new Date().getUTCHours("mail.headers.date") &&
        minutes- new Date().getUTCMinutes("mail.headers.date") <=1 ) {
        deferred.fulfill(mail);
    }
});

return deferred.promise;
}

这对我有用。