#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. большое вам спасибо, теперь я лучше понимаю