Когда использовать API против SMTP в Django

#python-3.x #django #email #django-rest-framework #django-allauth

#python-3.x #django #Адрес электронной почты #django-rest-framework #django-allauth

Вопрос:

Можно ли использовать API для замены SMTP для отправки почты в Django, особенно для таких вещей, как сброс пароля и подтверждение почты.

Мне будет очень приятно, если я смогу получить разъяснения по теме в django. Я новичок в django, и когда дело доходит до отправки почты, я регистрируюсь в Mailgun и использую API, поскольку раньше я использовал запросы, но, взяв django для работы, я пытаюсь выполнить регистрацию пользователя с помощью DJ-Rest-auth и django_allauth, и есть кое-что о настройке почтового сервера с использованием SMTP.

мой вопрос

  • Могу ли я обойтись без использования SMTP для django_allauth, если да, рабочий процесс, как подключить мой сброс пароля для использования api для почты.
  • Я могу легко передать функцию mail, чтобы она служила предупреждением в представлениях при регистрации пользователя

Я знаю, что могу отправлять письма с помощью 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)
    

 

Комментарии:

1. Поскольку вы упомянули mailgun, я бы рекомендовал вам использовать API вместо их SMTP, потому что в API он сам позаботится о SSL-соединениях и других материалах форматирования

2. Вы можете использовать почтовые API для отправки электронной почты из Django, если вы напишете и настроите соответствующий плагин для обработки этого. Поскольку и mailgun, и Django довольно популярны, скорее всего, такой плагин уже существует, и вам просто нужно добавить его в свой проект. Попробуйте немного погуглить.

3. я внес некоторые изменения в вопрос для ясности

Ответ №1:

Вы не должны писать свою обычную собственную функцию отправки почты, вы всегда должны использовать встроенные send_mail (или связанные) функции Django и настраивать пользовательский сервер электронной почты в своих настройках.

Если вам нужно изменить способ отправки электронных писем, вы можете написать свой собственный сервер электронной почты. Тогда EMAIL_BACKEND параметр в вашем файле настроек — это путь импорта Python для вашего серверного класса.

https://docs.djangoproject.com/en/3.2/topics/email/#defining-a-custom-email-backend

Django может автоматически отправлять различные электронные письма в различных обстоятельствах, поэтому важно централизовать эту конфигурацию, чтобы при отправке всей электронной почты использовались настроенные вами настройки отправки почты, если у вас нет особых причин против этого.

Учитывая, что это такая подключаемая архитектура, и как Django, так и Mailgun популярны, существуют существующие модули, которые позволяют отправлять электронную почту через Mailgun с таким простым изменением конфигурации: https://djangopackages.org/grids/g/email /

Комментарии:

1. большое вам спасибо, теперь я лучше понимаю