Il server SMTP richiede una connessione sicura o il client non è stato autenticato. La risposta del server è stata: 5.5.1 Autenticazione richiesta?


110

Voglio inviare un'e-mail dalla mia domanda e ho scritto il seguente codice per l'invio della posta

    MailMessage msg = new MailMessage();

    msg.From = new MailAddress("mymailid");
    msg.To.Add("receipientid");
    msg.Subject = "test";
    msg.Body = "Test Content";
    msg.Priority = MailPriority.High;

    SmtpClient client = new SmtpClient();

    client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.EnableSsl = true;
    client.UseDefaultCredentials = true;

    client.Send(msg);

Lo sto eseguendo su localhost, quindi quale errore sto facendo per inviarlo.

Quando invio il pulsante dà un errore come

Il server SMTP richiede una connessione sicura o il client non è stato autenticato. La risposta del server è stata: 5.5.1 Autenticazione richiesta.

Codice nel file Web.config

 <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />   
    <add key="smtpServer" value="smtp.gmail.com" />
    <add key="EnableSsl" value = "true"/>
    <add key="smtpPort" value="587" />
    <add key="smtpUser" value="sender@gmail.com" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="sender@gmail.com" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="sender@gmail.com">
        <network host="smtp.gmail.com" password="mypassword" port="587" userName="sender@gmail.com"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

cosa devo fare per risolvere questo errore e inviare posta ??



Penso che si può guardare a questa risposta, anche: stackoverflow.com/a/9572958/1136253
mrbengi

Ho avuto lo stesso problema. controlla [questo post] [1] [1]: stackoverflow.com/a/20186909/709340
Moslem Hady

Dovresti considerare di specificare i dati di configurazione SMTP nel file di configurazione e non sovrascriverli in un codice - vedi i dati di configurazione SMTP su systemnetmail.com/faq/4.1.aspx
Michael Freidgeim,

Risposte:


62

Prima controlla i problemi relativi alla sicurezza di Gmail. Potresti aver abilitato la doppia autenticazione in Gmail. Controlla anche la tua casella di posta Gmail se ricevi avvisi di sicurezza. In questi casi, controlla l'altra risposta di @mjb come di seguito

Di seguito è la cosa molto generale che controllo sempre prima per tali problemi

client.UseDefaultCredentials = true;

impostalo su falso.

Nota la risposta di @Joe King : devi impostare client.UseDefaultCredentials prima di impostare client.


2
In tal caso dovresti condividere il tuo codice. La risposta sopra è per il codice in questione
Ronak Patel

7
Nota la risposta di @Joe King: devi impostare client.UseDefaultCredentials prima di impostare client.Credentials
Aaron

1
Questa risposta non funzionerà, penso che la maggior parte delle persone abbia affrontato la sicurezza sul lato Gmail. vedi la risposta di mjb per una soluzione adeguata
Jerry Liang

2
Inoltre, assicurati che il "Captcha" sia disabilitato: potrebbe essere necessario se stai eseguendo lo script su un server remoto (non necessario se in esecuzione su un computer locale): accounts.google.com/DisplayUnlockCaptcha
Jens

3
Impostazione di client.UseDefaultCredentials = false; prima di client.Credentials e l'impostazione client.EnableSsl = true; ha fatto il trucco nel mio caso.
Stacked

140

Ho lo stesso problema.

Ho trovato questa soluzione:

Google potrebbe bloccare i tentativi di accesso da alcune app o dispositivi che non utilizzano i moderni standard di sicurezza. Poiché è più facile accedere a queste app e dispositivi, bloccarli aiuta a mantenere il tuo account più sicuro.

Alcuni esempi di app che non supportano i più recenti standard di sicurezza includono:

  • L'app Mail sul tuo iPhone o iPad con iOS 6 o precedente
  • L'app Mail sul tuo telefono Windows precedente alla versione 8.1
  • Alcuni client di posta desktop come Microsoft Outlook e Mozilla Thunderbird

