#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»