Можно ли вообще узнать, существует ли адрес электронной почты, прежде чем создавать пользователя в Django?

У меня есть регистрационный сериализатор, в котором я присваиваю пользователю is_verfied=False. И я хотел предотвратить создание поддельных учетных записей пользователями с плохими намерениями. Даже если они не могут войти в систему из-за проверки электронной почты, это все равно будет головной болью, если кто-то просто разместит много фальшивых пользователей.

class RegistrationSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('email', 'password', 'cpf', 'is_active')
        extra_kwargs = {
            'password': {'write_only': True}
        }

    def validate(self, data):
        return data

    def create(self, validated_data):
        user = User.objects.create_user(**validated_data)
        token = generate_email_verification_token.make_token(user)
        verification_url = f"{os.environ.get('FRONTEND_URL')}/verify-email?uid={user.id}&token={token}"

        subject = "..."
        plain_message = (
            "...{verification_url}..."
        )
        
        html_message = f"""
       ...{verification_url}...
        """

        send_mail(
            subject,
            plain_message,
            settings.DEFAULT_FROM_EMAIL,
            [user.email],
            html_message=html_message,
            fail_silently=False,
        )
        return user

И я попытался, за исключением send_email, удалить созданного пользователя, если возникали какие-либо проблемы (например, он не мог отправить электронное письмо, потому что этот почтовый ящик не существовал) при попытке отправить электронное письмо, но ничего не сработало:

try:
    send_mail(
    subject,
    plain_message,
    settings.DEFAULT_FROM_EMAIL,
    [user.email],
    html_message=html_message,
    fail_silently=False,
)
except BadHeaderError:              # If mail's Subject is not properly formatted.
    print('Invalid header found.')
    user.delete()
    raise ValidationError
except SMTPException as e:          # It will catch other errors related to SMTP.
    user.delete()
    print('There was an error sending an email.'+ e)
    raise ValidationError
except:                             # It will catch All other possible errors.
    user.delete()
    print("Mail Sending Failed!")
    raise ValidationError

Итак, есть ли какой-нибудь способ помешать недобросовестным пользователям создавать поддельные учетные записи электронной почты?

Вернуться на верх