• Członkowie 4 posty
    19 sierpnia 2024 22:21

    Cześć, mam szybkie lecz od dłuższego czasu problematyczne pytanie.

    Piszę prostą apkę w Django i podczas wpisywania adresu e-mail do wysłania na pocztę wiadomość o resetowania hasła wyskakuje mi następujący błąd:

    Django Version: 3.2.19
    Exception Type: TypeError
    Exception Value:    SMTP.starttls() got an unexpected keyword argument 'keyfile'
    

    Settings:

    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_HOST = 'smtp.gmail.com'
    EMAIL_PORT = 587
    EMAIL_USE_TLS = True
    EMAIL_HOST_USER = 'xxx'
    EMAIL_HOST_PASSWORD = 'xxx'
    

    urls.py:

    path('reset_password/', auth_views.PasswordResetView.as_view(template_name="knowledge-zone/password_reset.html"), name='reset_password'),
    path('reset_password_sent/', auth_views.PasswordResetDoneView.as_view(template_name="knowledge-zone/password_reset_sent.html"), name='password_reset_done'),
    path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(template_name="knowledge-zone/password_reset_form.html"), name='password_reset_confirm'),
    path('reset_password_complete/', auth_views.PasswordResetCompleteView.as_view(template_name="knowledge-zone/password_reset_done.html"), name='password_reset_complete'),
    

    co ciekawe apka już działa wcześniej(wysyłąnie maila również działało bez problemów) piszę ją jednak od nowa bazując na wcześniejszej wersji i w sumie nic nie zmieniłem znaczącego. Jedyne co zmieniłem to dodałem w urls.py oraz wygenerowałem nowe EMAIL_HOST_PASSWORD = 'xxx' na tym samym mailu.

    app_name = 'xxx'
    

    Jednak ten błąd (według mnie) nie wskazuje na to, że to z tym jest problem aczkolwiek mogę się mylić. Bardzo proszę o pomoc. Z góry dziękuję.

    image.png

    PNG, 12,4 KB, przesłany przez krzroj 19 sierpnia 2024.

  • 19 sierpnia 2024 23:48

    Hej,

    Masz bardzo starą wersję Django, a błąd który widzisz spowodowany jest tym że próbuje ona użyć argumentu keyfile który został usunięty z metody starttls w Pythonie 3.12:

    docs.python.org/3/library/smtplib.html#smtplib.SMTP_SSL:

    Changed in version 3.12: The deprecated keyfile and certfile parameters have been removed.

    Zaktualizuj Django (zalecane) albo użyj Python 3.11 (mniej bo to odsunięcie problemu w czasie).