OSError at /en/reset_password/ [Errno 101] Network is unreachable

Так вот, я делаю проект django на Google Cloud, я добавил функцию забывания пароля из встроенной функции Django и уже попробовал ее локально. Но когда я попробовал ее на облаке, она выдала мне эту ошибку....

OSError at /en/reset_password/
[Errno 101] Network is unreachable
Request Method: POST
Request URL:    http://04.198.88.75:8000/en/reset_password/
Django Version: 5.0.3
Exception Type: OSError
Exception Value:    
[Errno 101] Network is unreachable
Exception Location: /usr/lib/python3.10/socket.py, line 833, in create_connection
Raised during:  django.contrib.auth.views.PasswordResetView
Python Executable:  /home/rsa-key-20240516/env/SlangID/bin/python
Python Version: 3.10.12
Python Path:    
['/var/www/html/SlangID/src',
 '/usr/lib/python310.zip',
 '/usr/lib/python3.10',
 '/usr/lib/python3.10/lib-dynload',
 '/home/rsa-key-20240516/env/SlangID/lib/python3.10/site-packages']
Server time:    Sun, 02 Jun 2024 11:55:50 +0000

Я действительно не понимаю, что делать Я уже пытался добавить правило брандмауэра, чтобы разрешить smtp-соединения, как это image.... enter image description here

Даже после этого он по-прежнему выдавал ту же ошибку, chatGPT (я был в отчаянии) посоветовал попробовать пропинговать IP 8.8.8.8. Когда я попробовал пинговать, он работает хорошо....

:~$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=122 time=1.91 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=122 time=0.552 ms

Затем я попробовал пинговать telnet smtp, вот так...

~$ telnet smtp.gmail.com 587
Trying 74.125.130.108...
Connected to smtp.gmail.com.
Escape character is '^]'.
220 smtp.gmail.com ESMTP d9443c01a7336-1f632356aa0sm47645545ad.74 - gsmtp

, что я посчитал успешным. Затем нужно проверить настройки электронной почты через командную оболочку Django, как показано ниже...

~$ python /var/www/html/SlangID/src/manage.py shell
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.conf import settings
>>> 
>>> print(settings.EMAIL_HOST)
smtp.gmail.com
>>> print(settings.EMAIL_PORT)
25

затем проверить правила брандмауэра, чтобы убедиться, что SMTP-порт 587 открыт для исходящего трафика, но я не совсем понял это. Вот мой urls.py для страницы "Забыли пароль"...

    from django.contrib.auth import views as auth_views

    # Forgot Password Paths
    path('reset_password/', auth_views.PasswordResetView.as_view(
            template_name='forgot_pass/change_password.html',
            success_url=reverse_lazy('password_reset_done'),
        ), 
        name="password_reset"
    ), #1
    path('reset_password/done/', auth_views.PasswordResetDoneView.as_view(template_name='forgot_pass/sent_email.html'), name="password_reset_done"), #2
    path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(
            template_name='forgot_pass/reset_pass.html',
            success_url=reverse_lazy('password_reset_complete'),
        ),
        name="password_reset_confirm"
    ), #3
    path('reset_password_complete/', auth_views.PasswordResetCompleteView.as_view(
            template_name='forgot_pass/complete_pass.html',
        ), 
        name="password_reset_complete"
    ), #4

Это единственный код, который я использовал, чтобы заставить его работать, а также эта часть в settings.py....

EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_POST = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER ='sussy@gmail.com'
EMAIL_HOST_PASSWORD ='aaaa aaaa aaaa aaaa'

Я уже описал все в деталях.

По-видимому, мне пришлось просто изменить POST на PORT, когда я размещаю проект django на сервере Google Cloud, так что вот как выглядит мой файл settings.py....

EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER ='sussy@gmail.com'
EMAIL_HOST_PASSWORD ='aaaa aaaa aaaa aaaa'
Вернуться на верх