我有这个电子邮件服务器,我必须为我工作的公司的两个 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();
};
提前感谢所有读到这里的人。
:)