Pertanto, devi abilitare l'accesso meno sicuro (o l'accesso all'app meno sicuro ) nel tuo account Google.

Dopo aver effettuato l'accesso all'account Google, vai a:

https://www.google.com/settings/security/lesssecureapps
o
https://myaccount.google.com/lesssecureapps

In C # puoi usare il codice seguente:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("email@gmail.com");
    mail.To.Add("somebody@domain.com");
    mail.Subject = "Hello World";
    mail.Body = "<h1>Hello</h1>";
    mail.IsBodyHtml = true;
    mail.Attachments.Add(new Attachment("C:\\file.zip"));

    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
    {
        smtp.Credentials = new NetworkCredential("email@gmail.com", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

-------------------
Informazioni condivise da Michael Freidgeim nell'area commenti sottostante:
risposta simile con screenshot https://stackoverflow.com/a/32457468/52277


1
Questo, oltre a garantire che SSL fosse abilitato nel codice, ha funzionato a meraviglia, grazie mille
Crouch

1
Di te @mjb per aver condiviso la risposta. Mi salva la vita :)
Mayeed

3
questa dovrebbe essere la risposta selezionata
thatOneGuy

2
Questo era il mio problema, grazie per aver affrontato il problema e aver fornito una risposta più esplicativa.
Bojan

Ha funzionato anche per me. Grazie @mjb
Rajbir Jawanda

44

Assicurati di impostare SmtpClient.Credentials dopo aver chiamato SmtpClient.UseDefaultCredentials = false.

L'ordine è importante poiché l'impostazione SmtpClient.UseDefaultCredentials = falseverrà reimpostata SmtpClient.Credentialssu null.


2
Ho cercato la soluzione per mezz'ora, il tuo è l'unico post su Internet che ho trovato che menziona l'ordine di questo. Grazie compagno.

4
@ Joe King Sei semplicemente fantastico amico ..... cercavo questo da 3 ore :)
Jatin

1
Grazie @ Joe King che mancano informazioni vitali nei documenti di MS. Questa è stata la soluzione al mio problema di invio anche con nome utente e password.
Aaron

1
Questo è facilmente trascurato, ma l'ordinazione è importante come ho appena scoperto.
GatesReign

1
si. mi ha salvato la giornata. è necessario chiamare UseDefaultCredentials = false prima di impostare le credenziali.
Rendel

33

Ho cercato e provato cose diverse per ore .. Per riassumere, ho dovuto prendere in considerazione i seguenti punti:

  1. Usa smtp.gmail.cominvece dismtp.google.com
  2. Usa la porta 587
  3. Impostare client.UseDefaultCredentials = false;prima di impostare le credenziali
  4. Attiva Accesso per app meno sicure
  5. Impostato client.EnableSsl = true;

Se questi passaggi non sono stati d'aiuto, controlla questa risposta .
Forse puoi trovare qualcosa di utile anche in questa FAQ di System.Net.Mail .


1
Questa risposta è molto utile ... ha risolto il mio problema. Grazie mille
Hari

1
se ancora non funziona, vai su questo link g.co/allowaccess e consenti l'accesso
Portekoi

1
"Accesso per app meno sicure" mi ha salvato la giornata.
Romil Kumar Jain

1
Questa parte lo ha fatto per me: "Attiva l'accesso per le app meno sicure". Grazie!
Tadej

11

Prova ad accedere al tuo account Gmail. si blocca se invii email utilizzando gmail SMTP. Non conosco il limite di e-mail che puoi inviare prima che venga bloccato, ma se accedi una volta, funziona di nuovo dal codice. assicurati che le tue impostazioni webconfig siano corrette.


La migliore risposta davvero! Ho effettuato di nuovo l'accesso e ha funzionato! PS: ho dovuto fornire un captcha su Google
Bellash

