Wysyłanie wiadomości e-mail za pośrednictwem serwera SMTP Gmaila za pomocą C #


243

Z jakiegoś powodu ani zaakceptowana odpowiedź, ani żadna inna nie działa dla mnie w przypadku „ Wysyłania wiadomości e-mail w .NET przez Gmail ”. Dlaczego mieliby nie działać?

AKTUALIZACJA: Próbowałem wszystkich odpowiedzi (zaakceptowanych i innych) w drugim pytaniu, ale żadna z nich nie działa.

Chciałbym tylko wiedzieć, czy to działa na kogokolwiek innego, w przeciwnym razie Google mógł coś zmienić (co zdarzyło się wcześniej).

Kiedy próbuję użyć fragmentu kodu SmtpDeliveryMethod.Network, szybko otrzymuję wyjątek SmtpException podczas wysyłania (wiadomość). Wiadomość jest

Serwer SMTP wymaga bezpiecznego połączenia lub klient nie został uwierzytelniony.

Odpowiedź serwera brzmiała:

5.5.1 Wymagane uwierzytelnienie. Dowiedz się więcej na „<- poważnie, to się tam kończy.

AKTUALIZACJA:

To pytanie zadałem dawno temu, a akceptowaną odpowiedzią jest kod, którego używałem wiele razy w różnych projektach.

Podjąłem niektóre pomysły zawarte w tym poście i innych projektach EmailSender, aby utworzyć projekt EmailSender w Codeplex . Jest przeznaczony do testowania i obsługuje moje ulubione usługi SMTP, takie jak GoDaddy i Gmail.


Próbowałem to zrobić przy użyciu podobnych metod w innym języku. Wystąpił ten sam rodzaj rzeczy: stare udokumentowane metody, które działały wcześniej, nie działały dla mnie. Więc zastanawiasz się, czy Google coś zmienił, czy zrobiłeś coś złego.
AaronLS

3
@aaronls jedyna ostatnia zmiana wydaje się być związana z portem 465. Próbowałem tego, szukając rozwiązania (pracowałem nad tym samym), a limity portu 465 były przez cały czas. Jeśli tak jest w twoim przypadku, spróbuj z portem 587.
eglasius

2
Ten problem wynika z „weryfikacji słownej” (captcha). Jeśli ręcznie zalogujesz się przez interfejs sieciowy i wypełnisz captcha, Twój SMTP zacznie działać.
Robert Koritnik

4
FWIW, działa dla mnie. musisz użyć 587 i .EnableSSL true. c # 4 / .NET 4 obecnie nie obsługuje alternatywnego 465 / SSL. wymagania Gmaila dotyczące Konfigurowania innych klientów poczty .
gerryLowry

1
Postępuj zgodnie z odpowiedzią @eglasius i upewnij się, że w Gmailu włączono opcję „Zezwalaj na mniej bezpieczne aplikacje”, aby umożliwić Gmailowi ​​uwierzytelnianie konta.
user2713706

Odpowiedzi:


291

CVertex, sprawdź kod i, jeśli to niczego nie ujawni, opublikuj go. Właśnie włączałem to na testowej stronie ASP.NET, nad którą pracowałem, i działa.

Właściwie w pewnym momencie miałem problem z moim kodem. Nie zauważyłem go, dopóki nie miałem prostszej wersji programu konsoli i nie zobaczyłem, że działa (bez zmian po stronie Gmaila, ponieważ martwiłeś się). Poniższy kod działa tak samo jak przykłady, o których mowa:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = new SmtpClient("smtp.gmail.com", 587)
            {
                Credentials = new NetworkCredential("myusername@gmail.com", "mypwd"),
                EnableSsl = true
            };
            client.Send("myusername@gmail.com", "myusername@gmail.com", "test", "testbody");
            Console.WriteLine("Sent");
            Console.ReadLine();
        }
    }
}

Mam również działa przy użyciu kombinacji web.config, http://msdn.microsoft.com/en-us/library/w355a94k.aspx i kodu (ponieważ EnableSslw pliku konfiguracyjnym nie ma dopasowania :().


