javascript - 如何在 AWS Lambda 函数中连接 node-imap 模块
问题描述
我有这个电子邮件服务器,我必须为我工作的公司的两个 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();
};
提前感谢所有读到这里的人。
:)
解决方案
我有同样的问题,我意识到问题出在异步词上
exports.handler = async(event) => {
只需删除它
exports.handler = (event) => {
或以这种方式
exports.handler = function(event) {
对我来说完美无缺。
推荐阅读
- linux - hive log4j + 为什么在 /var/log/hive 下创建的日志不像 log4j 中定义的那样
- regex - 正则表达式匹配双引号括起来的值
- excel - 获取每月月底的库存余额
- dji-sdk - OnboardSDK:任务管理和 HomePoint 初始化
- android - 在 Play 商店中上传两个具有相同包和应用名称的 Apk
- ios - 从表视图中删除行
- python - 从显示错误的烧瓶表单数据中获取 sys.argv[] 值
- xamarin - How to hide status bar of splash screen in xamarin forms
- sql-server - IIS 错误'找不到存储过程'MyProcedure'
- php - php mongodb中的数组投影