Ho ricevuto questo errore poiché il mio account Google è protetto con l'autenticazione a due fattori. Ho finito per creare un account dedicato da cui inviare l'email.
MvdD

8

Prova in questo modo, ho appena apportato alcune lievi modifiche:

MailMessage msg = new MailMessage();

msg.From = new MailAddress("mymailid@gmail.com");
msg.To.Add("receipientid@gmail.com");
msg.Subject = "test";
msg.Body = "Test Content";
//msg.Priority = MailPriority.High;


using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential("mymailid@gmail.com", "mypassword");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

Mostra anche il tuo file app.config, se hai le impostazioni di posta.


Non l'ho ancora configurato. cosa dovrei scrivere lì?
Abhay Andhariya

non c'è alcun file app.config nella mia applicazione mvc.
Abhay Andhariya

Ho provato molte altre soluzioni, ma solo questa ha funzionato. Grazie
Adil Malik


3

Ho riscontrato lo stesso problema anche se ho impostato "UseDefaultCredentials" su false. Successivamente ho scoperto che la causa principale è che ho attivato la "verifica in due passaggi" nel mio account. Dopo averlo spento, il problema è scomparso.


4
Non disattivare la verifica in due passaggi. C'è un motivo. È possibile generare una password specifica per l'applicazione nelle impostazioni di GMail e utilizzarla in SmtpClient. Dovresti farlo indipendentemente piuttosto che esporre una normale password.
Daniel Dyson

3

Attiva l'app meno sicura da questo link e boom ...


Questo ha funzionato per me .. Questa deve essere la risposta accettata
Noman

2

inserisci qui la descrizione dell'immagine Assicurati che l'accesso all'app meno sicura sia consentito.

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("xx@gmail.com");
        mail.Sender = new MailAddress("xx@gmail.com");
        mail.To.Add("external@emailaddress");
        mail.IsBodyHtml = true;
        mail.Subject = "Email Sent";
        mail.Body = "Body content from";

        SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
        smtp.UseDefaultCredentials = false;

        smtp.Credentials = new System.Net.NetworkCredential("xx@gmail.com", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

            smtp.Send(mail);
        }
        catch (SmtpException e)
        {
            textBox1.Text= e.Message;
        }

1
Il collegamento per attivare o disattivare l'impostazione per "Accesso all'app meno sicura" è qui: google.com/settings/security/lesssecureapps La modifica dell'impostazione non mi ha aiutato a superare l'errore
mvark

1

Di seguito è riportato il mio codice Ho anche avuto lo stesso errore ma il problema era che ho dato la mia password sbagliata. Il codice sottostante funzionerà perfettamente.

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");              
            mail.From = new MailAddress("fromaddress@gmail.com");
            mail.To.Add("toaddress1@gmail.com");
            mail.To.Add("toaddress2@gmail.com");
            mail.Subject = "Password Recovery ";
            mail.Body += " <html>";
            mail.Body += "<body>";
            mail.Body += "<table>";

            mail.Body += "<tr>";
            mail.Body += "<td>User Name : </td><td> HAi </td>";
            mail.Body += "</tr>";

            mail.Body += "<tr>";
            mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
            mail.Body += "</tr>";

            mail.Body += "</table>";
            mail.Body += "</body>";
            mail.Body += "</html>";

            mail.IsBodyHtml = true;
            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);

Puoi riferirlo in Invio di posta


1

Se si tratta di un nuovo account Google, devi inviare un'e-mail (la prima) tramite l'interfaccia utente normale. Dopodiché puoi usare la tua applicazione / robot per inviare messaggi.


1

È necessario considerare di specificare i dati di configurazione SMTP nel file di configurazione e non sovrascriverli in un codice - vedere i dati di configurazione SMTP su http://www.systemnetmail.com/faq/4.1.aspx

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="admin@example.com">
                    <network defaultCredentials="false" host="smtp.example.com" port="25" userName="admin@example.com" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>



0