1
Świetnie działało dla mnie w aplikacji C # winforms. Dzięki, Freddy.
Andrew

13
Pamiętaj tylko, że taki kod skutecznie przekazuje dane uwierzytelniające Gmaila zwykłym tekstem do użytkownika ...
Chris Marisic,

3
w pliku web.config znajduje się odpowiednie ustawienie dla enableSsl, patrz odpowiedź poniżej
Wiebe Tijsma,

4
@Zidad, który został dodany w wersji 4.0.
eglasius

21
Konieczne może być również włączenie dostępu do „mniej bezpiecznych aplikacji” na stronie ustawień Gmaila: google.com/settings/security/lesssecureapps . Jest to konieczne, jeśli otrzymujesz wyjątek. ”Odpowiedź serwera brzmiała: 5.5.1 Wymagane jest uwierzytelnienie.
Ravendarksky

74

NASTĘPUJĄCE PRAWIE JEST NA PEWNO ODPOWIEDŹ NA TWOJE PYTANIE, JEŻELI WSZYSTKIE INNE SĄ AWARIA :

Otrzymałem dokładnie ten sam błąd, okazuje się, że nowy algorytm pomiaru siły hasła Google zmienił się, uznając moje obecne hasło za zbyt słabe i nie mówiąc mi nic o tym (nawet wiadomość lub ostrzeżenie) ... Jak to odkryłem ? Cóż, postanowiłem zmienić hasło, aby zobaczyć, czy to pomogłoby (próbowałem wszystkiego innego bezskutecznie), a kiedy zmieniłem hasło, zadziałało!

Następnie, dla eksperymentu, próbowałem zmienić hasło z powrotem na poprzednie, aby zobaczyć, co się stanie, a Gmail nie pozwolił mi na to, powołując się na powód „przepraszamy, nie możemy pozwolić ci zapisać tej zmiany jako wybranej hasło jest za słabe ”i nie pozwoliłbym wrócić do mojego starego hasła. Pomyślałem, że to pomyłka, ponieważ albo a) musisz zmienić hasło raz na x miesięcy lub b). jak powiedziałem wcześniej, ich algorytmy siły hasła uległy zmianie i dlatego słabe hasło, które otrzymałem, nie zostało zaakceptowane, mimo że nie powiedzieli nic na ten temat podczas próby zalogowania się NIGDY! Ten (numer 2) jest najbardziej prawdopodobnym scenariuszem, ponieważ moje słabe hasło miało około 4 miesięcy i pozwoliło mi go używać w Gmailu.

Szkoda, że ​​nic o tym nie powiedzieli, ale ma to sens. Ponieważ większość przechwyconych wiadomości e-mail jest zalogowanych przy użyciu oprogramowania spoza Gmaila i domyślam się, że musisz mieć silniejsze hasło, jeśli chcesz używać Gmaila poza środowiskiem Gmaila.

Mam nadzieję, że to pomoże!


2
Dzięki, jak mówisz, zmień hasło, aby było silne i wszystko działało dobrze.
Gavin

1
To był dokładnie mój problem - wszystkie inne sugestie dotyczyły konfiguracji, ale moja konfiguracja była poprawna od samego początku, ale ciągle pojawiał się błąd. Zmiana hasła zrobiła różnicę,
André Vermeulen

Dzięki, w końcu udało mi się rozwiązać ten problem. Moja sprawa była jeszcze bardziej skomplikowana, mogłem wysyłać e-maile z mojej maszyny deweloperskiej (która znajduje się w Gruzji na Kaukazie), ale e-maile nie działały z serwerów produkcyjnych (Wielka Brytania) Po zmiana hasła na jedno złożone wszystko działa teraz :)
Kirill Chilingarashvili

Dzięki. Miałem ten sam problem z kontem Gmail, który nie posiadał siły hasła. Zaktualizowałem go silnym i moje kody działają.
Thomas.Benz

