электронная почта django не работает и не отправляется по электронной почте

#django #django-rest-framework #django-email

#django #django-rest-framework #django-электронная почта

Вопрос:

Я следую этому руководству с целью проверки электронной почты после регистрации пользователей в системе. вот код.

serializers.py

 class RegisterSerializer(serializers.ModelSerializer):
    password = serializers.CharField(
        max_length=68, min_length=6, write_only=True)

    default_error_messages = {
        'username': 'The username should only contain alphanumeric characters'}

    class Meta:
        model = User
        fields = ['email', 'username', 'password']

    def validate(self, attrs):
        email = attrs.get('email', '')
        username = attrs.get('username', '')

        if not username.isalnum():
            raise serializers.ValidationError(
                self.default_error_messages)
        return attrs

    def create(self, validated_data):
        return User.objects.create_user(**validated_data)
 

мой view.py

 class RegisterView(generics.GenericAPIView):
    serializer_class = RegisterSerializer

    def post(self, request):
        user = request.data
        serializer = self.serializer_class(data=user)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        user_data = serializer.data
        user = User.objects.get(email=user_data['email'])
        token = RefreshToken.for_user(user).access_token
        current_site = get_current_site(request).domain
        relativeLink = reverse('email-verify')
        absurl = 'http://'   current_site   relativeLink   "?token="   str(token)
        email_body = 'Hi '   user.username   
                     ' Use the link below to verify your email n'   absurl

        data = {
            'email_body': email_body ,
            'to_email': user.email ,
            'email_subject' : 'Verify your email'
            }

        Util.send_email(data)
        return Response(user_data , status=status.HTTP_201_CREATED)
 

мой utils.py

 class EmailThread(threading.Thread):

    def __init__(self, email):
        self.email = email
        threading.Thread.__init__(self)

    def run(self):
        self.email.send()


class Util:
    @staticmethod
    def send_email(data):
        email = EmailMessage(
            subject=data['email_subject'], body=data['email_body'] , to=[data['to_email']])
        EmailThread(email).start()
 

и тот settings.py

 EMAIL_USE_TLS = True
EMAIL_HOSTS = "smtp.gmail.com"
EMAIL_PORT = 587

EMAIL_HOST_USER = "talibdaryabi@gmail.com"
EMAIL_HOST_PASSWORD = "**********"
 

когда я проверяю URL-адрес http://127.0.0.1:8000/auth/register/
предоставляя

 {
    "email":"talibacademic@gmail.com",
    "username":"talibacademic",
    "password":"aahg786ahg786"
}
 

Я получаю

 {
    "email": "talibacademic@gmail.com",
    "username": "talibacademic"
}
 

это означает, что пользователь был создан, но не может получать электронную почту.

может ли кто-нибудь помочь мне с проблемой, я также разрешил менее безопасную настройку доступа к приложению для talibdaryabi@gmail.com учетная запись.

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

1. Вы проверяли спам?

2. да, я не получил

Ответ №1:

В вашем settings.py , вам нужно определить EMAIL_BACKEND ,

 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = youremail
EMAIL_HOST_PASSWORD = ****
EMAIL_USE_TLS = True
 

Примечание:

Лучше хранить ваши учетные данные в переменных среды.

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

1. Я думаю, что проблема была с EMAIL_HOST, который я написал EMAIL_HOSTS, в обоих случаях, когда я добавил email_backend или не получил электронное письмо. спасибо тебе , Авишка

2. упс не видел, что «S»