首页 > 解决方案 > 无法在通过 Zappa(lambda) 托管的 django 应用程序上通过 SES 发送电子邮件

问题描述

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

设置.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,但是在我配置公共/私有 vpc 向导后,它向我显示了同样的错误。

不知道我做错了什么。任何帮助,将不胜感激。

标签: amazon-web-servicesaws-lambdaamazon-seszappaamazon-simple-email-service

解决方案


这篇AWS 博客文章可能会为您解决问题。

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

您必须通过为 SMTP 和 SMTPS 添加规则来编辑安全组的入站规则。完成此操作后,您将创建一个端点,附加已编辑的安全组,一旦端点可用,它就应该从那里开始工作。


推荐阅读