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


260

Sto usando il seguente codice per inviare e-mail. Il codice funziona correttamente nel mio computer locale. Ma sul server di produzione sto ricevendo il messaggio di errore

var fromAddress = new MailAddress("mymailid@gmail.com");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("yourmailid@yourdoamain.com");

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);

E sul mio A / c Gmail ho ricevuto la seguente e-mail dopo aver eseguito il codice dal server di produzione

Ciao ,

Qualcuno ha recentemente usato la tua password per provare ad accedere al tuo account Google mymailid@gmail.com. Questa persona utilizzava un'applicazione come e-mail, client o dispositivo mobile.

Abbiamo impedito il tentativo di accesso nel caso in cui si trattasse di un dirottatore che tentava di accedere al tuo account. Esamina i dettagli del tentativo di accesso:

Venerdì 3 gennaio 2014 13:56:08 in punto Indirizzo IP UTC: xxx.xx.xx.xxx (abcd.net.) Località: Philadelphia PA, Filadelfia, PA, USA

Se non riconosci questo tentativo di accesso, qualcun altro potrebbe tentare di accedere al tuo account. È necessario accedere al proprio account e reimpostare immediatamente la password.

Resetta la password

Se sei stato tu e hai difficoltà ad accedere al tuo account, completa i passaggi per la risoluzione dei problemi elencati all'indirizzo http://support.google.com/mail?p=client_login

Cordiali saluti, Il team di Google Accounts


hai accesso al server di produzione
Arshad

Non ho accesso al server di produzione
vcs,

Disattiva la verifica in due passaggi.
Mangesh,


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

Risposte:


197

Questo in genere accade quando si tenta di accedere da un fuso orario o un computer con indirizzo IP diverso. Il server di produzione e l'id di posta elettronica utilizzati sono entrambi in fuso orario diverso. Scegli una di queste due soluzioni:

1) Accedi al server di produzione tramite accesso remoto e accedi a Gmail una volta con le tue credenziali. Chiederanno la conferma, la confermeranno e si disconnetteranno.

Oppure 2) accedi a Gmail sul tuo computer locale, segui questo link e scegli rivedi questa attività e intraprendi le azioni appropriate.


21
Un piccolo commento: vai su security.google.com/settings/security/activity e qui vedrai una connessione bloccata dal tuo codice. Consentili e dovrebbe aiutare in questo caso.
Alex Zhukovskiy,

68
Questo aiuterà anche molto: google.com/settings/security/lesssecureapps
George,

Sì, il motivo è la verifica in 2 passaggi attivata per l'account Gmail. Seleziona App / Dispositivo e fai clic sul pulsante Genera support.google.com/accounts/answer/185833
smily


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

301

Quando si tenta di inviare posta dal codice e viene visualizzato l'errore "Il server SMTP richiede una connessione protetta o il client non è stato autenticato. La risposta del server è stata: 5.5.1 Autenticazione richiesta", l'errore potrebbe verificarsi a causa dei seguenti casi.

caso 1: quando la password è errata

caso 2: quando si tenta di accedere da qualche app

caso 3: quando si tenta di accedere dal dominio diverso dal proprio fuso orario / dominio / computer (questo è il caso nella maggior parte degli scenari quando si invia posta dal codice)

C'è una soluzione per ciascuno

soluzione per il caso 1: inserire la password corretta.

soluzione 1 per il caso 2 : vai alle impostazioni di sicurezza al seguente link https://www.google.com/settings/security/lesssecureapps e abilita le app meno sicure. In questo modo sarai in grado di accedere da tutte le app.

soluzione 2 per il caso 2 : (consultare https://stackoverflow.com/a/9572958/52277 ) abilitare l'autenticazione a due fattori (ovvero la verifica in due passaggi), quindi generare una password specifica per l'applicazione. Utilizzare quella password appena generata per eseguire l'autenticazione tramite SMTP.

soluzione 1 per il caso 3: (potrebbe essere utile) è necessario rivedere l'attività. ma rivedere l'attività non sarà utile a causa degli ultimi standard di sicurezza, il collegamento non sarà utile. Quindi prova il caso seguente.

soluzione 2 per il caso 3 : se il codice è stato ospitato da qualche parte sul server di produzione e se si dispone dell'accesso al server di produzione, eseguire la connessione desktop remoto al server di produzione e provare ad accedere una volta dal browser del server di produzione. Questo aggiungerà l'eccedenza per l'accesso a google e ti sarà permesso di accedere dal codice.

Ma cosa succede se non si ha accesso al server di produzione. prova la soluzione 3

soluzione 3 per il caso 3: devi abilitare l'accesso da altro fuso orario / ip per il tuo account google.

per fare ciò segui il link https://g.co/allowaccess e consenti l'accesso facendo clic sul pulsante continua.

E questo è tutto. Ecco qui. Ora sarai in grado di accedere da qualsiasi computer e tramite qualsiasi app al tuo account Google.


10
Soluzione 2! Piccola bellezza!
George Harnwell,

2
Il link lesssecureapps sopra ha aiutato :)
Gautam Jain,

