Django-SES BotoServerError: 403 Запрещено - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь отправить электронное письмо из django с библиотекой django-ses, но получаю ошибку:

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>

Я проверил домен и подтвердил адрес администратора admin@...com адрес в консоли AWS и создал ключ APIи секрет из панели SES.

Настройки 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()

В чем может быть проблема?

1 Ответ

1 голос
/ 10 мая 2019

Вы совершаете вызов через API (отправлять или отправлять почту), а не 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')

Ключ доступа и секретный ключ здесь должны быть пользовательскими ключами IAM, имеющими доступ к SES. Чтобы сделать Sendemail или Sendrawemail Call, вам нужно использовать / создать пользователя IAM из консоли IAM и использовать эти учетные данные, убедитесь, что у пользователя есть политика, разрешающая доступ к SES.

Если вы получаете ключи с консоли SES, они работают только для SMTP.

Учетные данные SMTP и общие IAM различаются, но вы можете преобразовать их, см. Ссылку ниже:

https://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html

...