Używam następującego kodu, aby wysłać e-mail. Kod działa poprawnie na mojej lokalnej maszynie. Ale na serwerze produkcyjnym pojawia się komunikat o błędzie
var fromAddress = new MailAddress("[email protected]");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("[email protected]");
string subject = "subject";
string body = "body";
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
smtp.Send(message);
A na moim Gmailu A / c otrzymałem następujący e-mail po uruchomieniu kodu z serwera produkcyjnego
Cześć ,
Ktoś ostatnio użył Twojego hasła, aby zalogować się na Twoje konto Google [email protected]. Ta osoba używała aplikacji, takiej jak e-mail, klient lub urządzenie mobilne.
Zapobiegliśmy próbie zalogowania się na wypadek, gdyby był to porywacz próbujący uzyskać dostęp do Twojego konta. Sprawdź szczegóły próby zalogowania:
Piątek, 3 stycznia 2014 13:56:08 godzina Adres UTC: xxx.xx.xx.xxx (abcd.net.) Lokalizacja: Philadelphia PA, Philadelphia, PA, USA
Jeśli nie rozpoznasz tej próby logowania, ktoś inny może próbować uzyskać dostęp do Twojego konta. Powinieneś zalogować się na swoje konto i natychmiast zresetować hasło.
Zresetuj hasło
Jeśli to Ty i masz problem z dostępem do konta, wykonaj kroki rozwiązywania problemów wymienione na stronie http://support.google.com/mail?p=client_login
Z poważaniem, Zespół kont Google
Odpowiedzi:
Zazwyczaj dzieje się tak, gdy próbujesz zalogować się z innej strefy czasowej lub komputera z adresem IP. Twój serwer produkcyjny i użyty identyfikator poczty znajdują się w innej strefie czasowej. Wybierz jedno z tych dwóch rozwiązań:
1) Zaloguj się do serwera produkcyjnego za pomocą zdalnego dostępu i zaloguj się do Gmaila jeden raz przy użyciu swoich poświadczeń. Poprosą o potwierdzenie, potwierdź je i wyloguj.
Lub 2) zaloguj Gmaila na komputer lokalny, kliknij ten link i wybierz przejrzyj tę aktywność i podejmij odpowiednie działania.
źródło
Podczas próby wysłania wiadomości e-mail z kodu i znalezienia błędu „Serwer SMTP wymaga bezpiecznego połączenia lub klient nie został uwierzytelniony. Odpowiedź serwera brzmiała: 5.5.1 Wymagane uwierzytelnienie”, może wystąpić błąd z powodu następujących przypadków.
przypadek 1: gdy hasło jest nieprawidłowe
przypadek 2: gdy próbujesz zalogować się z jakiejś aplikacji
przypadek 3: gdy próbujesz zalogować się z domeny innej niż strefa czasowa / domena / komputer (tak jest w większości scenariuszy podczas wysyłania poczty z kodu)
Dla każdego istnieje rozwiązanie
rozwiązanie dla przypadku 1: Wprowadź poprawne hasło.
rozwiązanie 1 dla przypadku 2 : przejdź do ustawień bezpieczeństwa pod linkiem followig https://www.google.com/settings/security/lesssecureapps i włącz mniej bezpieczne aplikacje. Abyś mógł zalogować się ze wszystkich aplikacji.
rozwiązanie 2 dla przypadku 2 : (patrz https://stackoverflow.com/a/9572958/52277 ) włącz uwierzytelnianie dwuskładnikowe (inaczej weryfikacja dwuetapowa), a następnie wygeneruj hasło aplikacji. Użyj nowo wygenerowanego hasła do uwierzytelnienia za pomocą SMTP.
rozwiązanie 1 dla przypadku 3: (może to być pomocne) musisz przejrzeć działanie. ale przeglądanie działania nie będzie pomocne ze względu na najnowsze standardy bezpieczeństwa, link nie będzie przydatny. Wypróbuj poniższy przypadek.
rozwiązanie 2 dla przypadku 3 : Jeśli hostowałeś swój kod gdzieś na serwerze produkcyjnym i masz dostęp do serwera produkcyjnego, to połącz się zdalnie z serwerem produkcyjnym i spróbuj zalogować się raz z przeglądarki serwera produkcyjnego. Spowoduje to dodanie wyjątku do logowania do Google i będzie można zalogować się z kodu.
Ale co, jeśli nie masz dostępu do serwera produkcyjnego. wypróbuj rozwiązanie 3
rozwiązanie 3 dla przypadku 3: Musisz włączyć logowanie z innej strefy czasowej / ip dla swojego konta Google.
Aby to zrobić, kliknij link https://g.co/allowaccess i zezwól na dostęp, klikając przycisk Kontynuuj.
I to wszystko. Proszę bardzo. Teraz będziesz mógł zalogować się z dowolnego komputera i dowolnej aplikacji na swoje konto Google.
źródło
Jest to problem bezpieczeństwa, Gmail domyślnie uniemożliwia dostęp do konta e-mail z niestandardowych aplikacji. Możesz ustawić akceptację loginu z aplikacji.
Po zalogowaniu się na swój e-mail, KLIKNIJ TUTAJ
Spowoduje to przejście do następnej strony
źródło
Po spędzeniu kilku godzin dzisiaj na wypróbowaniu każdego rozwiązania tutaj, nadal nie byłem w stanie ominąć tego dokładnego błędu. Korzystałem z Gmaila wiele razy w ten sposób, więc wiedziałem, że to coś głupiego, ale nic nie rozwiązałem. W końcu natknąłem się na rozwiązanie w moim przypadku, więc pomyślałem, że podzielę się.
Po pierwsze, większość powyższych odpowiedzi jest również wymagana, ale w moim przypadku było to proste uporządkowanie kodu podczas tworzenia
SmtpClient
klasy.W tym pierwszym fragmencie kodu poniżej zwróć uwagę na lokalizację
Credentials = creds
wiersza. Ta implementacja wygeneruje błąd wymieniony w tym pytaniu, nawet jeśli wszystko inne zostało poprawnie skonfigurowane.Jeśli jednak przeniesiesz wywołanie setera poświadczeń na dół, wiadomość e-mail zostanie wysłana bezbłędnie. Nie wprowadziłem żadnych zmian w otaczającym kodzie ... tj. ... nazwa użytkownika / hasło itp. Oczywiście, albo
EnableSSL, UseDefaultCredentials, or the DeliveryMethod
to zależy od ustawieniaCredentials
jako pierwszego ... Nie przetestowałem wszystkich, aby dowiedzieć się, który to był .Mam nadzieję, że pomoże to uratować komuś ból głowy w przyszłości.
źródło
UseDefaultCredentials
seter jest ten kod:this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null;
która zastępujecredentials
ustawiony przezCredentials
seter. Dla mnie wygląda to jakSmtpClient
błądMusisz włączyć „Zezwalaj na mniej bezpieczne aplikacje” tutaj https://myaccount.google.com/lesssecureapps
źródło
Cześć, miałem ten sam problem,
co zrobiłem, aby to rozwiązać. jest włączenie mniej bezpiecznej aplikacji. po połączeniu z moim kontem Gmail. Podałem ten link: https://www.google.com/settings/security/lesssecureapps
Następnie włączam bezpieczną aplikację i, i to działało. zostało powiedziane również powyżej
źródło
Mam wcześniej działający kod, który teraz generuje ten błąd. Brak problemu z hasłem. Nie trzeba też konwertować wiadomości na base64. Okazuje się, że muszę wykonać następujące czynności:
Działający kod
Wyłączanie uwierzytelniania dwuskładnikowego
Ustaw „Zezwalaj mniej bezpiecznym aplikacjom” na WŁ. (Ta sama strona, musisz przewinąć do dołu)
źródło
Wystarczy wykonać krok w e-mailu Google i włączyć mniej bezpieczne aplikacje.
źródło
Napotkałem ten sam problem. Zdarza się to po włączeniu weryfikacji dwuetapowej (MFA). Wystarczy wyłączyć weryfikację dwuetapową, a problem powinien zostać rozwiązany.
źródło
Poniżej znajduje się mój kod. Miałem również ten sam błąd, ale problem polegał na tym, że podałem nieprawidłowe hasło. Poniższy kod będzie działał idealnie.
Możesz polecić to na moim blogu
źródło
po prostu włącz ustawienie lub Gmail. patrz poniżej podany obraz:
źródło
Miałem ten sam problem z aplikacją wdrożoną na Microsoft Azure.
Najpierw zatwierdziłem wszystkie nieznane urządzenia (niektóre adresy IP pochodzące z Irlandii) na następującej stronie (zalogowany jako użytkownik Gmaila): https://security.google.com/settings/u/1/security/secureaccount
Użyłem następujących ustawień dla klienta:
Zaczęło działać dopiero po ustawieniu następującej właściwości na kliencie smtp:
źródło
To, co zadziałało, to aktywacja opcji dla mniej bezpiecznych aplikacji (używam VB.NET)
Zaloguj się na swoje konto, a następnie przejdź do google.com/settings/security/lesssecureapps
źródło
Komentarz Tomasza Madeyskiego naprawił mój problem ... mówi, że istnieje błąd w SetDefaultCredential, mówi:
„Problem polega na tym, że w seterze UseDefaultCredentials znajduje się następujący kod: this.transport.Credentials = wartość? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials: (ICredentialsByHost) null; który zastępuje poświadczenia ustawione przez seter poświadczeń. Dla mnie wygląda to na błąd
jeśli wstawisz
smtpClient.UseDefaultCredentials = false
po ustawieniu poświadczeń ... ten wiersz ustawia na zero tych poświadczeń ...źródło
LISTOPAD 2018, próbowałem wszystkiego powyżej bez powodzenia.
Poniżej znajduje się rozwiązanie, które w końcu zadziałało. Niestety nie używa SSL, ale działa !!!
źródło
Wypróbowałem wszystkie sugestie tutaj znalezione, od włączania mniej bezpiecznych aplikacji, po wypróbowanie portu 587 ... nic nie działało. W końcu właśnie skomentowałem linię
UseDefaultCredentials = false
. Wszystko działało, gdybym nie dotknął tego boolean.źródło
Naprawdę przyjrzałem się wielu pomysłom, jedynym rozwiązaniem było to w ten sposób (działa z różnymi dostawcami e-mail):
źródło
Jestem aplikacją Google dla abonentów biznesowych i ostatnie kilka godzin spędzam na rozwiązywaniu tego problemu, nawet po skonfigurowaniu wszystkich poprawnych ustawień (smtp, port, enableSSL itp.). Oto, co zadziałało dla mnie i stron internetowych, które zgłaszały błąd 5.5.1 podczas próby wysłania wiadomości e-mail:
Po wykonaniu tej czynności moje formularze e-mail ze strony znów działały. Powodzenia!
źródło
Może być konieczne utworzenie / wygenerowanie określonego hasła do aplikacji z Gmaila. Twoja aplikacja lub skrypt użyje wtedy tego nowego hasła zamiast zwykłego hasła. Twoje zwykłe hasło nadal będzie działać dobrze.
Właśnie to dla mnie zrobiło. Nadal korzystałem z tego samego konta e-mail, ale musiałem wygenerować nowe hasło aplikacji.
https://support.google.com/accounts/answer/185833?hl=pl
Zasadniczo możesz to zrobić tutaj: https://security.google.com/settings/security/apppasswords
źródło
Jeśli używasz Gmaila.
1 logowanie do twojego konta
2- przeglądaj ten link
3- Zezwalaj na mniej bezpieczne aplikacje: WŁ
Cieszyć się....
źródło
Nie zezwalaj mniej bezpiecznym aplikacjom na dostęp do konta Google .
do zrobienia:
https://myaccount.google.com/lesssecureapps
źródło
nie umieszczaj punktu przerwania przed oczekiwaniem na smtp.SendMailAsync (mail);
:)
gdy czeka z punktem przerwania, podając ten błąd, gdy usuwam punkt przerwania, zadziałało
źródło
Użyłem wszystkich wyżej wymienionych rozwiązań, ale w końcu zadziałało dopiero po włączeniu dostępu IMAP z ustawień Gmaila Link do włączania dostępu IMAP w ustawieniach Gmaila
Oczywiście wymagane były również punkty w innych rozwiązaniach.
źródło
spróbuj zmienić hosta, to jest nowy, dostałem ten konfigurujący Mozilla Thunderbird
to działa dla mnie
źródło