Zappa/AWS - 电子邮件不会发送并且只是超时

2024-01-10

目前,我已经为我的交易电子邮件提供商(Postmark)尝试了普通的 Django SMTP 和一些不同的基于 api 的 Django 库。

当我运行我的开发服务器时,一切都运行良好。通过 Postmark API 发送电子邮件没有任何问题。

当我使用 Zappa 部署到 AWS,访问我的网站,并执行一项应该发送电子邮件的任务(例如重置用户密码)时,页面会不断加载,直到显示Endpoint request timed out.

我尝试将 AWS Lambda 函数的超时设置为更长的持续时间,以防 Django 决定抛出错误。

这是引发的错误。请记住,此错误仅发生在生产中。我创建了一个自定义管理命令来检索此错误。

HTTPSConnectionPool(host='api.postmarkapp.com', port=443): Max retries exceeded with url: /email/batch (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f6cfbd5dd30>: Failed to establish a new connection: [Errno 110] Connection timed out',)): ConnectionError
Traceback (most recent call last):
  File "/var/task/handler.py", line 509, in lambda_handler
    return LambdaHandler.lambda_handler(event, context)
  File "/var/task/handler.py", line 240, in lambda_handler
    return handler.handler(event, context)
  File "/var/task/handler.py", line 376, in handler
    management.call_command(*event['manage'].split(' '))
  File "/var/task/django/core/management/__init__.py", line 131, in call_command
    return command.execute(*args, **defaults)
  File "/var/task/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/task/users/management/commands/sendemail.py", line 13, in handle
    fail_silently=False,
  File "/var/task/django/core/mail/__init__.py", line 62, in send_mail
    return mail.send()
  File "/var/task/django/core/mail/message.py", line 348, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/var/task/postmarker/django/backend.py", line 66, in send_messages
    responses = self.client.emails.send_batch(*prepared_messages, TrackOpens=self.get_option('TRACK_OPENS'))
  File "/var/task/postmarker/models/emails.py", line 332, in send_batch
    return self.EmailBatch(*emails).send(**extra)
  File "/var/task/postmarker/models/emails.py", line 247, in send
    responses = [self._manager._send_batch(*batch) for batch in chunks(emails, self.MAX_SIZE)]
  File "/var/task/postmarker/models/emails.py", line 247, in <listcomp>
    responses = [self._manager._send_batch(*batch) for batch in chunks(emails, self.MAX_SIZE)]
  File "/var/task/postmarker/models/emails.py", line 276, in _send_batch
    return self.call('POST', '/email/batch', data=emails)
  File "/var/task/postmarker/models/base.py", line 72, in call
    return self.client.call(*args, **kwargs)
  File "/var/task/postmarker/core.py", line 106, in call
    **kwargs
  File "/var/task/postmarker/core.py", line 129, in _call
    method, url, json=data, params=kwargs, headers=default_headers, timeout=self.timeout
  File "/var/task/requests/sessions.py", line 508, in request
    resp = self.send(prep, **send_kwargs)
  File "/var/task/requests/sessions.py", line 618, in send
    r = adapter.send(request, **kwargs)
  File "/var/task/requests/adapters.py", line 508, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.postmarkapp.com', port=443): Max retries exceeded with url: /email/batch (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f6cfbd5dd30>: Failed to establish a new connection: [Errno 110] Connection timed out',))

我已允许所有传入和传出流量进入我的 AWS 安全组,试图解决此问题。还是无济于事。

任何帮助将非常非常感谢。干杯。


解释很简单:在 VPC 中运行的 Lambda 实例无法访问互联网 http://docs.aws.amazon.com/lambda/latest/dg/vpc.html#vpc-configuring:

当您将 VPC 配置添加到 Lambda 函数时,它只能访问该 VPC 中的资源。如果 Lambda 函数需要同时访问 VPC 资源和公共 Internet,则 VPC 需要在 VPC 内部拥有网络地址转换 (NAT) 实例。

解决方案也很简单,虽然很烦人:运行NAT实例 http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html or NAT网关 http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html在专有网络中。 (另一种解决方案是将 Lambda 从 VPC 中取出,但这是一个更大的变化。)

我正在 Lambda 中运行 Django / Zappa,并使用 NAT 实例来连接到 Amazon Simple Email Service,并且工作正常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Zappa/AWS - 电子邮件不会发送并且只是超时 的相关文章

