无法在通过Zappalambda托管的Django应用上通过SES发送电子邮件

问题描述

所以我已经使用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',['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向导后,它向我显示了相同的错误

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

解决方法

这个 AWS blog post 可能会为您解决问题。

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

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