Django: Ошибка при отправке электронной почты: (530, b'5.7.0 Требуется аутентификация
Я работаю над проектом Django и столкнулся с проблемой отправки электронной почты.
Вот мой код в views.py
class ForgotPasswordView(APIView):
def get(self, request):
return render(request, 'login/forgot_password.html')
def post(self, request):
email = request.data.get('email')
if not email:
return Response({"message": "",
"error": " Email required."
},
status=status.HTTP_400_BAD_REQUEST)
try:
user = User.objects.get(email=email)
except User.DoesNotExist:
return Response({"message": "",
"error": "Email not found."
},
status=status.HTTP_400_BAD_REQUEST)
#Tao token
token = default_token_generator.make_token(user)
#Tao link reset_password
uid = urlsafe_base64_encode(force_bytes(user.pk))
reset_url = request.build_absolute_uri(
reverse('reset_password', kwargs={'uidb64': uid, 'token': token})
)
#Gui email
send_mail(
'Reset Password',
f'Click following link to reset your password: {reset_url}',
os.environ.get('EMAIL_HOST_USER'),
[email], #Email nhận
fail_silently=False
)
return Response({"message": "Mail đặt lại mật khẩu đã được gửi",
"error": ""
},
status=status.HTTP_200_OK)
Но проблема здесь
smtplib.SMTPSenderRefused: (530, b'5.7.0 Authentication Required. For more information, go to\n5.7.0 https://support.google.com/mail/?p=WantAuthError d9443c01a7336-1fed7fbf285sm27418485ad.267 - gsmtp', 'sender@gmail.com')
Я думаю, что в настройках моей электронной почты есть некоторые проблемы, поэтому у меня есть тест в tests.py
и я работаю абсолютно нормально.
from dotenv import load_dotenv
load_dotenv()
from django.conf import settings
from django.core.mail import send_mail
import os
import sys
import django
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(project_root)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "system.settings")
django.setup()
try:
send_mail(
'Test Subject',
'Test message body',
os.environ.get('EMAIL_HOST_USER'),
['reciever@outlook.com'],
fail_silently=False,
)
print("Test email sent successfully")
except Exception as e:
print(f"Error sending email: {str(e)}")
Я использую Gmail с паролем App. Он хорошо работает в файле tests.py
, так что я понятия не имею, что я сделал не так. Сначала я подумал, что забыл load_dotenv()
, но когда я добавил его, проблема осталась прежней. Может ли кто-нибудь помочь мне. Спасибо.