logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

C# wysyłanie maila przez Gmail – błąd SMTP 5.7.0 Authentication Required

fijek 27 Gru 2025 14:20 237 7
REKLAMA
  • #1 21791123
    fijek
    Poziom 7  
    Posty: 16
    Pomógł: 1
    Ocena: 2
    Witam
    W C# testuję możliwość wysłania maila z mojego adresu gmail (na razie)
    na moją skrzynkę o takim samym adresie. Po uruchomieniu programu otrzymuję taki komunikat:
    Unhandled exception. System.Net.Mail.SmtpException: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Authentication Required. For more information, go to
    at System.Net.Mail.MailCommand.CheckResponse(SmtpStatusCode statusCode, String response)
    at System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, Boolean allowUnicode, SmtpFailedRecipientException& exception)
    at System.Net.Mail.SmtpClient.Send(MailMessage message)


    Proszę o pomoc, jak mam zmodyfikować kod poniższego programu:
    using System.Net;
    using System.Net.Mail;
    using System.Text;
    Console.WriteLine("Próba wysyłania maila.");

    SmtpClient client = new SmtpClient("smtp.gmail.com");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential("mój_email@gmail.com", "moje_haslo");

    // tworzenie wiadomości
    MailMessage mail = new MailMessage();
    mail.From = new MailAddress("mój_email@gmail.com", "Moje nazwisko");
    mail.To.Add("mój_email@gmail.com"); //odbiorca
    mail.Subject = "Powitanie";
    mail.Body = "Witaj!\n ";
    mail.IsBodyHtml = true;
    mail.BodyEncoding = Encoding.UTF8;
    mail.SubjectEncoding = Encoding.UTF8;

    //wysyłanie wiadomości
    client.Send(mail);
  • REKLAMA
  • #2 21791918
    jarekgol
    Poziom 40  
    Posty: 5147
    Pomógł: 642
    Ocena: 1137
    Sprawdź czy działa na gotowym programie, typu outlook lub thunderbird.
    Poszukaj opcji włączenia logowania protokołu i sobie porównaj z działającym.
    Może bot coś podpowie? @ElektrodaBot
  • REKLAMA
  • #3 21791922
    ElektrodaBot
    AI od OpenAI ChatGPT4
    Posty: 8807
    Pomógł: 357
    Ocena: 936
    jarekgol napisał:
    Sprawdź czy działa na gotowym programie, typu outlook lub thunderbird.
    Poszukaj opcji włączenia logowania protokołu i sobie porównaj z działającym.
    Może bot coś podpowie? @ElektrodaBot
    Bezpośrednia odpowiedź
    - Tak – sprawdź to w Outlooku lub Thunderbirdzie. Dla Gmaila MUSI zadziałać tylko z OAuth2 albo z hasłem aplikacji (po włączeniu 2‑etapowego logowania).
    - Włącz logowanie protokołu w tych klientach, wyślij mail testowy i porównaj przebieg SMTP (EHLO → STARTTLS → ponowne EHLO → AUTH → MAIL FROM/RCPT TO/DATA) z tym, co robi Twój program.
    - Jeśli w logu nie ma skutecznego AUTH albo widnieje 5.7.0/535 – używasz zwykłego hasła zamiast hasła aplikacji lub nie nastąpił STARTTLS.

    Uwaga: Od maja 2022 Google nie wpuszcza już zwykłego hasła w SMTP/IMAP. 28/12/2025 to nadal aktualne. Zmień w C# na „hasło aplikacji” lub użyj OAuth2.

    ---

    Instrukcja: test w Outlook/Thunderbird i włączenie logów

    Outlook (Microsoft 365/2016/2019/2021)
    1. Plik → Opcje → Zaawansowane.
    2. Sekcja „Inne” → zaznacz „Włącz rejestrowanie rozwiązywania problemów (wymaga ponownego uruchomienia programu Outlook)”.
    3. Zamknij i uruchom Outlook ponownie (w tytule zobaczysz „(Rejestrowanie włączone)”).
    4. Dodaj konto Gmail (Plik → Dodaj konto). Zaloguj się do Google.
    - Jeśli nie używasz OAuth2, ustaw SMTP: smtp.gmail.com, port 587 (STARTTLS) lub 465 (SSL/TLS), nazwa użytkownika: pełny adres Gmail, hasło: „hasło aplikacji”.
    5. Wyślij wiadomość testową.
    6. Logi: najczęściej w %TEMP%\Outlook Logging\OPMLog.log (otwórz w Notatniku).
    7. Po diagnostyce wyłącz logowanie (jak w pkt 2), żeby nie zostawiać wrażliwych danych.

    Co powinno być w logu, gdy jest OK:
    - EHLO …
    - 250-STARTTLS
    - STARTTLS → 220 Ready to start TLS
    - Ponowne EHLO po TLS
    - AUTH LOGIN/PLAIN lub XOAUTH2 → 235 2.7.0 Accepted
    - MAIL FROM/RCPT TO/DATA → 250 2.0.0 OK

    Gdy jest źle (Twoja sytuacja):
    - AUTH LOGIN … → 5.7.0 Authentication Required lub 535 5.7.8 Username and Password not accepted.

    Thunderbird (wersje 102/115/128 ESR)
    Wariant A – szybki (wystarcza do diagnostyki):
    1. Ustawienia → Ogólne → na dole „Edytor konfiguracji”.
    2. Zmień:
    - mailnews.smtp.loglevel = All
    - mailnews.imap.loglevel = All (opcjonalnie)
    3. Narzędzia → Narzędzia programistyczne → Konsola błędów – tu zobaczysz logi (możesz filtrować po SMTP).
    4. Konto Gmail konfiguruj z „Metodą uwierzytelniania: OAuth2” albo „Zwykłe hasło” + „hasło aplikacji”.
    5. SMTP: smtp.gmail.com, port 587 (STARTTLS) lub 465 (SSL/TLS).

    Wariant B – pełny log do pliku (MOZ_LOG):
    1. Zamknij Thunderbirda.
    2. Uruchom z ustawionymi zmiennymi środowiskowymi (np. plik .bat):
    Kod: Text
    Zaloguj się, aby zobaczyć kod

    3. Wyślij test. Log pojawi się w tb-smtp.log.

    Co porównywać:
    - Czy po EHLO pojawia się „250-STARTTLS” i następuje STARTTLS.
    - Czy po TLS lista „250-AUTH …” zawiera LOGIN/PLAIN/XOAUTH2.
    - Czy AUTH kończy się „235 2.7.0 Accepted”, czy błędem 5.7.x/535.

    ---

    Poprawki w Twoim kodzie i alternatywy

    1) C# SmtpClient – minimalna zmiana (hasło aplikacji)
    Jeśli zostajesz przy SmtpClient (OK do prostych zadań):
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Uwaga: „hasło aplikacji” wklejasz bez spacji. Zwykłe hasło konta Gmail NIE zadziała (będzie 5.7.0/535).

    Jeśli wolisz port 465:
    - Port = 465, EnableSsl = true (połączenie od razu w TLS, bez STARTTLS).

    2) MailKit (zalecane, z logiem protokołu)
    MailKit ma wygodny logger, a także pełną obsługę OAuth2.
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Plik smtp.log pokaże dokładny dialog SMTP (po TLS).

    ---

    Dlaczego to się sypie i jak to poznać w logu
    - Polityka Google od 2022 blokuje zwykłe hasło w SMTP/IMAP. 28/12/2025 nadal obowiązuje.
    - Gdy podasz zwykłe hasło, w logu po AUTH zobaczysz 5.7.0 albo 535 5.7.8.
    - Prawidłowo powinno być: STARTTLS → EHLO → AUTH (XOAUTH2 lub LOGIN/PLAIN, ale z hasłem aplikacji) → 235.

    Dodatkowe uwagi:
    - „From” najlepiej zgodny z kontem, którym się logujesz (Gmail weryfikuje nadawcę; inne adresy muszą być dodane w „Wyślij jako” w ustawieniach konta).
    - IMAP nie jest potrzebny do samego SMTP, ale by pobrać kopię „Wysłane” – już tak (w TB/Outlook włączysz to automatycznie).

    ---

    Szybkie testy sieci/środowiska
    - Windows PowerShell: Test-NetConnection smtp.gmail.com -Port 587
    - OpenSSL (diagnoza STARTTLS):
    openssl s_client -starttls smtp -connect smtp.gmail.com:587 -crlf
    Po „220 Ready to start TLS” akceptacja TLS musi się udać (jeśli korporacyjny proxy robi SSL inspection – może nie wyjść).

    ---

    Checklista do porównania (Outlook/TB vs Twój program)
    - Ten sam serwer/port i szyfrowanie (587+STARTTLS lub 465+SSL/TLS).
    - Ta sama metoda uwierzytelniania (OAuth2 lub LOGIN/PLAIN, ale z hasłem aplikacji).
    - W logu: 235 po AUTH (OK) vs 5.7.x/535 (źle).
    - Czy nie blokuje firewall/AV (czasem moduły „Email Shield” w AV podmieniają certyfikaty – wyłącz na test).
    - Certyfikaty systemowe aktualne, TLS 1.2 dostępne (na starych Windowsach trzeba je włączyć).

    ---

    Co dalej?
    Jeśli chcesz, wklej fragmenty logów z:
    - Outlook OPMLog.log (sekcja SMTP z momentu wysyłki).
    - Thunderbird tb-smtp.log lub to z konsoli.
    - Ewentualnie MailKit smtp.log.

    Dodatkowe pytania pomocnicze:
    1) Jakiej wersji .NET używasz (Framework 4.x czy .NET 6/7/8)?
    2) Czy masz włączone 2FA na koncie Google i wygenerowane „hasło aplikacji”?
    3) Czy to środowisko domowe czy sieć firmowa (proxy/SSL inspection)?

    Po tych danych podpowiem dokładnie, na którym etapie handshake „pęka” autentykacja i co konkretnie zmienić.
    Możesz mnie wywołać w każdym temacie pisząc @ElektrodaBot. Zastrzeżenie: Niektóre odpowiedzi udzielone przez ElektrodaBota mogą być niedokładne. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi ElektrodaBota powinny być zweryfikowane przez użytkownika. OpenAI może monitorować i zapisywać informacje wprowadzane po wywołaniu ElektrodaBota.
  • #4 21792572
    fijek
    Poziom 7  
    Posty: 16
    Pomógł: 1
    Ocena: 2
    W moim przypadku @ElektrodaBot tylko parafrazuje.
    Przetestowałem jego podpowiedzi, a problem pozostał.
    Prosty test SMTP jest OK.
    PS C:UsersDELL> Test-NetConnection smtp.gmail.com -Port 587
    ComputerName : smtp.gmail.com
    RemoteAddress : 142.250.147.109
    RemotePort : 587
    InterfaceAlias : Wi-Fi
    SourceAddress : 192.168.100.12
    TcpTestSucceeded : True

    Nie mam Outlooka, aby zrobić na nim test. Muszę się przespać z tematem.
  • #5 21792579
    ElektrodaBot
    AI od OpenAI ChatGPT4
    Posty: 8807
    Pomógł: 357
    Ocena: 936
    fijek napisał:
    W moim przypadku @ElektrodaBot tylko parafrazuje.
    Przetestowałem jego podpowiedzi a problem pozostał.
    Prosty test smtp jest OK.
    PS C:\Users\DELL> Test-NetConnection smtp.gmail.com -Port 587
    ComputerName : smtp.gmail.com
    RemoteAddress : 142.250.147.109
    RemotePort : 587
    InterfaceAlias : Wi-Fi
    SourceAddress : 192.168.100.12
    TcpTestSucceeded : True
    Nie mam Outlooka aby zrobić na nim test. Muszę się przespać z tematem.
    Bezpośrednia odpowiedź
    - Sam test portu 587 (TcpTestSucceeded: True) potwierdza tylko łączność. Błąd 5.7.0 nadal wskazuje na problem z uwierzytelnianiem (brak OAuth2 lub brak poprawnego Hasła aplikacji).
    - Nie potrzebujesz Outlooka do diagnostyki. Najszybciej: sprawdź wysyłkę w PowerShell albo przez MailKit z logiem protokołu – to pokaże jednoznacznie, czy AUTH przechodzi.
    - Jeśli używasz zwykłego hasła konta Google, to zawsze skończy się 5.7.x. Musi być: App Password (wymaga 2FA) lub OAuth2.

    Poniżej konkretne, krótkie testy „tu i teraz”, bez instalowania Outlooka.

    ---

    Plan działania bez Outlooka (maks. 10–15 minut)

    1) Test w PowerShell (szybki sanity-check)
    To używa tego samego mechanizmu co SmtpClient, ale pozwala szybko potwierdzić, czy Hasło aplikacji działa.

    1) Wygeneruj „Hasło aplikacji” (16 znaków, bez spacji) po włączeniu 2FA na koncie Google.
    2) Uruchom w Windows PowerShell (5.1):
    Kod: Text
    Zaloguj się, aby zobaczyć kod

    - Sukces = problem masz w kodzie/konfiguracji programu.
    - Błąd 5.7.x = App Password nie jest użyte/niepoprawne albo konto to Google Workspace z zablokowanymi app-passwordami przez administratora.

    Uwaga: Send-MailMessage jest „deprecated”, ale do testu wystarczy.

    2) Test w C# z MailKit + log do pliku (diagnoza na 100%)
    Zobaczysz pełny dialog SMTP (EHLO/STARTTLS/AUTH/235 lub 5.7.x).

    - NuGet: MailKit
    - Kod (program konsolowy .NET 6/7/8):
    Kod: text
    Zaloguj się, aby zobaczyć kod

    - W pliku smtp-debug.log szukaj:
    - OK: „250-STARTTLS” → „220 Ready to start TLS” → „250-AUTH …” → „235 2.7.0 Accepted”.
    - Źle: „5.7.0 Authentication Required” albo „535 5.7.8 Username and Password not accepted”.

    3) Alternatywa sieciowa: przełącz na port 465 (implicit TLS)
    Czasem proxy/AV psuje STARTTLS na 587. Spróbuj:
    - SmtpClient: Port=465, EnableSsl=true
    - MailKit: SecureSocketOptions.SslOnConnect na porcie 465

    ---

    Najczęstsze przyczyny, gdy „już testowałem, a dalej nie działa”
    Sprawdź je po kolei – te punkty realnie „wykładają” wysyłkę:

    - Brak 2FA i brak App Password. Samo zwykłe hasło nie zadziała (ciągle 5.7.x).
    - App Password skopiowane ze spacjami lub literówką. Wklej 16 znaków bez spacji.
    - Konto Google Workspace: administrator mógł wyłączyć app-passwordy. Wtedy pozostaje OAuth2 albo firmowy „SMTP relay” (smtp-relay.gmail.com) z białą listą IP.
    - Różny nadawca: From musi być to samo konto, którym się logujesz (lub alias dodany w „Wyślij jako” w Gmailu).
    - Stary .NET Framework domyślnie bez TLS 1.2 – dodaj:
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    - SSL inspection w sieci firmowej (antywirus/proxy). Objawy: brak 250-STARTTLS lub błąd certyfikatu. Spróbuj port 465 albo test poza tą siecią.

    ---

    Twoje obecne C# (SmtpClient) – minimalna korekta
    Jeśli zostajesz przy SmtpClient, to:
    - Użyj App Password.
    - W razie .NET Framework <4.7, wymuś TLS 1.2.
    - Dopisz obsługę wyjątków, żeby mieć pełny komunikat.

    Przykład:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    ---

    Jeśli dalej będzie 5.7.x – podaj proszę:
    - Czy to konto prywatne Gmail, czy Google Workspace (firmowe/szkolne)?
    - Czy 2FA jest włączone i App Password na pewno użyte (bez spacji)?
    - Treść 2–3 ostatnich linii z smtp-debug.log (MailKit) lub pełny komunikat z catch (bez wrażliwych danych).
    - Wersja .NET (np. „dotnet --info”).
    - Czy test na porcie 465 działa tak samo?

    Na podstawie tych informacji wskażę dokładnie, na którym etapie handshake się wywala (STARTTLS vs AUTH) i co zmienić.
    Możesz mnie wywołać w każdym temacie pisząc @ElektrodaBot. Zastrzeżenie: Niektóre odpowiedzi udzielone przez ElektrodaBota mogą być niedokładne. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi ElektrodaBota powinny być zweryfikowane przez użytkownika. OpenAI może monitorować i zapisywać informacje wprowadzane po wywołaniu ElektrodaBota.
  • REKLAMA
  • #6 21792712
    jarekgol
    Poziom 40  
    Posty: 5147
    Pomógł: 642
    Ocena: 1137
    I jeszcze moja sugestia, rozważ choćby do testów innego dostawcę maila. Google zawsze robiło problemy z zewnętrznymi aplikacjami. Kiedyś trzeba było włączyć gdzieś w ustawianiach dostęp przez smtp, czy to jest nadal aktualne to nie wiem.
  • #7 21792739
    Zdzisław1980
    Poziom 26  
    Posty: 601
    Pomógł: 122
    Ocena: 178
    A może to trzeba włączyć?
    Zrzut ekranu ustawień Gmaila w zakładce „Przekazywanie i POP/IMAP”
  • REKLAMA
  • #8 21794403
    fijek
    Poziom 7  
    Posty: 16
    Pomógł: 1
    Ocena: 2
    Moja aplikacja koduje stringi formatem UTF-16, natomiast UTF-8 jest powszechnie używany. Być może z tego powodu Google nie rozpoznaje nazwy użytkownika i hasła do aplikacji. Obecnie nie wiem, czy i jak w C# da się wymusić stringi w formacie UTF-8, ani nie wiem, czy aby na pewno Google nie akceptuje UTF-16. Koło się zamyka.
    Mamy Sylwestra, Nowy Rok i nie czas się tym teraz zajmować. Do siego roku.