Dzięki, tak, w końcu to po prostu zmień hasło na silne.
Misha Beskin

68

Oprócz innych powyższych kroków rozwiązywania problemów, chciałbym również dodać, że jeśli włączyłeś uwierzytelnianie dwuskładnikowe (znane również jako weryfikacja dwuetapowa ) na swoim koncie Gmail, musisz wygenerować hasło aplikacji i użyć tego nowo wygenerowane hasło do uwierzytelnienia przez SMTP .

Aby je utworzyć, odwiedź: https://www.google.com/settings/ i wybierz Autoryzuj aplikacje i witryny, aby wygenerować hasło.


1
Nie miałem włączonej weryfikacji dwuetapowej i nie miało znaczenia, jak bezpieczne zrobiłem hasło, to był jedyny sposób, aby naprawić mój problem. Mogłem korzystać z innych kont Gmail bez 2-etapowych i słabszych haseł bez problemów ... aby korzystać z konta, którego naprawdę chciałem używać, musiałem włączyć 2-etapowe i używać hasła aplikacji.
Ian Robertson

Dokładnie to, co robię, ale wciąż ten sam błąd: - / To działa tak, jakby moje hasło nie było wystarczająco silne, ale używam hasła do aplikacji, które dostałem od Gmaila !!!
Jerry Dodge

55
Turn On Access For Less Secure Apps and it will work for all no need to change password.

Link do ustawień Gmaila

wprowadź opis zdjęcia tutaj


1
To zadziałało dla mnie. Co więcej, kiedy próbowałem wysłać wiadomość e-mail w powyższy sposób, faktycznie otrzymałem wiadomość e-mail od Google, w której wyraźnie mówią, że zablokowali tę próbę z mniej bezpiecznej aplikacji i wspominali o tym, jak to naprawić
Demarsch

1
Jest to najważniejszy klucz w układance, ponieważ miałem wszystkie inne ustawienia i wydawało się, że nie działa. Gdy tylko włączyłem to ustawienie, zadziałało jak urok.
Utracony

1
To zadziałało dla mnie. Hasło aplikacji + SSL + poświadczenia sieciowe. (VB.NET)
CrazyIvan1974,

30

Mam również problemy z wysyłaniem wiadomości e-mail z mojego konta Gmail, które były spowodowane kilkoma wyżej wymienionymi sytuacjami. Oto podsumowanie, w jaki sposób działam i jednocześnie zachowuję elastyczność:

  • Przede wszystkim skonfiguruj swoje konto Gmail:
    • Włącz protokół IMAP i podaj odpowiednią maksymalną liczbę wiadomości (możesz to zrobić tutaj)
    • Upewnij się, że twoje hasło ma co najmniej 7 znaków i jest silne (według Google)
    • Upewnij się, że nie musisz najpierw wpisywać kodu captcha. Możesz to zrobić, wysyłając testową wiadomość e-mail z przeglądarki.
  • Wprowadź zmiany w pliku web.config (lub app.config, jeszcze tego nie próbowałem, ale zakładam, że równie łatwo jest sprawić, aby działał w aplikacji systemu Windows):
<configuration>
    <appSettings>
        <add key="EnableSSLOnMail" value="True"/>   
    </appSettings>

    <!-- other settings --> 

    ...

    <!-- system.net settings -->
    <system.net>
        <mailSettings>
            <smtp from="yourusername@gmail.com" deliveryMethod="Network">
                <network 
                    defaultCredentials="false" 
                    host="smtp.gmail.com" 
                    port="587" 
                    password="stR0ngPassW0rd" 
                    userName="yourusername@gmail.com"
                    />
                <!-- When using .Net 4.0 (or later) add attribute: enableSsl="true" and you're all set-->
            </smtp>
        </mailSettings>
    </system.net>
</configuration>
Add a Class to your project:

Imports System.Net.Mail

