gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:46:13 26 4
gpt4 key购买 nike

目前,我已经为我的交易电子邮件提供商 (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 实例 cannot access the internet :

When you add VPC configuration to a Lambda function, it can only access resources in that VPC. If a Lambda function needs to access both VPC resources and the public Internet, the VPC needs to have a Network Address Translation (NAT) instance inside the VPC.

解决方案也很简单,如果烦人:运行 NAT InstanceNAT Gateway在专有网络中。 (另一种解决方案是将您的 Lambda 从 VPC 中取出,但这是一个更大的变化。)

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

关于django - Zappa/AWS - 电子邮件不会发送,只是超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47360968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com