AttributeError: 'SendGridAPIClient' object has no attribute 'send'
AttributeError: 'SendGridAPIClient' object has no attribute 'send'
我正在使用 sendgrid 通过 django 发送邮件,但是,它一直说
AttributeError: 'SendGridAPIClient' object has no attribute 'send'
重现步骤
- 安装发送网格
pip install sendgrid
- 运行 脚本
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
sg = SendGridAPIClient("the_api_key")
email_data = Mail(
from_email="support@email.africa",
to_email="example@email.com",
subject="YOUR EVENT IS NOW LIVE ON SITE!",
)
email_data.dynamic_template_data = json.dumps({
"username": "example username",
"item_name": "example item name",
"item_slug": "path to example item slug",
"template_id": "transactional template id",
"message_type": "EMAIL"
})
response = sg.send(request_body=email_data.get())
错误:
Traceback (most recent call last):
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
response = get_response(request)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/django/core/handlers/base.py", line 128, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/viewsets.py", line 116, in view
return self.dispatch(request, *args, **kwargs)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/views.py", line 495, in dispatch
response = self.handle_exception(exc)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/views.py", line 455, in handle_exception
self.raise_uncaught_exception(exc)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/views.py", line 492, in dispatch
response = handler(request, *args, **kwargs)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/mixins.py", line 84, in partial_update
return self.update(request, *args, **kwargs)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/mixins.py", line 70, in update
self.perform_update(serializer)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/mixins.py", line 80, in perform_update
serializer.save()
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/serializers.py", line 209, in save
self.instance = self.update(self.instance, validated_data)
File "/Users/Retina15/project/store/serializers/event.py", line 358, in update
response = sg.send(request_body=email_data.get())
AttributeError: 'SendGridAPIClient' object has no attribute 'send'
技术细节:
- 发送网格==3.6.5
- sendgrid-django==4.2.0
- Django==2.0.13
- python==3.6
我来回答我自己。
问题出在 sendgrid 版本上。 sendgrid version 3.6.5中的SendGridAPIClient
没有任何方法send()
。
这是不使用 mail
助手的解决方案:
sg = sendgrid.SendGridAPIClient(apikey="THE_SENDGRID_API_KEY")
data = {
"personalizations": [
{
"to": [
{
"email": "example@email.com"
}
],
"dynamic_template_data": {
"subject": "YOUR EVENT IS NOW LIVE ON SITE!",
"username": user_name,
"item_name": item_name,
"item_slug": item_slug,
},
}
],
"from": {
"email": "support@email.africa"
},
"template_id": "the_template_id",
}
response = sg.client.mail.send.post(request_body=data)
这是使用 mail
助手的解决方案:
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail, Substitution
sg = SendGridAPIClient("the_api_key")
email_data = Mail(
to_email="example@email.com",
)
email_data.add_personalization(personalization[0].Substitution({
"username": "example username",
"item_name": "example item name",
"item_slug": "path to example item slug"
}))
email_data.set_from("support@email.africa")
email_data.set_subject("YOUR EVENT IS NOW LIVE ON SITE!")
email_data.set_template_id("the_template_id")
response = sg.client.mail.send.post(request_body=email_data.get())
我正在使用 sendgrid 通过 django 发送邮件,但是,它一直说
AttributeError: 'SendGridAPIClient' object has no attribute 'send'
- 安装发送网格
pip install sendgrid
- 运行 脚本
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
sg = SendGridAPIClient("the_api_key")
email_data = Mail(
from_email="support@email.africa",
to_email="example@email.com",
subject="YOUR EVENT IS NOW LIVE ON SITE!",
)
email_data.dynamic_template_data = json.dumps({
"username": "example username",
"item_name": "example item name",
"item_slug": "path to example item slug",
"template_id": "transactional template id",
"message_type": "EMAIL"
})
response = sg.send(request_body=email_data.get())
错误:
Traceback (most recent call last):
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
response = get_response(request)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/django/core/handlers/base.py", line 128, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/viewsets.py", line 116, in view
return self.dispatch(request, *args, **kwargs)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/views.py", line 495, in dispatch
response = self.handle_exception(exc)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/views.py", line 455, in handle_exception
self.raise_uncaught_exception(exc)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/views.py", line 492, in dispatch
response = handler(request, *args, **kwargs)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/mixins.py", line 84, in partial_update
return self.update(request, *args, **kwargs)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/mixins.py", line 70, in update
self.perform_update(serializer)
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/mixins.py", line 80, in perform_update
serializer.save()
File "/Users/Retina15/project/virtual/lib/python3.6/site-packages/rest_framework/serializers.py", line 209, in save
self.instance = self.update(self.instance, validated_data)
File "/Users/Retina15/project/store/serializers/event.py", line 358, in update
response = sg.send(request_body=email_data.get())
AttributeError: 'SendGridAPIClient' object has no attribute 'send'
技术细节:
- 发送网格==3.6.5
- sendgrid-django==4.2.0
- Django==2.0.13
- python==3.6
我来回答我自己。
问题出在 sendgrid 版本上。 sendgrid version 3.6.5中的SendGridAPIClient
没有任何方法send()
。
这是不使用 mail
助手的解决方案:
sg = sendgrid.SendGridAPIClient(apikey="THE_SENDGRID_API_KEY")
data = {
"personalizations": [
{
"to": [
{
"email": "example@email.com"
}
],
"dynamic_template_data": {
"subject": "YOUR EVENT IS NOW LIVE ON SITE!",
"username": user_name,
"item_name": item_name,
"item_slug": item_slug,
},
}
],
"from": {
"email": "support@email.africa"
},
"template_id": "the_template_id",
}
response = sg.client.mail.send.post(request_body=data)
这是使用 mail
助手的解决方案:
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail, Substitution
sg = SendGridAPIClient("the_api_key")
email_data = Mail(
to_email="example@email.com",
)
email_data.add_personalization(personalization[0].Substitution({
"username": "example username",
"item_name": "example item name",
"item_slug": "path to example item slug"
}))
email_data.set_from("support@email.africa")
email_data.set_subject("YOUR EVENT IS NOW LIVE ON SITE!")
email_data.set_template_id("the_template_id")
response = sg.client.mail.send.post(request_body=email_data.get())