Public Class SSLMail

    Public Shared Sub SendMail(ByVal e As System.Web.UI.WebControls.MailMessageEventArgs)

        GetSmtpClient.Send(e.Message)

        'Since the message is sent here, set cancel=true so the original SmtpClient will not try to send the message too:
        e.Cancel = True

    End Sub

    Public Shared Sub SendMail(ByVal Msg As MailMessage)
        GetSmtpClient.Send(Msg)
    End Sub

    Public Shared Function GetSmtpClient() As SmtpClient

        Dim smtp As New Net.Mail.SmtpClient
        'Read EnableSSL setting from web.config
        smtp.EnableSsl = CBool(ConfigurationManager.AppSettings("EnableSSLOnMail"))
        Return smtp
    End Function

End Class

A teraz, gdy chcesz wysyłać wiadomości e-mail, wystarczy zadzwonić SSLMail.SendMail:

np. na stronie z kontrolką PasswordRecovery:

Partial Class RecoverPassword
Inherits System.Web.UI.Page

Protected Sub RecoverPwd_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles RecoverPwd.SendingMail
    e.Message.Bcc.Add("webmaster@example.com")
    SSLMail.SendMail(e)
End Sub

End Class

Lub w dowolnym miejscu kodu możesz zadzwonić:

SSLMail.SendMail(New system.Net.Mail.MailMessage("from@from.com","to@to.com", "Subject", "Body"})

Mam nadzieję, że to pomoże każdemu, kto trafi na ten post! (Użyłem VB.NET, ale myślę, że konwersja go na dowolny język .NET jest banalna.)


+1 "enableSsl =" true "- działa to w przypadku starszej aplikacji, która nie ustawia konkretnie właściwości Smtp.enableSsl bez ponownej kompilacji zestawów. Doskonała wskazówka!
Metro Smurf

i nie zapomnij zapory ogniowej. Port 587 nie jest zwykłym portem do otwarcia.
Guy Lowe

13
Dim SMTPClientObj As New Net.Mail.SmtpClient
SMTPClientObj.UseDefaultCredentials = False
SMTPClientObj.Credentials = New System.Net.NetworkCredential("myusername@gmail.com", "mypwd")
SMTPClientObj.Host = "smtp.gmail.com"
SMTPClientObj.Port = 587
SMTPClientObj.EnableSsl = True
SMTPClientObj.Send("myusername@gmail.com","yourusername@gmail.com","test","testbody")

Jeśli pojawi się błąd typu „Serwer SMTP wymaga bezpiecznego połączenia lub klient nie został uwierzytelniony. Odpowiedź serwera brzmiała: Wymagane jest uwierzytelnianie 5.5.1. Dowiedz się więcej na stronie„ jak otrzymam wcześniej, upewnij się, że linia została SMTPClientObj.UseDefaultCredentials = Falseuwzględniona i ta linia powinien przedSMTPClientObj.Credentials .

Próbowałem zmienić te 2 wiersze w odwrotny sposób i zwrócił błąd Wymagane uwierzytelnienie 5.5.1 .


Właśnie to mi się przydarzyło. Kto by pomyślał, że kolejność ustawiania własności naprawiłaby / zepsuła rzeczy!
Bill Yang

To był również problem dla mnie, zmieniłem kolejność zgodnie z sugestią i działa dobrze - bóle głowy, ugh!
eth0

13

Och ... To niesamowite ... Po pierwsze Nie mogłem wysłać e-maila z żadnego powodu. Ale po zmianie sekwencji tych dwóch wierszy, jak poniżej, działa idealnie.

//(1)
client.UseDefaultCredentials = true;
//(2)
client.Credentials = new System.Net.NetworkCredential("username@gmail.com", "password");

Mam nadzieję, że to pomoże!!! :)


1
Tak, kolejność robi różnicę. Zwłaszcza gdy ustawisz właściwość Poświadczenia i nie chcesz używać domyślnych poświadczeń.
Stefan Cvetanovski