随机推荐

  • 如何使用python比较两个球点的大圆距离和欧氏距离?

    我试图检查当您使用欧几里德距离而不是使用大圆距离 gcd 计算地球上两点的距离时引入的错误 我有两个由纬度和经度定义的点 我使用了 python geopy 框架大圆距离 https github com geopy geopy blob
  • Unity Animator SetTrigger 未重置为默认值

    正如我希望正确理解动画器 SetTrigger 一旦完成就会将动画设置为 false 如果我错了请纠正我 但我的项目并非如此 我有两种状态 默认 不执行任何操作 和移动 打开应用程序时会自动输入默认值 并且当我调用 SetTrigger 时
  • 获取 GIF 图像的第一帧而不下载所有其他帧

    我想从网络上获取一张GIF图像 但我发现如果我下载整个GIF图像 会导致大量的网络流量 我可以只获取 GIF 图像的第一帧而不下载所有其他帧吗 9 年零 6 个月后 正是伸出援手的最佳时机 这可以使用 ImageMagick 使用以下命令来
  • 离子服务/离子运行不反映变化

    ionicserve 和 ionicrun 都没有反映我的任何最新更改 ionicserve 显示了几个小时前的情况 ionicrun 显示了大约一个小时后的情况 从那时起 我放弃了所有更改 并从父分支创建了一个新分支 但它仍然在第一个分支
  • 如何以守护进程模式运行 Django 服务器?

    我想在守护进程模式下运行 Django 开发服务器 这样当我退出 shell 时 服务器仍然会运行 我怎样才能做到这一点 除了 Bernhard 所说的之外 如果您计划将其用于生产环境 您应该使用 mod wsgi 在 apache 下运行
  • 当用户滚动到页面最底部时淡入/淡出固定位置 div

    这看起来相当简单 但我试图让固定位置的页脚 div 在用户滚动到网页最底部时滑动并淡入 然后在用户向上滚动时滑动并淡出 我搜索了 Stack Overflow 其他人提出了建议的解决方案 但我的代码导致我的 div 只能滑动和淡入 当用户向
  • 我的数据库没有更新,如果我的JSON数据也会增加

    我正在将 JSON 数据解析到数据库 该数据显示在我的 lisview 中 但是第一次它从我的 JSON 获取数据并将其存储在数据库中 如果我在网站中添加任何内容 它不会升级 json 也会增加 但不会增加反映在数据库中 数据库部分也没有升
  • Prism可以使用.NET Core内置的依赖注入吗?

    我想使用 NET Core 3 1 启动 WPF 应用程序Prism可以利用 Net Core的内置DI IServiceCollection 或者我必须使用Unity之类的东西吗 如果Prism不能使用内置DI 它们可以并存吗 Prism
  • 为什么编译器不能完全解决死代码检测问题?

    我在 C 或 Java 中使用的编译器具有死代码预防功能 当一行永远不会被执行时发出警告 我的教授说编译器永远无法完全解决这个问题 我想知道这是为什么 我不太熟悉编译器的实际编码 因为这是一个基于理论的课程 但我想知道他们检查什么 例如可能
  • 测试文件是否已下载 Selenium/C# (Google Chrome)

    我想单击下载文件的按钮on click 并测试是否已下载所需的文件 我已经用 google 搜索过这个问题 但不幸的是没有找到关于这个主题的任何具体答案 我发现的很多帖子都已经过时了 2014 年 我敢打赌 Selenium 现在肯定已经改
  • WSO2 API 管理器,无效。无法找到请求目标的有效认证路径

    我已经在本地启动了 WSO2 API Manager 我正在尝试添加 API 端点https联系 它向我展示了这种错误 它向我展示了Invalid unable to find valid certification path to req
  • C# 与 Excel 中的模数有何不同?

    我正在试验负基数系统 并使用 Excel 来处理和检查我的计算 我注意到 C 与 Excel 之间存在差异 为什么 C 返回的结果与 Excel 不同 例如 C 146 3 2 Excel mod 146 3 1 假设我们有四个整数 x y
  • string.replace(fromCharCode() , '') 无法替换字符

    当我解析 XML 时 它包含异常的十六进制字符 所以我尝试用空白来代替它 但这根本不起作用 原人物 hex code 253 255 code xmlData String replace String fromCharCode 253 2
  • 查找矩阵内的最大和子=矩形[重复]

    这个问题在这里已经有答案了 可能的重复 获取总和最大的子矩阵 https stackoverflow com questions 2643908 getting the submatrix with maximum sum 给定一个正整数和
  • 如何根据不同的URL参数和请求值写入不同的数据库?

    我正在尝试创建一个 REST API 它选择要写入的适当的 mongo 数据库以及正确的集合 如何选择与参数同名的数据库以及集合 即将推出的 v0 6 Eve 将原生支持多个 Mongo 实例 新功能 支持多个 MongoDB 数据库和 或
  • 如何在 Mac OS 上使用 homebrew 将 postgresql 从 10.1 降级到 9.6 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的 Mac 上装有 postgresql 10 1 我的工作网站需要 9 6 才能在本地计算机上运行 找不到有关如何卸载或降级到 9 6
  • 如何解决此错误 (GWT)

    运行我的应用程序后出现此错误 编译过程中没有出现错误 另外 没有其他应用程序在运行 在端口 8888 警告 上启动 Jetty 失败 电子邮件受保护 cdn cgi l email protection 8888 java net Bind
  • 如何在java中为游戏实现双缓冲?

    因此 在我正在开发的游戏中 我有一个弹珠跟随鼠标 但当它这样做时 屏幕会闪烁 背景包括两个 jpeg 和 9 个矩形 我该如何进行双缓冲呢 这是主窗口的代码 Write a description of class Window here
  • R:分割数字字符串

    我正在尝试拆分 40 位数字的数字字符串 即拆分123456789123456789123456789 into 1 2 3 4 etc 很遗憾strsplit不起作用 因为它需要字符 并使用转换字符串as character不起作用 因为
  • Zappa/AWS - 电子邮件不会发送并且只是超时

    目前 我已经为我的交易电子邮件提供商 Postmark 尝试了普通的 Django SMTP 和一些不同的基于 api 的 Django 库 当我运行我的开发服务器时 一切都运行良好 通过 Postmark API 发送电子邮件没有任何问题