Невозможно отправить электронное письмо из приложения Django Rest Framework - PullRequest
0 голосов
/ 06 марта 2020

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

Я также использую docker images python:3.7-slim и MySql:5.6

Сначала я создал почтовые конфигурации в файле Django project setting.py, как указано ниже.

# Email Settings.
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 456
EMAIL_HOST_USER = 'steinnlabs@gmail.com'
EMAIL_HOST_PASSWORD = '*****'
EMAIL_USE_TLS = 1
EMAIL_USE_SSL = 0

Вот так выглядит view.py файл приложения.

from __future__ import unicode_literals
from django.shortcuts import render
from . import views
from rest_framework.views import APIView
from django.db import IntegrityError
from rest_framework import status
from . import models, serializers
from rest_framework.response import Response
from django.core.mail import send_mail



    class UserAPIViews(APIView):
        """
        """
        def post(self, request, format=None):
            """
            """
            print(request.data)
            serialized_data = serializers.UserSerializer(data=request.data)
            if serialized_data.is_valid():

                try:
                    user_id = serialized_data.save()
                except IntegrityError as error:
                    message = f"Email already exist."
                    return Response ({
                        'error_message' : message,
                        'status' : status.HTTP_226_IM_USED
                    })

                subject = 'Eitan - Case Manager Account Credentials'
                body = f"Hi {serialized_data.validated_data.get('first_name')} Your case manager account is ready. Please use following credentials to login. Email - {serialized_data.validated_data.get('email')}, Password - {serialized_data.validated_data.get('password')} Thank You! Team Eitan."
                sender = "steinnlabs@gmail.com"
                to = serialized_data.validated_data.get('email')

                send_mail(subject, body, sender, [to], fail_silently=False)

                success_message = f"User has been created."

                return Response({
                    'success_message' : success_message,
                    'status' : status.HTTP_201_CREATED
                })

            else:
                return Response (serialized_data.error_messages)

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

OSError at /user/create/
[Errno 99] Cannot assign requested address

Ответы [ 2 ]

0 голосов
/ 07 марта 2020

Я использовал неправильный EMAIL_PORT, т.е. 456 в файле setting.py. EMAIL_PORT в Gmail - 587. У меня сейчас отлично работает.

0 голосов
/ 06 марта 2020

Возможно, проблема с подключением связана с Docker на основе этого вопроса .

 Check that smtp.gmail.com:587 is open to connection from your docker container.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...