何时在 Django 中使用 API 与 SMTP
When to use API vs SMTP in Django
可以API代替SMTP在Django中发送邮件,尤其是重设密码和邮件确认之类的事情。
如果我能在 Django 中得到关于某个主题的澄清,我将非常高兴。我是 django 的新手,在发送邮件时我注册了 Mailgun 并使用了 API 因为我之前使用过请求但是选择了 django 来使用我正在尝试使用 DJ-Rest 进行用户注册- auth 和 django_allauth 还有关于使用 SMTP 配置电子邮件后端的事情。
我的问题是
- 我可以不为 django_allauth 使用 SMTP 如果是,如何连接我的密码重置工作流以使用 api 发送邮件。
- 当用户注册时,我可以很容易地传入邮件功能作为视图中的警报
我知道我可以使用 django 发送邮件,但是诸如重设密码之类的东西附加了一个 uuid 我怎么才能使用 API 的
def send_simple_message(name, email, phone, course, mode):
""" send mail after successful registration. """
return requests.post(
MAILGUN_BASE_URL,
auth=("api", MAILGUN_KEY),
data={"from": "mail <noreply@mail.com>",
"to": ["mail@cerebrocc.com"],
"subject": "New Student Alert",
"text": f"name: {name}\nemail: {email}\nphone: {phone} Just registered for {course.title()} class and wants the class {mode}!"})
class RegistrationAPIView(generics.CreateAPIView):
""" The Registration API endpoint for cerebro code camp """
queryset = Registration.objects.all()
serializer_class = RegistrationSerializer
def post(self, request, *args, **kwargs):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
name = serializer.data['name']
email = serializer.data['email']
phone = serializer.data['phone']
course = serializer.data['course']
mode = serializer.data['mode']
send_simple_message(name, email, phone, course, mode)
return Response(status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
你不应该写你自己的邮件发送功能,你应该总是使用 Django 的内置 send_mail
(or related) function(s),并在你的设置中配置一个自定义的电子邮件后端。
If you need to change how emails are sent you can write your own email backend. The EMAIL_BACKEND
setting in your settings file is then the Python import path for your backend class.
https://docs.djangoproject.com/en/3.2/topics/email/#defining-a-custom-email-backend
Django 可以在各种情况下自动发送各种电子邮件,因此集中配置 all 电子邮件发送使用您配置的邮件发送设置很重要,除非您有特定的理由反对。
考虑到这是一个可插拔的架构,并且 Django 和 Mailgun 都很流行,现有的模块允许您通过 Mailgun 发送电子邮件,只需进行如此简单的配置更改:https://djangopackages.org/grids/g/email/
可以API代替SMTP在Django中发送邮件,尤其是重设密码和邮件确认之类的事情。
如果我能在 Django 中得到关于某个主题的澄清,我将非常高兴。我是 django 的新手,在发送邮件时我注册了 Mailgun 并使用了 API 因为我之前使用过请求但是选择了 django 来使用我正在尝试使用 DJ-Rest 进行用户注册- auth 和 django_allauth 还有关于使用 SMTP 配置电子邮件后端的事情。
我的问题是
- 我可以不为 django_allauth 使用 SMTP 如果是,如何连接我的密码重置工作流以使用 api 发送邮件。
- 当用户注册时,我可以很容易地传入邮件功能作为视图中的警报
我知道我可以使用 django 发送邮件,但是诸如重设密码之类的东西附加了一个 uuid 我怎么才能使用 API 的
def send_simple_message(name, email, phone, course, mode):
""" send mail after successful registration. """
return requests.post(
MAILGUN_BASE_URL,
auth=("api", MAILGUN_KEY),
data={"from": "mail <noreply@mail.com>",
"to": ["mail@cerebrocc.com"],
"subject": "New Student Alert",
"text": f"name: {name}\nemail: {email}\nphone: {phone} Just registered for {course.title()} class and wants the class {mode}!"})
class RegistrationAPIView(generics.CreateAPIView):
""" The Registration API endpoint for cerebro code camp """
queryset = Registration.objects.all()
serializer_class = RegistrationSerializer
def post(self, request, *args, **kwargs):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
name = serializer.data['name']
email = serializer.data['email']
phone = serializer.data['phone']
course = serializer.data['course']
mode = serializer.data['mode']
send_simple_message(name, email, phone, course, mode)
return Response(status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
你不应该写你自己的邮件发送功能,你应该总是使用 Django 的内置 send_mail
(or related) function(s),并在你的设置中配置一个自定义的电子邮件后端。
If you need to change how emails are sent you can write your own email backend. The
EMAIL_BACKEND
setting in your settings file is then the Python import path for your backend class.https://docs.djangoproject.com/en/3.2/topics/email/#defining-a-custom-email-backend
Django 可以在各种情况下自动发送各种电子邮件,因此集中配置 all 电子邮件发送使用您配置的邮件发送设置很重要,除非您有特定的理由反对。
考虑到这是一个可插拔的架构,并且 Django 和 Mailgun 都很流行,现有的模块允许您通过 Mailgun 发送电子邮件,只需进行如此简单的配置更改:https://djangopackages.org/grids/g/email/