alcuni server smtp (quelli sicuri) richiedono di fornire sia il nome utente che l'email, se è Gmail, è molto probabile che sia il problema di "Accesso meno sicuro" che devi risolvere, altrimenti puoi provare:

public static void SendEmail(string address, string subject, 
    string message, string email, string username, string password, 
    string smtp, int port)
{
    var loginInfo = new NetworkCredential(username, password);
    var msg = new MailMessage();
    var smtpClient = new SmtpClient(smtp, port);

    msg.From = new MailAddress(email);
    msg.To.Add(new MailAddress(address));
    msg.Subject = subject;
    msg.Body = message;
    msg.IsBodyHtml = true;

    smtpClient.EnableSsl = true;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = loginInfo;
    smtpClient.Send(msg);
}

notare che l'e-mail da e il nome utente sono diversi a differenza di alcune implementazioni che si riferiscono a loro come uguali.

chiamare questo metodo può essere fatto in questo modo:

SendEmail("to-mail@gmail.com", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);

0

Dopo aver attivato l'opzione meno sicura e provato altre soluzioni, se stai ancora affrontando lo stesso problema, prova a utilizzare questo sovraccarico:

client.Credentials = new NetworkCredential("mymailid", "mypassword");

invece di:

client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");

0

Oggi mattina ho creato un abbonamento a Microsoft 365 Developer (E5) e l'ho utilizzato per inviare un'e-mail di prova utilizzando le seguenti impostazioni

using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential(username, password);
    client.Host = "smtp.office365.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

All'inizio non ha funzionato, poiché ho continuato a ricevere questo messaggio di errore con l'eccezione generata da questo codice. Quindi, ho trascorso circa 4+ ore a giocare con le impostazioni dell'interfaccia di amministrazione di Microsoft 365 e leggere articoli per capire il problema. Alla fine ho cambiato la password del mio centro di amministrazione di Microsoft 365 e ha funzionato a meraviglia. Quindi, vale la pena provare a cambiare la password quando ricevi questo messaggio, prima di pensare a qualsiasi soluzione anticipata.

Tieni presente che la password non era sicuramente valida poiché ho effettuato l'accesso al mio account Microsoft 365 senza problemi. tuttavia, la modifica della password ha risolto il problema.


-1

Stavo anche affrontando il problema come "Il server SMTP richiede una connessione sicura o il client non è stato autenticato. La risposta del server è stata: 5.5.0 Autenticazione richiesta 'quindi ha esaminato così tanto materiale Internet ma non mi ha aiutato completamente. Come l'ho risolto

step1: smtp.gmail.com è il server gmail quindi vai alle impostazioni gmail del tuo account-> fai clic su vedi tutte le impostazioni-> Inoltro e IMAP / POP-> controlla pop e imap è abilitato, se non abilitalo-> Salva modifiche. step2-fai clic sulla tua immagine del profilo gmail-> fai clic su Gestisci il tuo account google-> vai alla scheda sicurezza-> controlla l'accesso ad app meno sicure (questa opzione sarà disponibile se non opti per la verifica in due passaggi) -> per impostazione predefinita google lo imposterà come disabilitato, abiliterà l'utilizzo della tua vera password gmail funzionante per l'invio di email. nota: -Abilitare l'accesso a Gmail per app meno sicure, potrebbe essere pericoloso per te, quindi non lo consiglio

step3: -se il tuo account ha la verifica in due passaggi abilitata o desideri utilizzare una password diversa da gmail Password reale utilizzando una password specifica per l'app, quindi prova questo: - fai clic sull'immagine del tuo profilo gmail-> fai clic su Gestisci il tuo account google-> vai alla sicurezza tab-> cerca APP PASSWORD-> seleziona qualsiasi nome app dato-> seleziona qualsiasi nome dispositivo-> fai clic su genera-> copia la password di 16 cifre e incollala nella tua app dove devi inserire una password gmail al posto di la tua vera password Gmail.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.