4

在接下来的几周内,我们将从交易所切换到谷歌托管的邮件,我正在尝试弄清楚如何设置电子邮件,以便我们可以从 django 应用程序内部发送

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST='smtp.gmail.com'
EMAIL_HOST_USER='someone@example.com'
EMAIL_HOST_PASSWORD='16characters'
EMAIL_USE_TLS=True
EMAIL_PORT=587

所以这些是我的电子邮件设置,困扰我的部分是 16 个字符的应用程序专用密码很快就会提交到我们的 git 存储库。

如果我尝试在 Web 前端使用此密码,它会告诉我不要使用特定于应用程序的密码,而是使用我的帐户密码。这很好,至少网络界面不会让他们进入。但是这还允许访问/通过什么?在创建此密钥时没有对其施加任何限制(无法对其进行限制,只是一种“命名”它的方式)因此似乎有人可以将此密钥与 android 手机一起使用并且可以完全访问我的帐户,完全违背了 2 因素身份验证的目的。

那么,当您的应用程序向其他人发送错误报告(针对 500 个)或警报时,您如何设法将 google 用作电子邮件提供商?我见过的所有智能主机设置也需要用户名/密码,因此它会将其保留在存储库之外,但实际上并不能解决问题。

现在看来,如果我想保证我的帐户安全,我必须从谷歌购买一个额外的“用户”并为该用户创建 ASP 以发送电子邮件。

PS:刚刚借了一部不同的手机,并证明它确实可以让他们按预期访问我的帐户。似乎 ASP 可能需要将节点锁定到特定 IP 的能力,或者需要有用于发送的幻象帐户或其他东西......

4

1 回答 1

1

如果您认为您的托管环境是安全的,您可以遵循存储登录名并传入环境变量的方法。这被一些人认为是最佳实践:http ://www.12factor.net/config (而且它似乎越来越受欢迎)。

然后在你的 settings.py 中:

  #If you want loud failures, usually the best
  EMAIL_HOST_USER = os.environ['EMAIL_USERNAME']
  EMAIL_HOST_PASSWORD = os.environ['EMAIL_PASSWORD']

  #If you want quiet failures, usually not a good idea
  EMAIL_HOST_USER = os.environ.get('EMAIL_USERNAME', None)
  EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_PASSWORD', None)

如何设置环境变量取决于您的设置,但通常非常简单。

这种方法的优势在于将机密信息排除在 git 存储库之外,因此您可以将新的协作者添加到项目中,而不必担心他们会接管您的 AWS/email/etc 帐户

于 2012-12-27T17:14:28.607 回答