Wow, questo dovrebbe essere contrassegnato come risposta accettata. Grazie.
Nic,

5
il sito ospitato su azzurro deve seguire la soluzione 3 per il caso 3: collegamento finale che aiuta g.co/allowaccess
Ravi Anand

1
Soluzione 2 per il caso 3 - ha funzionato come un incantesimo per me. Grazie.
ss_mj

106

È un problema di sicurezza, Gmail per impostazione predefinita impedisce l'accesso al tuo account di posta elettronica da applicazioni personalizzate. Puoi configurarlo per accettare l'accesso dalla tua applicazione.

Dopo aver effettuato l'accesso alla tua e-mail, FARE CLIC QUI

Questo ti porterà alla pagina seguente

Pagina delle app meno sicure


1
Inoltre, se si dispone di un dominio personalizzato, gli utenti devono prima essere abilitati dall'amministratore del dominio per consentire l'accesso ad app meno sicure. Se sei un amministratore di dominio, vai al seguente link per abilitare questo admin.google.com/AdminHome#ServiceSettings/…
user551113

2
Questa risposta è fantastica Esso funziona magicamente. Grazie.
Thomas.Benz,

24

Dopo aver trascorso un paio d'ore oggi a provare tutte le soluzioni qui, non ero ancora in grado di superare questo errore esatto. Ho usato Gmail molte volte in questo modo, quindi sapevo che era qualcosa di stupido, ma nulla di ciò che ho fatto ha risolto il problema. Alla fine mi sono imbattuto nella soluzione nel mio caso, quindi ho pensato di condividere.

Innanzitutto, sono richieste anche la maggior parte delle risposte di cui sopra, ma nel mio caso, è stata una semplice questione di ordinamento del codice durante la creazione della SmtpClientclasse.

In questo primo frammento di codice di seguito, nota dove Credentials = credssi trova la linea. Questa implementazione genererà l'errore a cui fa riferimento questa domanda anche se tutto il resto è impostato correttamente.

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    Credentials = creds,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
}

Tuttavia, se si sposta la chiamata del setter Credenziali in basso, l'e-mail verrà inviata senza errori. Non ho apportato modifiche al codice circostante ... cioè ... il nome utente / la password, ecc. Chiaramente, o EnableSSL, UseDefaultCredentials, or the DeliveryMethoddipende Credentialsdall'impostazione prima ... Non ho testato tutto per capire quale fosse .

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    Credentials = creds
}

Spero che questo aiuti a salvare qualcun altro in futuro.


2
Nel mio caso, ho avuto lo stesso problema del tuo, riordinando il codice in modo che le credenziali arrivassero per ultimo funzionassero per me.
Dev

1
Non ci posso credere ma ha funzionato! Ho abilitato 2 passaggi, perché non volevo abilitare un flag meno sicuro, ma fino a quando non ho messo le credenziali per ultimo prima di inviarlo, non voleva funzionare. Incredibile!
Čikić Nenad,

6
Il problema è che nel UseDefaultCredentialssetter c'è questo codice: this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null;che sostituisce credentialsimpostato dal Credentialssetter. Per me sembra un SmtpClientbug
Tomasz Madeyski il

@TomaszMadeyski questa deve essere una risposta anziché un commento! questo è il mio problema ... come diavolo posso pensare che se imposto le credenziali sul costruttore e poi le assegni di nuovo su un valore falso UseDefaultCredentials = false sovrascrive le credenziali ... pazzo !! ma succede .... grazie youuuuu
FabianSilva,


12

Ciao ho avuto lo stesso problema

cosa ho fatto per risolverlo. è accendere l'app meno sicura. dopo la connessione al mio account Gmail. Ho inserito questo link: https://www.google.com/settings/security/lesssecureapps

Quindi accendo l'app protetta e, e ha funzionato. è stato detto anche sopra


