【问题标题】:How to use AWS Simple Email Service (SES) in Django?如何在 Django 中使用 AWS 简单电子邮件服务 (SES)?
【发布时间】:2018-06-21 01:12:59
【问题描述】:

我正在尝试使用 this library 将我的 Django 项目与 AWS SES 集成。

settings.py

EMAIL_BACKEND = 'django_ses.SESBackend'

AWS_ACCESS_KEY_ID = 'my_aws_access_key'
AWS_SECRET_ACCESS_KEY = 'my_aws_secret_access_key'

AWS_SES_REGION_NAME = 'us-west-2'
AWS_SES_REGION_ENDPOINT = 'email.us-west-2.amazonaws.com'

它会抛出以下错误

SESAddressNotVerifiedError: 400 Email address is not verified.
<ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
  <Error>
    <Type>Sender</Type>
    <Code>MessageRejected</Code>
    <Message>Email address is not verified. The following identities failed the check in region US-WEST-2: jpark1320@gmail.com, webmaster@localhost</Message>
  </Error>
  <RequestId>0220c0a0-741b-11e8-a153-475b5dfc6545</RequestId>
</ErrorResponse>

我什至无法猜测为什么我的代码有问题。但是,有一个问题可能是send_mail()。我正在尝试向用户发送电子邮件以进行注册确认。我把发送电子邮件的代码放在下面。

SMTP 设置

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'my_google_email@gmail.com'
EMAIL_HOST_PASSWORD = 'my_google_email_password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = 'My Team Name <noreply@gmail.com>'

更新

views.py

def signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            # Create a user object to set email to be username before passing it to db
            user = form.save(commit=False)

            user.is_active = False
            user.email = form.cleaned_data['username']
            user.save()

            current_site = get_current_site(request)
            mail_subject = "[Modvisor] Please verify your email address."
            message = render_to_string('accounts/account_active_email.html', {
                'user': user,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                'token': account_activation_token.make_token(user),
            })
            to_email = user.email
            email = EmailMessage(
                        mail_subject, message, to=[to_email]
            )
            email.send()

            return redirect('signup_confirm')

    else:
        form = SignupForm()
    return render(request, 'accounts/register.html', {'form': form})

【问题讨论】:

  • 错误是告诉您您已将两个电子邮件地址作为发件人,这没有意义。显示调用 send_mail 的代码。
  • @Daniel 我认为send_mail 运行良好,因为当我尝试使用 SMTP 设置时,邮件运行良好。我将我的 SMTP 设置放在我原来的帖子中。
  • 但是我要求你展示调用它的代码,因为你显然在那里做错了什么。
  • 关于这两封电子邮件,jpark1320@gmail.com 是我正在尝试发送确认电子邮件以进行注册的电子邮件,我不知道webmaster@localhost 来自哪里。
  • @Daniel 哎呀,抱歉错过了。刚刚用邮寄代码更新了原始帖子!

标签: python django amazon-simple-email-service


【解决方案1】:

错误的相关部分是“电子邮件地址未验证”。默认情况下,SES 处于沙盒模式,不允许您使用之前未验证的 From 或 To 地址。您需要在 SES 控制台中验证地址或打开支持请求以离开沙盒。

Verifying Email Addresses in Amazon SES

要验证地址,请转到 SES 控制台。在左侧选择电子邮件地址,然后单击验证新电子邮件地址。您将需要访问该电子邮件地址,以便单击将发送到该地址的链接。

Moving Out of the Amazon SES Sandbox

要退出沙盒,只需 open a support request,描述您的用例并等待几天。

【讨论】:

  • 我有一个问题。我已经验证了我想用来发送电子邮件以进行注册确认和密码重置的 Google 电子邮件。我们拥有新用户的电子邮件或现有用户的电子邮件不是很有意义吗?我是否已验证所有电子邮件,以便可以向他们发送电子邮件?
  • 不,您应该离开沙箱,这样您就不需要验证所有电子邮件。您还应该离开沙盒,这样您就没有其他速率限制了。
  • 知道了,我会按照你给我的链接离开沙盒。顺便问一下,加入沙盒有什么好处?
  • 这是一种测试模式,因此您不会在开发过程中误发过多的垃圾邮件。
  • 这意味着所有的人最终都移出沙盒以正确使用它。对吗?
猜你喜欢
  • 2018-08-05
  • 2022-11-09
  • 2018-09-27
  • 1970-01-01
  • 2014-10-30
  • 2018-07-12
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多