1
Zgodnie z dokumentacją, aby użyć poświadczeń, musisz ustawić wartość UseDefaultCredentials = false. Jednak te dwa ustawienia wydają się być ze sobą ściśle powiązane. Jeśli ustawisz UseDefaultCredentials na true lub false, będzie to miało boczny wpływ na ustawienie Credentials na null. I wygląda na to, że ustawienie Poświadczeń może spowodować efekt uboczny Ustaw UseDefaultCredentials = false. Jednak nie udokumentowane, że to robi, może być błędem lub po prostu kulawym deweloperem.
Aaron,

10

Problem nie polega na technicznej możliwości wysyłania za pośrednictwem Gmaila. To działa w większości sytuacji. Jeśli nie możesz wysłać maszyny do wysłania, jest to zwykle spowodowane tym, że maszyna nie została przynajmniej raz uwierzytelniona przy pomocy człowieka.

Problemem, z którym zmaga się większość użytkowników, jest to, że Google cały czas decyduje się na zmianę limitów wychodzących. Zawsze powinieneś dodawać kod obronny do swojego rozwiązania. Jeśli zaczniesz widzieć błędy, zmniejsz prędkość wysyłania i po prostu przestań wysyłać na chwilę. Jeśli będziesz próbował wysyłać wiadomości, Google czasami wydłuży czas opóźnienia, zanim będziesz mógł wysłać wiadomość ponownie.

To, co zrobiłem w moim obecnym systemie, to wysłanie z 1,5-sekundowym opóźnieniem między każdą wiadomością. Jeśli pojawią się jakieś błędy, zatrzymaj się na 5 minut, a następnie zacznij od nowa. Zwykle działa to i pozwala na wysyłanie do limitów konta (ostatnio sprawdziłem, że było to 2000 za pierwsze logowanie klientów dziennie).


1
To był dokładnie mój problem! Po wdrożeniu do Production dostałem problem i po zalogowaniu się do Gmaila na samym serwerze, zaczął on działać ponownie.
ThisGuy,


9

Miałem ten sam problem, ale okazało się, że moja ochrona przed wirusami blokowała wychodzące wiadomości „spamowe”. Wyłączenie tego pozwoliło mi użyć portu 587 do wysyłania wiadomości e-mail SMTP za pośrednictwem Gmaila


Wyłączyłem Windows Defender i również zaczął działać.
MorioBoncz

9

Jeśli nic więcej tu nie działało, być może musisz zezwolić na dostęp do konta Gmail z aplikacji innych firm. To był mój problem. Aby zezwolić na dostęp, wykonaj następujące czynności:

  1. Zaloguj się na swoje konto Gmail.
  2. Odwiedź tę stronę https://accounts.google.com/DisplayUnlockCaptcha i kliknij przycisk, aby zezwolić na dostęp.
  3. Odwiedź tę stronę https://www.google.com/settings/security/lesssecureapps i włącz dostęp dla mniej bezpiecznych aplikacji.

To działało dla mnie, mam nadzieję, że zadziała dla kogoś innego!


8

Nie jestem pewien, która wersja .NET jest do tego wymagana, ponieważ eglasius wspomniał, że nie ma pasującego enableSslustawienia (używam .NET 4.0, ale podejrzewam, że działa w .NET 2.0 lub nowszej), ale ta konfiguracja właśnie działała dla ja (i nie wymaga użycia żadnej konfiguracji programowej):

<system.net>
  <mailSettings>
    <smtp from="myusername@gmail.com" deliveryMethod="Network">
      <network defaultCredentials="false" enableSsl="true" host="smtp.gmail.com" port="587" password="password" userName="myusername@gmail.com"/>
    </smtp>
  </mailSettings>
</system.net>

Może być konieczne włączenie POP lub IMAP na koncie Gmail: https://mail.google.com/mail/?shva=1#settings/fwdandpop

Najpierw polecam wypróbowanie go z normalnym klientem poczty ...


2
to nowość do 4.0, porównaj wersje na -> msdn.microsoft.com/en-us/library/ms164242(v=VS.90).aspx
eglasius

Cześć Eglasius ... OK, dziękuję za to! Dziwne, że mają podejście programowe tylko w wersji wcześniejszej niż 4.0. Chyba wszyscy od czasu do czasu coś zapominamy :)
Wiebe Tijsma,

