Получаем эту ошибку при попытке установить почтовый 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.