【问题标题】:How to get the newest email with mail-listener2如何使用 mail-listener2 获取最新的电子邮件
【发布时间】:2017-01-04 01:14:23
【问题描述】:

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

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

然而,getLastEmail() 返回的是旧邮件,而不是邮件监听器 2 启动后收到的邮件。它返回第一封 UNSEEN 电子邮件。

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

有没有人有配置解决方案或自定义解决方案可以帮助解决这个问题?

【问题讨论】:

    标签: email protractor


    【解决方案1】:

    我认为这可能会对您有所帮助,我使用您关注的同一帖子实现了 mail-listener2,它对我来说非常有用。我只是添加了一些额外的参数:

    在我的配置onPrepare 下,我创建了一个日期:

    var emailDate = new Date().getTime();

    然后在我的mailListener下初始化:

        var mailListener = new MailListener({
            username: ...
            password: ...
            ...
            searchFilter: ["NEW", "UNSEEN", ["SINCE", emailDate]]
        });
    

    这应该将 mailListener 配置为仅查找在 emailDate 时间之后发送的电子邮件,emailDate 是在您的测试开始时创建的。您还可以指定确切的日期,即['SINCE', 'May 20, 2010']

    有关node-imap 文档(mailListener2 使用)的更多信息

    【讨论】:

    • 谢谢!这行得通,正是我所需要的。该链接也非常有用。
    • 我正在使用 nightwatch 进行 e2e 测试。我不知道如何在守夜人中使用这个邮件监听器。因为我在守夜人中没有准备功能。你能分享 getLastEmail() 吗?让我有一些想法
    【解决方案2】:

    我在 mailListener 配置的 conf 文件中有这个配置:

    markSeen: true,
    

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

    【讨论】:

      【解决方案3】:

      在我的情况下,由于服务器时间与 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;
      }
      

      这对我有用。

      【讨论】:

        猜你喜欢
        • 2018-08-17
        • 2010-11-19
        • 2018-03-14
        • 1970-01-01
        • 2016-08-07
        • 2020-09-28
        • 1970-01-01
        • 2019-09-13
        • 2017-11-20
        相关资源
        最近更新 更多