Quindi qual è la differenza rispetto alla tua risposta per la risposta sopra ? La stessa risposta viene data prima di te il 12 gennaio 15 alle 10:36.
Dush

11

Ho un codice funzionante in precedenza che genera questo errore ora. Nessun problema con la password. Non è necessario nemmeno convertire il messaggio in base64. Si scopre che devo fare quanto segue:

  1. Disattiva l'autenticazione a 2 fattori
  2. Impostare "Consenti app meno sicure" su ON
  3. Accedi al tuo account Gmail dal server di produzione
  4. Vai anche qui per approvare l'attività di accesso
  5. Esegui la tua app nel server di produzione

Codice di lavoro

    public static void SendEmail(string emailTo, string subject, string body)
    {
        var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("youremail@gmail.com", "secretpassword"),
            EnableSsl = true
        };

        client.Send("youremail@gmail.com", emailTo, subject, body);
    }

Disattivazione dell'autenticazione a 2 fattori Disattivazione dell'autenticazione a 2 fattori

Imposta "Consenti app meno sicure" su ON (stessa pagina, scorri verso il basso) Consenti app meno sicure


9

Segui semplicemente il passaggio nell'email di Google e abilita le app meno sicure.


6

Ho affrontato lo stesso problema. Succede quando attivi la verifica in due passaggi (AMF). Disattiva la verifica in due passaggi e il problema dovrebbe essere risolto.


Non ho abilitato in due passaggi per questo account e ho avuto questo problema.
Shiv,

4

Di seguito è riportato il mio codice. Ho avuto anche lo stesso errore, ma il problema era che ho dato la mia password sbagliata. Il codice di seguito 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 nel mio blog


sto usando lo stesso codice che funziona nel mio computer locale ma non funziona sul server. Ottenere errore Il server SMTP richiede una connessione protetta o il client non è stato autenticato. La risposta del server è stata: 5.5.1 Autenticazione richiesta. .
Akshay Chawla,

1
ho contattato il mio provider di hosting che mi hanno detto: potremmo vedere che hai configurato SMTP di terze parti (smtp.gmail.com) che non supporterà nel nostro ambiente server condiviso. A causa di un eccessivo abuso della funzione di posta o di problemi di spamming, la funzione di posta non è supportata. Puoi inviare e-mail utilizzando PHPMailer, che è molto popolare e spesso utilizzato. ma il mio sito è costruito in mvc c #, quindi come posso usare phpmailer?
Akshay Chawla,


2

Ho avuto lo stesso problema per un'applicazione distribuita in Microsoft Azure.

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

Innanzitutto ho approvato tutti i dispositivi sconosciuti (alcuni indirizzi IP originari dell'Irlanda) nella pagina seguente (eseguito l'accesso come utente gmail): https://security.google.com/settings/u/1/security/secureaccount

Ho usato le seguenti impostazioni per il client:

var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("my_user_name@gmail.com", "my_password"); 

Ha iniziato a funzionare solo dopo aver impostato la seguente proprietà sul client smtp:

client.TargetName = "STARTTLS/smtp.gmail.com";

2

Quello che ha funzionato per me è stato attivare l'opzione per le app meno sicure (sto usando VB.NET)

Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
        Dim mail As New MailMessage()
        Dim SmtpServer As New SmtpClient("smtp.gmail.com")
        mail.From = New MailAddress("from@gmail.com")
        mail.[To].Add("to@gmail.com")
        mail.Subject = "subject"
        mail.Body = body
        Dim attachment As System.Net.Mail.Attachment
        attachment = New System.Net.Mail.Attachment(file_location)
        mail.Attachments.Add(attachment)
        SmtpServer.Port = 587
        SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
        SmtpServer.EnableSsl = True
        SmtpServer.Send(mail)
    End Sub

Quindi accedi al tuo account e poi vai su google.com/settings/security/lesssecureapps


2

Un commento di Tomasz Madeyski è ciò che ha risolto il mio problema ... dice che esiste un bug su SetDefaultCredential, dice:

"Il problema è che nel setter UseDefaultCredentials esiste questo codice: this.transport.Credentials = value? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials: (ICredentialsByHost) null; che ignora le credenziali impostate dal setter Credentials. Per me sembra un bug di SmtC.

se metti smtpClient.UseDefaultCredentials = falsedopo aver impostato le credenziali ... questa riga è impostata su null quelle credenziali ...


2

