Django重置使用DomainKey与Amazon SES签名的密码电子邮件

时间:2013-10-25 12:57:19

标签: python django amazon-web-services amazon-ses dkim

我尝试实验的应用程序允许用户使用内置PasswordResetForm的djangos重置密码,目前我正在重写它以便能够使用EmailMultiAlternatives发送HTML电子邮件。

它目前的外观和工作原理。

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()

所以现在我开始借助 hmarr 这个Getting started示例,这是我添加到settings.py

的代码
EMAIL_BACKEND = 'django_ses.SESBackend'

DEFAULT_FROM_EMAIL = 'shabeer@sheffa.com'

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 = 'shabeer@sheffa.com'

电子邮件通过亚马逊SES成功发送给用户。


所以现在这是我的问题

我试图避免看到"via" followed by a domain name next to the sender's name

为实现这一目标,我开始按照指南的下一步DKIM进行操作。 :

  1. 添加了由Amazon SES生成的域名的DKIM设置
  2. settings.py
  3. 中添加了以下内容
      

    DKIM_DOMAIN ='myDomainName.com'`

    1. 已下载openssl-for windows,并按照命令

      进行操作
        
          
      • openssl genrsa -out myDomainName.com.key 512
      •   
      • openssl rsa -in myDomainName.com.key -out rsa.public -poutout -outform PEM   

          创建了两个文件: myDomainName.com.key rsa.public
      •   
    2. 将DKIM_PRIVATE_KEY添加到settings.py

        

      DKIM_PRIVATE_KEY ='''   xxxxxxxxxxxxxxxxxxxxxxxxxx
        我的长私钥
        xxxxxxxxxxxxxxxxxxxxxxxxxx
        '''

    3. 添加了DNS条目

        

      ses._domainkey.myDomainName.com TXT'“v = DKIM1; p = myPublicKey”'

    4. 完成上述所有操作后,我运行我的项目并尝试重置密码,并抛出此错误:

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

      我试图理解我错过了什么或者出了什么问题,关于如何解决这个问题的一些建议/帮助真的很有帮助。

      我是Django / Python的新手,所以请耐心等待。

      提前谢谢你。

        

      2013年10月28日更新:

      我仍在尝试找出哪些 Private Key django正在寻找,而我已在{{1}中添加 DKIM_PRIVATE_KEY }


        

      2013年10月29日更新:

      • Paul Egan的帮助下,我更新了 settings.py 在我的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----- '''

1 个答案:

答案 0 :(得分:1)

parse_pem_private_key引发Private key not found错误。这表明您的设置不包含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。您可能会发现这更容易配置,并且它具有使私钥远离源代码的附加优势。