Ошибка при регистрации и авторизации на проде. Подскажите, где искать причину
Суть: некорректно работает функционал регистрции и авторизации. Когда я регистрирую нового пользователя, которого нет в базе данных, сайт пишет мне, что пользователь с такой почтой уже существует и при этом его создает только в этот момент, но не высылает подтверждение регистрации. В таких случаях при авторизации должна выскочить ошибка о том, что регистрация не подтверждена и сайт должен еще раз высылать письмо с подтверждением регистрации. А сейчас при авторизации такого пользователя сайт виснет на несколько секунд и выскакивает ошибка InternalServerError.
При этом, думается мне, что дело вовсе не в почте (но, может, я ошибаюсь?) по двум причинам:
Первая - программа отлавливает SMTP-исключения и записывает их в текстовый файл следующим образом:
class RegisterUser(CreateView):
form_class = RegisterUserForm
template_name = 'sender/forms/registration.html'
def post(self, request, *args, **kwargs):
form = self.get_form()
if form.is_valid():
form.save()
email = form.cleaned_data.get('email')
password = form.cleaned_data.get('password1')
user = authenticate(email=email, password=password)
try:
custom_send_mail.verify(request, user)
for perm in self.user_permissions:
user.user_permissions.add(self.get_perm(codename=perm['act'], app_label=perm['app'], model=perm['mod']).pk)
except SMTPException as e:
os.system(f'echo {timezone.now()}, {e} >> register_errors.txt')
return redirect('sender:some_error')
else:
return redirect('sender:confirm_email')
context = {'form': form}
return render(request, self.template_name, context)
НО! Файла register_errors.txt нет.
Вторая причина - это то, что на локальной машине все работает корректно с той же почтой!
Почта находится на Яндекс360, из настроек пока только SPF-запись не прошла проверку, жду.
Сайт находится на виртуальном сервере на Ubuntu 24.04.2 LTS с Django 5.0, Gunicorn + Nginx
Подскажите,пожалуйста, где еще можно смотреть возможные ошибки и искать причину?
Как оказалось, замечательный регру втихую блокирует 465 порт яндекса, чтобы с сервера не отправлялись массовые спамные рассылки. И тогда отправка любых автоматических сообщений с сайта оказывается невозможной.
Проверить и обнаружить это можно с помощью 2 команд:
проверка коннекта с почтовым сервером яндекса ping smtp.yandex.ru
и команда-аналог запроса отправки сообщения telnet smtp.yandex.ru 465
Вывод при такой блокировке - см. скриншот ниже