Электронное письмо для сброса пароля Django, подписанное с помощью DomainKey с Amazon SES

Приложение, с которым я пытаюсь поэкспериментировать, позволяет пользователям сбрасывать свой пароль с помощью встроенного PasswordResetForm djangos, в настоящее время я переопределяю его, чтобы иметь возможность отправлять электронные письма в формате HTML с помощью EmailMultiAlternatives.

Как это выглядит и работает на данный момент.

c ={'name':'Shabeer'}
subject = 'Test Amazon SES'
txt_content = loader.render_to_string('registration/password_reset_email.txt', c)
html_content = loader.render_to_string(email_template_name, c)

msg = EmailMultiAlternatives(subject, txt_content, from_email, [user.email]);            
msg.attach_alternative(html_content, 'text/html')
msg.send()

Итак, теперь я начал с этого примера Getting started от hmarr , вот код, который я добавил в свой settings.py

EMAIL_BACKEND = 'django_ses.SESBackend'

DEFAULT_FROM_EMAIL = '[email protected]'

AWS_ACCESS_KEY_ID = 'MyAcCeSsKeYiD'
AWS_SECRET_ACCESS_KEY = 'MySeCrEtAcCeSsKeY'
AWS_SES_REGION_NAME = 'us-east-1'
AWS_SES_REGION_ENDPOINT = 'email.us-east-1.amazonaws.com'
AWS_SES_RETURN_PATH = '[email protected]'

И электронные письма успешно отправляются пользователям через amazon SES.


Итак, вот моя проблема.

Я пытаюсь не видеть "via" followed by a domain name next to the sender's name.

Для этого я начал следовать следующему шагу DKIM руководства. :

  1. Добавлены настройки DKIM для моего домена, созданного Amazon SES.
  2. Добавлено следующее в settings.py

DKIM_DOMAIN = 'myDomainName.com'`

  1. Загружено openssl-for windows и следовал командам

    • openssl genrsa -out myDomainName.com.key 512
    • openssl rsa -in myDomainName.com.key -out rsa.public -pubout -outform PEM

      Были созданы два файла: myDomainName.com.key и rsa.public< /сильный>
  2. #P10# <блочная цитата> #P11#
  3. #P12# <блочная цитата> #P13#

Сделав все вышеперечисленное, я запускаю свой проект и пытаюсь сбросить пароль, и возникает эта ошибка:

Exception Type: KeyFormatError at /password_reset/
Exception Value: Private key not found

Я пытаюсь понять, что я пропустил или ошибся, некоторые советы/помощь в том, как я мог бы решить эту проблему, были бы очень полезны.

Я новичок в Django/Python, поэтому, пожалуйста, потерпите меня.

Заранее спасибо.

ОБНОВЛЕНИЕ 28 октября 2013 г.:

Я все еще пытаюсь выяснить, что ищет Private Key django, в то время как я уже добавил DKIM_PRIVATE_KEY в свой settings.py


ОБНОВЛЕНИЕ 29 октября 2013 г.:

  • С помощью Пол Иган Я обновил свой DKIM_PRIVATE_KEY в своем settings.py, чтобы включить PEM header, теперь он выглядит так:

    DKIM_PRIVATE_KEY = '''
    -----BEGIN RSA PRIVATE KEY-----
    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    -----END RSA PRIVATE KEY----- '''

Теперь электронные письма отправляются без каких-либо ошибок, но в полученном электронном письме по-прежнему отображается via amazonses.com


person shabeer90    schedule 25.10.2013    source источник
comment
Ребят есть идеи как это побороть?   -  person shabeer90    schedule 28.10.2013


Ответы (1)


Ошибка Private key not found возникает из parse_pem_private_key . Это говорит о том, что ваша настройка не включает заголовки PEM. Дважды проверьте, что это выглядит примерно так:

DKIM_PRIVATE_KEY = '''
-----BEGIN RSA PRIVATE KEY-----
xxxxxxxxxxx
-----END RSA PRIVATE KEY-----
'''

Есть еще один вариант, который вы также можете рассмотреть. В прошлом году AWS добавила поддержку добавления подписи DKIM на своей стороне: http://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html. Вам может показаться, что это проще настроить, и у него есть дополнительное преимущество, заключающееся в том, что закрытый ключ не находится в исходном коде.

person Paul Egan    schedule 29.10.2013
comment
Спасибо за ответ, я добавил заголовок PEM, и электронное письмо отправляется без ошибок, но все равно показывает via amazonses.com. И я настроил Easy DKIM, он скрывает via amazonses.com только при отправке тестового письма. Ничего не происходит при отправке через django. - person shabeer90; 29.10.2013
comment
Проверьте заголовки в полученном электронном письме, в частности DKIM-Signature. Там должно быть указано, что могло пойти не так — возможно, несоответствие с ключом, опубликованным через DNS. (В веб-клиенте Gmail используйте меню «Дополнительно» и выберите «Показать оригинал»). - person Paul Egan; 29.10.2013
comment
Если вы используете простой вариант DKIM в SES, вам не нужно указывать конфигурацию DKIM для Django. Подпись будет применена после того, как сообщение будет отправлено из Django в SES. Убедитесь, что подписание DKIM включено для адреса электронной почты, который вы используете в качестве отправителя в Django (или включено для всего домена), и что статус подтвержден. - person Paul Egan; 29.10.2013
comment
Хотя мой домен был подтвержден, адрес электронной почты, который я использовал для отправки электронных писем, не был подтвержден, электронная почта использовала другой домен. Спасибо, что обратили на это мое внимание. Поскольку домен был настроен с Easy DKIM, я удалил настройки DKIM из settings.py. Работает отлично. Спасибо. - person shabeer90; 29.10.2013
comment
Мне нужно ждать 20 часов, чтобы присудить тебе награду, так что держись, приятель :) - person shabeer90; 29.10.2013