NOVEMBRE 2018, ho provato tutto quanto sopra senza successo.

Di seguito è la soluzione che ha funzionato finalmente. Sfortunatamente non utilizza SSL, ma funziona !!!

var fromAddress = new MailAddress(asd@asd.com, "From Name");
var toAddress = new MailAddress("tosend@asd.com", "To Name");

const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
    Host = "aspmx.l.google.com",
    Port = 25,
    EnableSsl = false
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}

1

Ho provato tutti i suggerimenti trovati qui, dall'abilitazione di app meno sicure, alla prova della porta 587 ... niente ha funzionato. Alla fine ho appena commentato la riga UseDefaultCredentials = false. Tutto ha funzionato se non avessi toccato quel booleano.


1
lo stesso qui..non posso credere che la linea singola abbia impiegato un'ora da me!
Wahid Masud,

0

Ho davvero esaminato molte idee, l'unica soluzione era in questo modo (funziona con diversi provider di posta elettronica):

            try
        {
            ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
            string host = dsProvider.Rows[y]["POP_hostOut"].ToString();
            int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString());  //587
            string[] email = von1.Split('@');
            string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
            string password = layer.getUserPassword(listSender.SelectedValue.ToString());
            SmtpClient client = new SmtpClient(host, port);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            //A idea from MSDN but it not works. You got the "The server response was: 5.5.1 Authentication Required."
            //System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, host);
            //System.Net.CredentialCache cache = new System.Net.CredentialCache();
            //cache.Add(host, port, "NTLM", myCreds);
            ///cache.GetCredential(host, port, "NTLM");   //NTLM
            client.Credentials = new System.Net.NetworkCredential(userName, password);
            client.Host = host;
            client.Port = port;
            client.EnableSsl = true;
            client.Send(message);
            ViewProgressbar();
        }
        catch (SmtpException ex)...

0

Sono un abbonato a google apps for business e trascorro le ultime due ore a occuparmi di questo, anche dopo avere tutte le impostazioni corrette (smtp, port, enableSSL, ecc.). Ecco cosa ha funzionato per me e per i siti Web che generavano l'errore 5.5.1 durante il tentativo di inviare un'e-mail:

  1. Accedi al tuo admin.google.com
  2. Fai clic su SICUREZZA <- se non è visibile, fai clic su "ALTRI CONTROLLI" e aggiungilo dall'elenco
  3. Fai clic su Impostazioni di base
  4. Scorri fino alla fine della casella Impostazioni di base, fai clic sul link: "Vai alle impostazioni per le app meno sicure"
  5. Seleziona l'opzione n. 3: imponi l'accesso ad app meno sicure per tutti gli utenti (non consigliato)
  6. Premi SALVA nella parte inferiore della finestra

Dopo aver fatto questo i miei moduli e-mail dal sito Web funzionavano di nuovo. In bocca al lupo!


0

Potrebbe essere necessario creare / generare una password APP specifica da Gmail. l'app o lo script useranno quindi questa nuova password invece della tua normale password. La tua password normale funzionerà ancora bene per te.

Questo è quello che ha fatto per me. Ho ancora utilizzato lo stesso account di posta elettronica, ma ho dovuto generare una nuova password specifica per l'app.

https://support.google.com/accounts/answer/185833?hl=en

Immagine dello schermo

Fondamentalmente puoi farlo qui: https://security.google.com/settings/security/apppasswords


0

Se stai usando Gmail.

  • 1 accesso al tuo account

    2- sfoglia questo link

    3- Consenti app meno sicure: ON

Godere....



0

non mettere il punto di interruzione prima di attendere smtp.SendMailAsync (mail);

:)

quando attende con un punto di interruzione dando questo errore quando rimuovo il punto di interruzione ha funzionato


-1

Ho usato tutte le soluzioni sopra menzionate ma alla fine ha funzionato solo dopo aver abilitato l'accesso IMAP dalle impostazioni di Gmail Collegamento per abilitare l'accesso IMAP nelle impostazioni di Gmail

Naturalmente, erano richiesti anche i punti delle altre soluzioni.


Questo non mi ha aiutato. L'abilitazione di IMAP ti consente solo di leggere i messaggi di posta elettronica Gmail da altri client di posta come Outlook, Thunderbird.
Kimbaudi,

-5

prova a cambiare l'host, questo è quello nuovo, ho ottenuto questa configurazione di Mozilla Thunderbird

Host = "smtp.googlemail.com"

quel lavoro per me

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.