0

我有这个电子邮件服务器,我必须为我工作的公司的两个 Web 应用程序创建一个微服务,架构有点像这样:

  • Node 应用程序每 x 分钟通过客户电子邮件列表运行一次扫描,并检查是否有任何新电子邮件(这些客户的电子邮件可以有许多不同的域);
  • 如果该特定客户端有新电子邮件,它将调用 lambda 函数以连接到该特定电子邮件(使用 node-imap 模块,使用 imap 协议)并对未读电子邮件执行一些操作;
  • 我在我的本地主机上完成了所有工作,我可以在本地搜索所有电子邮件,并通过在我的机器上模拟 AWS Lambda 的执行来执行我需要的所有操作;
  • 问题是在实际处于“生产”状态时调用 Lambda(实际上是 AWS Lambda 中的 lambda 函数),即使一切正常(新 Imap 的参数都可以),它似乎也没有连接到电子邮件地址;
  • 我正在调用exports.handler(我使用一些console.logs检查)并且参数都很好(我已经硬编码它们只是为了确定);

这让我想到,也许 AWS Lambda 函数无法像我的机器一样连接到电子邮件提供商,也许我需要在 AWS 控制台上进行一些额外的调整;

有人对发生的事情有任何想法吗?我尝试通过谷歌搜索,但找不到任何相关内容。

我在我的 lambda 中使用 Node 和 node-imap 包连接到 imap 服务器并搜索未读消息。我的 lambda 代码:

const Imap = require('imap');

exports.handler = async(event) => {
    const payloadObj = event;

    const imap = new Imap({
        user: payloadObj.email,
        password: payloadObj.pwd,
        host: payloadObj.provider,
        port: 993,
        tls: true
    });
    
    imap.once('ready', function() {
        console.log('Connection stablished'); // never triggered
        imap.end();
    });
    
    imap.once('end', function() {
        console.log('Connection ended'); // never triggered
    });

    imap.connect();
};

提前感谢所有读到这里的人。

:)

4

1 回答 1

0

我有同样的问题,我意识到问题出在异步词上

exports.handler = async(event) => {

只需删除它

exports.handler = (event) => {

或以这种方式

exports.handler = function(event) {

对我来说完美无缺。

于 2021-07-29T23:54:43.163 回答