6

@Andres Pompiglio: Tak, zgadza się, musisz zmienić hasło przynajmniej raz .. ten kod działa dobrze:

//Satrt Send Email Function
public string SendMail(string toList, string from, string ccList,
    string subject, string body)
{

    MailMessage message = new MailMessage();
    SmtpClient smtpClient = new SmtpClient();
    string msg = string.Empty;
    try
    {
        MailAddress fromAddress = new MailAddress(from);
        message.From = fromAddress;
        message.To.Add(toList);
        if (ccList != null && ccList != string.Empty)
            message.CC.Add(ccList);
        message.Subject = subject;
        message.IsBodyHtml = true;
        message.Body = body;
        // We use gmail as our smtp client
        smtpClient.Host = "smtp.gmail.com";   
        smtpClient.Port = 587;
        smtpClient.EnableSsl = true;
        smtpClient.UseDefaultCredentials = true;
        smtpClient.Credentials = new System.Net.NetworkCredential(
            "Your Gmail User Name", "Your Gmail Password");

        smtpClient.Send(message);
        msg = "Successful<BR>";
    }
    catch (Exception ex)
    {
        msg = ex.Message;
    }
    return msg;
}
//End Send Email Function

ORAZ możesz nawiązać połączenie z funkcją, używając:

Response.Write(SendMail(recipient Address, "UserName@gmail.com", "ccList if any", "subject", "body"))

Serwer SMTP wymaga bezpiecznego połączenia lub klient nie został uwierzytelniony. Odpowiedź serwera brzmiała: 5.5.1 Wymagane uwierzytelnienie. Dowiedz się więcej na stronie
Savas Adar

6

Korzystałem z korporacyjnego połączenia VPN. To był powód, dla którego nie mogłem wysłać e-maila z mojej aplikacji. Działa, jeśli rozłączę się z VPN.


5

Odkryłem również, że konto, z którego się logowałem, zostało z jakiegoś powodu dezaktywowane przez Google. Po zresetowaniu hasła (do tego samego, co kiedyś), mogłem dobrze wysłać e-maile. Otrzymywałem również komunikat 5.5.1.


5

Próbowałem też wielu rozwiązań, ale wprowadzę kilka zmian, to zadziała

host = smtp.gmail.com
port = 587
username = email@gmail.com
password = password
enabledssl = true

z smtpclient powyższe parametry działają w Gmailu


5

Otrzymałem ten sam błąd i żadne z powyższych rozwiązań nie pomogło.

Mój problem polegał na tym, że uruchamiałem kod ze zdalnego serwera, który nigdy nie był używany do logowania się na konto Gmail.

Otworzyłem przeglądarkę na zdalnym serwerze i stamtąd zalogowałem się do Gmaila. Zadał pytanie bezpieczeństwa, aby zweryfikować, że to ja, ponieważ była to nowa lokalizacja. Po sprawdzeniu bezpieczeństwa udało mi się uwierzytelnić za pomocą kodu.



4

Wystąpił ten sam błąd ( „Serwer SMTP wymaga bezpiecznego połączenia lub klient nie został uwierzytelniony. Odpowiedź serwera brzmiała: Wymagane jest uwierzytelnianie 5.5.1. Więcej informacji na stronie” ) i okazało się, że używałem niewłaściwego hasła. Poprawiłem dane logowania i wysłałem je poprawnie.

Wiem, że jest późno, ale może to pomoże komuś innemu.


4

Kolejną rzeczą, którą znalazłem, jest to, że musisz zmienić hasło przynajmniej raz. I spróbuj użyć hasła poziomu bezpiecznego (nie używaj tego samego użytkownika co hasło, 123456 itp.)


4

