【问题标题】:django sendgrid get error when sending emaildjango sendgrid 发送电子邮件时出错
【发布时间】:2021-08-10 07:54:09
【问题描述】:

我将 sendgrid 设置如下,当我使用 send_mail 发送测试消息时它可以完美运行

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'apikey'
EMAIL_HOST_PASSWORD = '******'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

但是,当我在views.py中使用激活码来实现它以进行如下注册时:

def register(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            form.save() #completed sign up
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=password)
            login(request, user)
            # Create data in profile table for user
            current_user = request.user
            data=UserProfile()
            data.user_id=current_user.id
            data.image="images/users/user.png"
            data.save()

            current_site = get_current_site(request)
            subject = 'Please Activate Your Account'
            # load a template like get_template() 
            # and calls its render() method immediately.
            message = render_to_string('user/activation_request.html', {
                'user': user,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                # method will generate a hash value with user related data
                'token': account_activation_token.make_token(user),
            })
            user.email_user(subject, message)
            return redirect('activation_sent')   
            # messages.success(request, 'Your account has been created!')
            # return HttpResponseRedirect('/')
        else:
            messages.warning(request,form.errors)
            return HttpResponseRedirect('/register')


    form = SignUpForm()
    #category = Category.objects.all()
    context = {
               'form': form,
               }
    return render(request, 'user/register.html', context)

它抛出这个错误:

SMTPDataError at /register
(550, b'The from address does not match a verified Sender Identity. Mail cannot be sent until this error is resolved. Visit https://sendgrid.com/docs/for-developers/sending-email/sender-identity/ to see the Sender Identity requirements')

我已经验证了发件人,这就是为什么它适用于 send_mail 但它不适用于激活码。

请有人帮我看看。

谢谢

【问题讨论】:

  • 请出示user.email_user()
  • 您好,它确实来自 user.email_user(),我忘了包括我的发件人电子邮件,谢谢
  • 嗨骑士,如果你有足够的积分,回答你自己的问题并接受答案。它使其他人无法查看,只是发现它已经有了解决方案。谢谢。

标签: django smtp sendgrid


【解决方案1】:

Sendgrid 需要先设置发件人,然后才能发送电子邮件。

转到您的 sendgrid 管理页面 (https://app.sendgrid.com/settings/sender_auth) 并创建一个发件人。必须验证发件人。

然后是django,可以在settings.py中设置默认邮箱

DEFAULT_FROM_EMAIL = <your sendgrid sender>

【讨论】:

    【解决方案2】:

    以下代码中缺少发件人电子邮件:

    user.email_user(subject, message)
    

    应该是:

    user.email_user(subject, message,"email@example.com")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多