无法在通过 Zappa (lambda) 托管的 django 应用程序上通过 SES 发送电子邮件

Unable to send emails via SES on django app hosted through Zappa(lambda)

所以我使用 zappa 在 lambda 上托管了我的网站。我正在使用 django-amazon-ses 在提交表单后发送电子邮件。

settings.py

AWS_ACCESS_KEY_ID = os.environ.get("AWS_ACCESS_KEY_ID", "my access key")
AWS_SECRET_ACCESS_KEY = os.environ.get("AWS_SECRET_ACCESS_KEY", "my secret key")
DEFAULT_FROM_EMAIL = 'xxxx@xxx.xx'
EMAIL_BACKEND = 'django_amazon_ses.EmailBackend'
AWS_SES_REGION = 'ap-south-1'
AWS_SES_REGION_ENDPOINT = 'email-smtp.ap-south-1.amazonaws.com'

查看

@csrf_exempt
def formSubmit(request):
    if request.method == 'POST':
        var = json.loads(request.body)
        name = var['name1']
        email = var['email1']
        company = var['company1']
        description = var['description1']
        send_mail('subject',
                  'msg',
                  'xxxx@xxx.xx',
                  [email])
        send_mail('subject',
                  'msg',
                  'xxxx@xxx.xx',
                  ['toemail@gmail.com'])
    return JsonResponse({'result': 'done'})

现在这在我的本地主机上工作正常,但是,当我尝试在线进行时,它在提交时显示以下错误。

ClientError at /submit/
An error occurred (InvalidClientTokenId) when calling the SendRawEmail operation: The security token included in the request is invalid.

起初,我以为是因为我没有使用 lambda 函数配置 vpc,但是在我配置了 public/private vpc 向导后它向我显示了同样的错误。

不确定我做错了什么。任何帮助将不胜感激。

AWS blog post 可以为您解决问题。

基本上 AWS 现在允许您通过 VPC 端点连接到 SES,这意味着您不再需要使用互联网网关或 NAT 设备。

您必须通过为 SMTP 和 SMTPS 添加规则来编辑安全组的入站规则。一旦你这样做了,你就创建了一个端点,附加了编辑的安全组,一旦端点可用,它就应该从那里开始工作。