何时在 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 发送邮件,但是诸如重设密码之类的东西附加了一个 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/