首页 > 解决方案 > django sendgrid 发送电子邮件时出错

问题描述

我将 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 但它不适用于激活码。

请有人帮我看看。

谢谢

标签: djangosmtpsendgrid

解决方案


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

user.email_user(subject, message)

它应该是:

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

推荐阅读