Podsumowanie tematu

✨ Problem dotyczy wysyłania maila w C# przez serwer SMTP Gmail, gdzie pojawia się błąd 5.7.0 Authentication Required wskazujący na brak poprawnej autoryzacji. Gmail od maja 2022 roku wymaga uwierzytelniania za pomocą OAuth2 lub hasła aplikacji, które można uzyskać po włączeniu dwustopniowej weryfikacji (2FA). Używanie zwykłego hasła konta Google do SMTP jest odrzucone. Zalecane jest wygenerowanie hasła aplikacji i użycie go w kodzie C#. Dodatkowo, ważne jest, aby połączenie SMTP korzystało z protokołu STARTTLS na porcie 587, co zapewnia bezpieczne szyfrowanie. Diagnostyka może być przeprowadzona bez Outlooka, np. za pomocą PowerShell lub biblioteki MailKit z włączonym logowaniem protokołu SMTP, co pozwala zweryfikować przebieg autoryzacji. Wskazano także, że kodowanie stringów w UTF-16 może powodować problemy z rozpoznaniem danych uwierzytelniających przez Gmail, a UTF-8 jest standardem. Dla testów zasugerowano rozważenie alternatywnego dostawcy poczty, gdyż Gmail ma restrykcyjne wymagania dotyczące zewnętrznych aplikacji.
Wygenerowane przez model językowy.
REKLAMA