Отправка электронных писем с моего сайта django через sendgrid

#python #django #sendgrid #django-settings

Вопрос:

Я хочу отправлять электронные письма с подтверждением учетной записи всем пользователям, которые регистрируются на моем веб-сайте, поэтому это должно быть электронное письмо в формате HTML со ссылкой для активации. Вот как я пытаюсь это сделать:

 import os
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail

def my_view(request):
            current_site = get_current_site(request)
            mail_subject = 'Welcome To IIITU Alumni Network'
            to_email = email
            ctx = {
                'user': user,
                'domain': current_site.domain,
                'uid':urlsafe_base64_encode(force_bytes(user.pk)),
                'token':account_activation_token.make_token(user),
            }
            message = Mail(
                to_emails = to_email,
                from_email = '<my email address>',
                subject = mail_subject,
                #I made this html page specifically for sending confirmation email
                #I am not sure if this is the correct way to do it
                html_content = render_to_string('network/email.html', ctx)
            )
            try:
                #I have this key as an environment variable
                sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
                #Now this is where the problem is
                response = sg.send(message)
                print(response.status_code)
                print(response.body)
                print(response.headers)
                return HttpResponse("A confirmation Email has been sent to your Institute email address. Please Confirm Your email to complete your registration")

            except Exception as e:
                print(e.message)
                return HttpResponse("The Server seems too busy!! Sorry for the inconvenience. Please try again later, or contact administrator if this problem persists.")
 

При отображении этого конкретного представления появляется следующее сообщение об ошибке:

Объект «Несанкционированная ошибка» не имеет атрибута «сообщение»

Поскольку это не отправляет электронные письма через SMTP-сервер, в соответствии с моим пониманием мне не нужно ничего добавлять в свой settings.py файл(я добавил «sendgrid» в мои установленные приложения после того, как я установил его с помощью pip)Может кто-нибудь, пожалуйста, указать, что я сделал не так? Я застрял на этом уже некоторое время…

Спасибо, что уделили мне время

Ответ №1:

Я думаю, что эта строка вызывает ошибку.

     ...
except Exception as e:
    print(e.message)
    ...
 

Какое бы исключение ни возникало, оно не имеет свойства сообщения.

Два решения.

  1. print(e)
  2. удалите попытку, кроме блока, и попытайтесь выяснить, какое исключение происходит, а затем отловите его конкретно.

Комментарии:

1. Я удалил удаленную попытку/перехват. Теперь сообщение об ошибке, которое я получаю, просто «Ошибка HTTP 401: Несанкционированный»

2. Я посоветовал удалить try/, за исключением только для отладки. Как только вы обнаружите ошибку, я бы предложил, чтобы только ошибка HTTP была обнаружена. По одной вещи за раз.