Пожалуйста, как мне исправить эту ошибку SMTPConnectError?
Я пытаюсь отправить электронное письмо пользователю, чтобы подтвердить его/ее учетную запись с помощью ссылки активации, однако при попытке зарегистрировать пользователя я получаю приведенную ниже ошибку. Я пробовал использовать метод send_mail, но он по-прежнему выдает ту же ошибку. Пожалуйста, любая помощь будет очень признательна.
Моя ошибка
Traceback (most recent call last):
File "C:\Users\Donald\PycharmProjects\to_doApp\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Donald\PycharmProjects\to_doApp\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Donald\PycharmProjects\to_doApp\venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\Users\Donald\PycharmProjects\to_doApp\store\accounts\views.py", line 44, in register
send_email.send()
File "C:\Users\Donald\PycharmProjects\to_doApp\venv\lib\site-packages\django\core\mail\message.py", line 284, in send
return self.get_connection(fail_silently).send_messages([self])
File "C:\Users\Donald\PycharmProjects\to_doApp\venv\lib\site-packages\django\core\mail\backends\smtp.py", line 102, in send_messages
new_conn_created = self.open()
File "C:\Users\Donald\PycharmProjects\to_doApp\venv\lib\site-packages\django\core\mail\backends\smtp.py", line 62, in open
self.connection = self.connection_class(self.host, self.port, **connection_params)
File "C:\Users\Donald\AppData\Local\Programs\Python\Python39\lib\smtplib.py", line 258, in __init__
raise SMTPConnectError(code, msg)
Exception Type: SMTPConnectError at /accounts/register/
Exception Value: (421, b'service not available (connection refused, too many connections)')
Мой views.py
@csrf_exempt
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
first_name = form.cleaned_data['first_name']
last_name = form.cleaned_data['last_name']
phone_number = form.cleaned_data['phone_number']
email = form.cleaned_data['email']
password = form.cleaned_data['password']
username = email.split('@')[0]
user = Account.objects.create_user(first_name=first_name, last_name=last_name, email=email, username=username, password=password)
user.phone_number = phone_number
# USER ACTIVATION WITH TOKEN TO EMAIL ACCOUNT
current_site = get_current_site(request)
mail_subject = 'Activate your account'
message = render_to_string('accounts/verification_email.html', {
'user': user,
'domain': current_site,
'uid': urlsafe_base64_encode(force_bytes(user.pk)), # Encode the users primary key
'token': default_token_generator.make_token(user),
})
to_email = email
send_email = EmailMessage(mail_subject, message, to=[to_email])
send_email.send()
user.save()
messages.success(request, 'Registration Successful')
return redirect('register')
else:
form = RegistrationForm()
context = {'form': form}
return render(request, 'accounts/register.html', context)
Мой settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'my-email'
EMAIL_HOST_PASSWORD = 'my-password'
EMAIL_USE_TLS = True
Я предполагаю, что вы используете для этого почту gmail. Похоже, что Google не рекомендует разработчикам делать массовые рассылки с аккаунтов gmail, поэтому я не удивлюсь, если вы получаете ошибки. Gmail неизбежно запретит вам делать это, если вы будете использовать его слишком часто.
Я бы рекомендовал попробовать такой сервис, как MailJet или SendInBlue, который предназначен для транзакционной рассылки электронной почты и имеет гораздо лучшую поддержку и протоколирование ошибок для этой цели. По крайней мере, это поможет вам сузить круг проблем до провайдера.
Я рекомендую http://www.sendinblue.com - его быстро настроить, и у меня была отличная служба поддержки. Это стоит того, чтобы иметь у них бесплатный личный тестовый аккаунт для диагностики подобных проблем.