Jeszcze jedno możliwe rozwiązanie dla Ciebie. Miałem podobne problemy z połączeniem się z Gmailem przez IMAP. Po wypróbowaniu wszystkich rozwiązań, które napotkałem, o których przeczytasz tutaj i gdzie indziej na SO (np. Włącz IMAP, włącz mniej bezpieczny dostęp do swojej poczty, używając https://accounts.google.com/b/0/displayunlockcaptcha i itd.), ponownie założyłem nowe konto Gmail.

W moim pierwotnym teście, pierwszym koncie Gmail, które utworzyłem, podłączyłem się do mojego głównego konta Gmail. Spowodowało to nieprawidłowe działanie, gdy Google odnosił się do niewłaściwego konta. Na przykład z uruchomioną https://accounts.google.com/b/0/displayunlockcaptcha otworzyło moje główne konto zamiast konta, które utworzyłem w tym celu.

Kiedy więc utworzyłem nowe konto i nie podłączyłem go do mojego konta głównego, po wykonaniu wszystkich odpowiednich kroków opisanych powyżej, stwierdziłem, że działa dobrze!

Jeszcze tego nie potwierdziłem (tj. Powielono), ale najwyraźniej zrobiło to dla mnie ... mam nadzieję, że to pomoże.


4
  1. Najpierw sprawdź ustawienia konta Gmail i włącz opcję „Dostęp dla mniej bezpiecznych aplikacji” wprowadź opis zdjęcia tutaj

Zdecydowanie zalecamy korzystanie z bezpiecznej aplikacji, takiej jak Gmail, w celu uzyskania dostępu do konta. Wszystkie aplikacje wykonane przez Google spełniają te standardy bezpieczeństwa. Z drugiej strony korzystanie z mniej bezpiecznej aplikacji może narazić twoje konto. Ucz się więcej.

  1. Zestaw

    smtp.UseDefaultCredentials = false;

    przed

    smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);

4

Istnieje co najmniej jeden powód tego błędu.

  • Zaloguj się za pomocą Gmaila (lub dowolnego innego, jeśli) w systemie lokalnym.

  • Sprawdź także, czy aplikacja jest mniej bezpieczna i ustaw ją na „Włącz”. Oto link do GMAIL. https://www.google.com/settings/security/lesssecureapps

  • sprawdź EnableSsl w swoim kodzie e-mail, a także ustaw go na true.

    smtp.EnableSsl = true;
  • Sprawdź także, którego portu używasz obecnie. 25 jest globalne, ale możesz to sprawdzić także dla innych, takich jak 587. sprawdź tutaj. Czy cała komunikacja SMTP odbywa się w wieku powyżej 25 lat?

  • JEŚLI JESTEŚ NA PILOCIE : sprawdź odpowiedź Vlad Tamas powyżej.


co jeśli nie chcę włączać mniej bezpiecznych ustawień aplikacji, w jaki sposób robią to inni klienci poczty e-mail, dlaczego nie mogę zrobić tego samego z c #?
user734028,

3

Możesz także połączyć się przez port 465, ale z powodu pewnych ograniczeń przestrzeni nazw System.Net.Mail może być konieczna zmiana kodu. Wynika to z faktu, że przestrzeń nazw nie umożliwia nawiązywania niejawnych połączeń SSL. Jest to omówione na stronie http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx , a ja podali przykład użycia CDO (Collaborative Data Object) w innej dyskusji ( GMail SMTP przez błędy C # .Net na wszystkich portach ).


3

Miałem ten problem rozwiązany. Najwyraźniej ten komunikat jest używany w wielu typach błędów. Mój problem polegał na tym, że osiągnąłem maksymalnie 500 wysłanych maili.

zaloguj się na konto i ręcznie spróbuj wysłać wiadomość. Jeśli limit zostanie osiągnięty, poinformuje Cię o tym



2
smtp.Host = "smtp.gmail.com"; //host name
smtp.Port = 587; //port number
smtp.EnableSsl = true; //whether your smtp server requires SSL
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
smtp.Timeout = 20000;

1

Zmień hasło do Gmaila i spróbuj ponownie, potem powinno działać.

Nie wiem dlaczego, ale za każdym razem, gdy zmieniasz hosting, musisz zmienić hasło.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.