Получаем эту ошибку при попытке установить почтовый API SendGrid с помощью Django - AttributeError: 'str' object has no attribute 'get'

Я пытаюсь настроить SendGrid с Django, чтобы мой сайт мог отправлять автоматические электронные письма через SendGrid. Пока что я не смог отправить ни одного письма.

Мои настройки сконфигурированы следующим образом:

EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_BACKEND = 'sgbackend.SendGridBackend'
EMAIL_HOST_USER = 'apikey' # this is exactly the value 'apikey'
with open(os.path.join(BASE_DIR, 'SENDGRID_API_KEY.txt')) as f:
    SENDGRID_API_KEY = f.read().strip()

EMAIL_HOST_PASSWORD = SENDGRID_API_KEY
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = 'dac@projectado.com'
SENDGRID_SANDBOX_MODE_IN_DEBUG=True

Я пытаюсь выполнить этот код для отправки сообщения электронной почты:

message = Mail(
    from_email='dac@projectado.com',
    to_email='taylor.ryanc@gmail.com',
    subject='Sending with Twilio SendGrid is Fun',
    content='test123')
    try:
        sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
        response = sg.send(message)
        print(response.status_code)
        print(response.body)
        print(response.headers)
    except Exception as e:
        print(e.message)

И я получаю эту ошибку:

2022-06-19 15:42:18,726: Internal Server Error: /register/
Traceback (most recent call last):
  File "/home/ryanctaylor/.virtualenvs/cts-virtualenv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/ryanctaylor/.virtualenvs/cts-virtualenv/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/ryanctaylor/.virtualenvs/cts-virtualenv/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/ryanctaylor/CTS/Registration/views.py", line 173, in register_view
    message = Mail(
  File "/home/ryanctaylor/.virtualenvs/cts-virtualenv/lib/python3.8/site-packages/sendgrid/helpers/mail/mail.py", line 31, in __init__
    personalization.add_to(to_email)
  File "/home/ryanctaylor/.virtualenvs/cts-virtualenv/lib/python3.8/site-packages/sendgrid/helpers/mail/mail.py", line 319, in add_to
    self.tos.append(email.get())
AttributeError: 'str' object has no attribute 'get'

Кто-нибудь знает, что я могу делать неправильно? Любая помощь будет очень признательна.

Я бы не только импортировал, но и использовал вспомогательные классы. Как обсуждалось в комментариях, параметр to_email называется to_emails. Интересно, может ли отступ в вашем коде тоже вызвать проблему? Вот код, который я бы использовал:

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

message = Mail(
    from_email=From('dac@projectado.com'),
    to_emails=To('taylor.ryanc@gmail.com'),
    subject=Subject('Sending with Twilio SendGrid is Fun'),
    plain_text_content=Content('test123', Mime.text)
)
try:
    sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
    response = sg.send(message)
    print(response.status_code)
    print(response.body)
    print(response.headers)
except Exception as e:
    print(e.message)

Существуют другие способы создания почты, которые вы можете посмотреть в этом примере кода.

Спасибо за помощь! У меня все получилось!

Оказалось, что я установил более старую версию sendgrid, не зная об этом. Я думаю, что установка sendgrid-django создала зависимость, которая привела к тому, что у меня оказалась более старая версия sendgrid.

Вернуться на верх