Django-SES BotoServerError: 403 Forbidden
Django-SES BotoServerError: 403 Forbidden
我正在尝试使用 django-ses
库从 django
发送电子邮件,但出现错误:
boto.exception.BotoServerError: BotoServerError: 403 Forbidden
<ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
<Error>
<Type>Sender</Type>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message>
</Error>
<RequestId>7e2103e0-729f-11a9-aq25-51a2dqa8ae97</RequestId>
</ErrorResponse>
我在 AWS 控制台中验证了域和管理员地址 admin@...com
地址,并从 SES 仪表板创建了 API 密钥和密码。
Django 设置:
EMAIL_BACKEND = 'django_ses.SESBackend'
AWS_SES_ACCESS_KEY_ID = os.environ.get('AWS_SES_ACCESS_KEY_ID')
AWS_SES_SECRET_ACCESS_KEY = os.environ.get('AWS_SES_SECRET_ACCESS_KEY')
AWS_SES_REGION_NAME = 'eu-west-1' # because I use ireland server, but same error without this
SERVER_EMAIL = 'admin@...com'
DEFAULT_FROM_EMAIL = '"Hello You" <no-reply@...com>'
我尝试发送电子邮件:
from django.core.mail import EmailMessage
from django.conf import settings
email = EmailMessage(
'Hello',
'World',
settings.DEFAULT_FROM_EMAIL,
to=['mail@example.com']
)
email.send()
这里有什么问题?
您正在通过 API(sendemail 或 sendrawemail)而不是 SMTP 进行呼叫。
AWS_SES_ACCESS_KEY_ID = os.environ.get('AWS_SES_ACCESS_KEY_ID')
AWS_SES_SECRET_ACCESS_KEY = os.environ.get('AWS_SES_SECRET_ACCESS_KEY')
这里的Access key和secret key应该是可以访问SES的IAM用户密钥。
要进行 sendemail 或 sendrawemail 调用,您需要从 IAM 控制台 use/create 一个 IAM 用户并使用这些凭据,确保该用户具有允许访问 SES 的策略。
如果您从 SES 控制台获取密钥,这些密钥仅适用于 SMTP。
SMTP 和一般 IAM 凭据不同,但您可以转换它们,参考下面 link:
https://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html
我正在尝试使用 django-ses
库从 django
发送电子邮件,但出现错误:
boto.exception.BotoServerError: BotoServerError: 403 Forbidden
<ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
<Error>
<Type>Sender</Type>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message>
</Error>
<RequestId>7e2103e0-729f-11a9-aq25-51a2dqa8ae97</RequestId>
</ErrorResponse>
我在 AWS 控制台中验证了域和管理员地址 admin@...com
地址,并从 SES 仪表板创建了 API 密钥和密码。
Django 设置:
EMAIL_BACKEND = 'django_ses.SESBackend'
AWS_SES_ACCESS_KEY_ID = os.environ.get('AWS_SES_ACCESS_KEY_ID')
AWS_SES_SECRET_ACCESS_KEY = os.environ.get('AWS_SES_SECRET_ACCESS_KEY')
AWS_SES_REGION_NAME = 'eu-west-1' # because I use ireland server, but same error without this
SERVER_EMAIL = 'admin@...com'
DEFAULT_FROM_EMAIL = '"Hello You" <no-reply@...com>'
我尝试发送电子邮件:
from django.core.mail import EmailMessage
from django.conf import settings
email = EmailMessage(
'Hello',
'World',
settings.DEFAULT_FROM_EMAIL,
to=['mail@example.com']
)
email.send()
这里有什么问题?
您正在通过 API(sendemail 或 sendrawemail)而不是 SMTP 进行呼叫。
AWS_SES_ACCESS_KEY_ID = os.environ.get('AWS_SES_ACCESS_KEY_ID') AWS_SES_SECRET_ACCESS_KEY = os.environ.get('AWS_SES_SECRET_ACCESS_KEY')
这里的Access key和secret key应该是可以访问SES的IAM用户密钥。 要进行 sendemail 或 sendrawemail 调用,您需要从 IAM 控制台 use/create 一个 IAM 用户并使用这些凭据,确保该用户具有允许访问 SES 的策略。
如果您从 SES 控制台获取密钥,这些密钥仅适用于 SMTP。
SMTP 和一般 IAM 凭据不同,但您可以转换它们,参考下面 link:
https://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html