Django Reset PW 电子邮件不在 AWS 上发送

Posted

技术标签:

【中文标题】Django Reset PW 电子邮件不在 AWS 上发送【英文标题】:Django Reset PW emails not sending on AWS 【发布时间】:2019-05-11 16:26:47 【问题描述】:

很难说出这个问题以及我做了什么,因为我不知道错误发生在哪里。

我正在使用托管在 AWS Elastic Beanstalk 和 SES 上的 Django 来发送电子邮件。 (仅用于密码重置)但是密码重置电子邮件似乎没有发送。

当我尝试如下发送电子邮件时,它可以正常工作。

 send_mail('Test', 'Email content', 'email@email.com',['email@email.com',])

密码重置电子邮件也在本地发送(它被放入垃圾邮件,但这是一个不同的问题)

我的电子邮件设置是:

EMAIL_HOST = 'smtp.gmail.com' # mail service smtp
EMAIL_HOST_USER = 'email@email.com' # email id
EMAIL_HOST_PASSWORD = '****' #password
EMAIL_PORT = 587
# EMAIL_USE_TLS = True

EMAIL_BACKEND = 'django_ses.SESBackend'

AWS_ACCESS_KEY_ID = 'ACCESSKEY'
AWS_SECRET_ACCESS_KEY = 'SECRETKEY'
AWS_SES_REGION_NAME = 'eu-west-1'
AWS_SES_REGION_ENDPOINT = 'email.eu-west-1.amazonaws.com'
DEFAULT_FROM_EMAIL= 'email@email.com'

如果它是相关的,我写 email@email.com 的任何地方实际上都是同一个电子邮件。

任何帮助将不胜感激。

谢谢

【问题讨论】:

您确定您的主机应该是 smtp.gmail.com 吗?在这些示例中,主机来自亚马逊的域 docs.aws.amazon.com/ses/latest/DeveloperGuide/… 我尝试将电子邮件主机设置为“email-smtp.eu-west-1.amazonaws.com”并将端口设置为“465”,但我遇到了同样的问题。 send_mail() 有效,但重置无效 这里说你可以使用django-ses插件***.com/q/48981296/10634638 我在后台使用那个插件。 奇怪的是它对他有用(见他的更新),你有什么错误吗? 【参考方案1】:

2021:Django-3.2.4

不需要诸如django-sesdjango-amazon-ses 之类的库!!

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'email-smtp.us-west-2.amazonaws.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'my_smtp_username'      # Must create SMTP Credentials
EMAIL_HOST_PASSWORD = 'my_smtp_password'  # Must create SMTP Credentials
DEFAULT_FROM_EMAIL = 'myses@sender.com'

对于EMAIL_HOST,选择SMTP Settings


然后,将 Server Name 放入 EMAIL_HOST


EMAIL_HOST = 'email-smtp.us-west-2.amazonaws.com'

对于 EMAIL_HOST_USEREMAIL_HOST_PASSWORD,您必须创建 SMTP Credentials

按下Create My SMTP Credentials按钮:


鉴于SMTP Credentials


然后,将 SMTP Credentials 输入如下:

EMAIL_HOST_USER = 'AKIAWP3TMGZN4OZH5H37'
EMAIL_HOST_PASSWORD = 'BB6dufiw96jJHUTrowXI8R4gcyOI+t1+Skbi51cdHYhV'

*(我已经删除了这些SMTP Credentials


此外,对于 DEFAULT_FROM_EMAIL,请输入一个 verified domainemail address,无论您的帐户是否在 >sandbox.

所以对于下面经过验证的域sender.com


以下三个是有效的:(只使用三个之一)

DEFAULT_FROM_EMAIL = 'abc@sender.com' # OR
DEFAULT_FROM_EMAIL = 'test@sender.com' # OR
DEFAULT_FROM_EMAIL = 'myses@sender.com'

但是下面这两个是无效的:(这些给你错误)

*格式必须是something@sender.com!!

DEFAULT_FROM_EMAIL = 'sender.com' 
DEFAULT_FROM_EMAIL = '@sender.com'

那么,对于下面经过验证的2 email addresses


只使用以下两个之一:

DEFAULT_FROM_EMAIL = 'hello@gmail.com' # OR
DEFAULT_FROM_EMAIL = 'world@outlook.com'

【讨论】:

我已经完成了所有这些工作,当我在本地运行我的应用程序时它可以正常发送电子邮件,但不适用于弹性 beanstalk 上的版本。密码重置页面只是挂起,然后最终出现 504 错误。我已经按照此处的确切过程查找可能是此处问题的任何其他故障排除想法。 对于 Elastic Beanstalk,我们需要使用旧的 Django-2.2 对吗?但是我使用了 Django-3.2.4,这对于这个答案来说是新的。实际上,我曾经使用过 Elastic Beanstalk 很短的时间,但我的 django 应用程序无法正常工作,所以我放弃了使用 Elastic Beanstalk,然后我转向了正常工作的 ECS Fargate。 Elastic Beanstalk 对我来说有点棘手。 我使用的是 Django-3.2.4(至少在我的 requirements.txt 中指定)并且应用程序的其余部分没有问题。除了与 SES 集成以通过电子邮件发送密码重置链接外,一切都运行良好。我有点担心降级到 2.2 和应用程序的其他部分无法以所需的方式工作。无论如何都会继续调试,感谢您的帮助,如果有其他想法请告诉我! 我不知道 Django-3.2.4 可用于 Elastic Beanstalk。我想我需要使用 Elastic Beanstalk 指令显示的 Django-2.2。感谢您提供信息。

以上是关于Django Reset PW 电子邮件不在 AWS 上发送的主要内容,如果未能解决你的问题,请参考以下文章

NoReverseMatch at /accounts/password-reset/ 用于 Django 中的密码重置

Django 2.1.2 密码重置身份验证视图:找不到“password_reset_confirm”的反向

Django:即使密码已保存为哈希,也将返回false

在没有浏览器的情况下在 django 中触发密码重置电子邮件?

DJango 邮件在本地工作但不在生产中

/ password-reset /时的IndexError:重置密码时字符串索引超出范围