Erro do Gmail: o servidor SMTP requer uma conexão segura ou o cliente não foi autenticado. A resposta do servidor foi: 5.5.1 Autenticação necessária

260

Estou usando o seguinte código para enviar email. O código funciona corretamente na minha máquina local. Mas no servidor de produção, estou recebendo a mensagem de erro

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

E no meu Gmail A / c, recebi o seguinte email após executar o código do servidor de produção

Oi ,

Alguém recentemente usou sua senha para tentar fazer login na sua Conta do Google [email protected]. Essa pessoa estava usando um aplicativo como email, cliente ou dispositivo móvel.

Impedimos a tentativa de login, caso este fosse um seqüestrador tentando acessar sua conta. Revise os detalhes da tentativa de login:

Sexta-feira, 3 de janeiro de 2014 13:56:08 horas Endereço IP UTC: xxx.xx.xx.xxx (abcd.net.) Localização: Philadelphia PA, Philadelphia, PA, EUA

Se você não reconhecer esta tentativa de login, outra pessoa pode estar tentando acessar sua conta. Você deve entrar na sua conta e redefinir sua senha imediatamente.

Redefinir senha

Se esse foi você e você está tendo problemas para acessar sua conta, siga as etapas de solução de problemas listadas em http://support.google.com/mail?p=client_login

Atenciosamente, Equipe de Contas do Google

vcs
fonte
você tem o acesso de servidor de produção
Arshad
Eu não tenho acesso ao servidor de produção
vcs
Desativar verificação em duas etapas ..
Mangesh
1
Além disso, verifique se o "Captcha" do google está desativado - isso pode ser necessário se você estiver executando o script em um servidor remoto (não necessário ao executar na máquina local): accounts.google.com/DisplayUnlockCaptcha
Jens

Respostas:

197

Isso geralmente acontece quando você tenta fazer login em um fuso horário ou computador de endereço IP diferente. O servidor de produção e o ID de email que você usou estão em um fuso horário diferente. Escolha uma destas duas soluções:

1) Faça login no servidor de produção via acesso remoto e entre no gmail uma vez com suas credenciais. Eles pedirão a confirmação, confirmarão e sairão.

Ou 2) efetue login no gmail no computador local, siga este link e escolha revisar esta atividade e tomar as ações adequadas.

Arshad
fonte
21
Um pequeno comentário: acesse security.google.com/settings/security/activity e aqui você verá uma conexão bloqueada do seu código. Permita-os e deve ajudar neste caso.
Alex Zhukovskiy
68
Isso também ajudará bastante: google.com/settings/security/lesssecureapps
George
Sim, o motivo é a verificação em duas etapas ativada para a conta do Gmail. Selecione Aplicativo / Dispositivo e clique no botão Gerar support.google.com/accounts/answer/185833
smily
8
Além disso, verifique se o "Captcha" do google está desativado - isso pode ser necessário se você estiver executando o script em um servidor remoto (não necessário ao executar na máquina local): accounts.google.com/DisplayUnlockCaptcha
Jens
301

Ao tentar enviar email do código e você encontra o erro "O servidor SMTP requer uma conexão segura ou o cliente não foi autenticado. A resposta do servidor foi: 5.5.1 Autenticação necessária", o erro pode ocorrer devido aos seguintes casos.

caso 1: quando a senha está errada

caso 2: quando você tenta fazer login em algum aplicativo

caso 3: quando você tenta fazer login a partir do domínio que não seja seu fuso horário / domínio / computador (esse é o caso na maioria dos cenários ao enviar e-mails a partir do código)

Existe uma solução para cada

solução para o caso 1: digite a senha correta.

solução 1 para o caso 2 : acesse as configurações de segurança no link a seguir https://www.google.com/settings/security/lesssecureapps e ative aplicativos menos seguros. Para que você possa fazer login em todos os aplicativos.

solução 2 para o caso 2 : (consulte https://stackoverflow.com/a/9572958/52277 ) habilite a autenticação de dois fatores (também conhecida como verificação em duas etapas) e gere uma senha específica do aplicativo. Use essa senha recém-gerada para autenticar via SMTP.

solução 1 para o caso 3: (isso pode ser útil), você precisa revisar a atividade. mas revisar a atividade não será útil, devido aos mais recentes padrões de segurança, o link não será útil. Então tente o caso abaixo.

solução 2 para o caso 3 : se você hospedou seu código em algum lugar do servidor de produção e se tiver acesso ao servidor de produção, faça a conexão da área de trabalho remota com o servidor de produção e tente efetuar o login uma vez no navegador do servidor de produção. Isso adicionará uma excitação para o login no google e você poderá fazer login a partir do código.

Mas e se você não tiver acesso ao servidor de produção. tente a solução 3

solução 3 para o caso 3: é necessário ativar o login de outro fuso horário / ip para sua conta do google.

para fazer isso, siga o link https://g.co/allowaccess e permita o acesso clicando no botão continuar.

E é isso. Aqui está. Agora você poderá fazer login em qualquer computador e por qualquer meio de aplicativo na sua conta do Google.

Roshan Parmar
fonte
10
Solução 2! Você pequena beleza!
precisa saber é o seguinte
2
lesssecureapps link acima ajudou :)
Gautam Jain
Uau, isso deve ser marcado como resposta aceita.
Nic
5
site hospedado na necessidade Azure seguir solução a 3 para o caso 3: elo final que ajuda g.co/allowaccess
Ravi Anand
1
Solução 2 para o caso 3 - funcionou como um encanto para mim. Obrigado.
Ss_mj 25/05
106

É um problema de segurança, por padrão o Gmail impede o acesso à sua conta de email a partir de aplicativos personalizados. Você pode configurá-lo para aceitar o login do seu aplicativo.

Após fazer login no seu e-mail, CLIQUE AQUI

Isso o levará à página seguinte

Página Aplicativos menos seguros

Sayka
fonte
1
Além disso, se você tiver um domínio personalizado, primeiro os usuários precisam ser habilitados pelo administrador do domínio para permitir o acesso a aplicativos menos seguros. Se você é um administrador de domínio, acesse o seguinte link para ativar esse admin.google.com/AdminHome#ServiceSettings/...
user551113
2
Esta resposta é ótima. Ele funciona como um encanto. Obrigado.
Thomas.Benz
24

Depois de passar algumas horas hoje tentando todas as soluções aqui, ainda não consegui superar esse erro exato. Eu usei o gmail várias vezes dessa maneira, então sabia que era algo estúpido, mas nada que eu fiz corrigiu o problema. Finalmente encontrei a solução no meu caso, então pensei em compartilhar.

Primeiro, a maioria das respostas acima também é necessária, mas no meu caso, era uma simples questão de ordenar o código durante a criação da SmtpClientclasse.

Neste primeiro trecho de código abaixo, observe onde a Credentials = credslinha está localizada. Esta implementação irá gerar o erro mencionado nesta pergunta, mesmo se você tiver tudo configurado corretamente.

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
}

No entanto, se você mover a chamada de configuração Credentials para o final, o email será enviado sem erros. Não fiz alterações no código ao redor ... ou seja, o nome de usuário / senha, etc. Claramente, o EnableSSL, UseDefaultCredentials, or the DeliveryMethoddepende do Credentialsprimeiro conjunto ... Não testei tudo para descobrir qual era .

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
}

Espero que isso ajude a salvar outras pessoas com dores de cabeça no futuro.

user1011627
fonte
2
No meu caso, tive o mesmo problema que o seu, reordenando o código para que as credenciais chegassem pela última vez funcione para mim.
Dev
1
Não acredito, mas funcionou! Habilitei a etapa 2, porque não queria habilitar o sinalizador menos seguro, mas até colocar a Credencial por último antes de Enviar, ele não queria funcionar. Incrível!
Čikić Nenad
6
O problema é que no UseDefaultCredentialssetter existe este código: this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null;que substitui o setter credentialspelo Credentialssetter. Para mim, parece que SmtpClienté o bug
Tomasz Madeyski 13/11
@TomaszMadeyski isso tem que ser uma resposta em vez de comentar! esse é o meu problema ... como diabos eu posso pensar que se eu definir credenciais no construtor e depois atribuir a um valor falso novamente UseDefaultCredentials = false ele substitui as credenciais ... louco !! mas isso acontece .... obrigado youuuuu
FabianSilva 23/02
12

Olá, tive o mesmo problema,

o que eu fiz para resolvê-lo. é ativar o aplicativo menos seguro. depois de me conectar à minha conta do Gmail. Entrei neste link: https://www.google.com/settings/security/lesssecureapps

Então eu ligo o aplicativo seguro e, e ele funcionou. já foi dito acima

Barak Rosenfeld
fonte
Então, qual é a diferença do que sua resposta para a resposta acima ? A mesma resposta é dada a você em 12 de janeiro de 15 às 10:36.
Dush
11

Eu tenho um código que trabalha anteriormente que lança esse erro agora. Não há problema na senha. Também não é necessário converter a mensagem em base64. Acontece que eu preciso fazer o seguinte:

  1. Desativar autenticação de dois fatores
  2. Defina "Permitir aplicativos menos seguros" para LIGADO
  3. Faça login na sua conta do Gmail no servidor de produção
  4. Acesse aqui também para aprovar a atividade de login
  5. Execute seu aplicativo no servidor de produção

Código de trabalho

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

        client.Send("[email protected]", emailTo, subject, body);
    }

Desativando a autenticação de dois fatores Desativando a autenticação de dois fatores

Defina "Permitir aplicativos menos seguros" para LIGADO (mesma página, é necessário rolar para baixo) Permitir aplicativos menos seguros

Jeson Martajaya
fonte
9

Basta seguir a etapa no email do google e ativar aplicativos menos seguros.

Trung
fonte
6

Eu enfrentei o mesmo problema. Isso acontece quando você ativa a verificação em duas etapas (MFA). Basta desativar a verificação em duas etapas e seu problema deve ser resolvido.

Anik
fonte
Eu não tinha duas etapas ativadas para esta conta e tive esse problema.
Shiv
4

Abaixo está o meu código.Eu também tive o mesmo erro, mas o problema foi que eu dei a minha senha errada.O código abaixo funcionará perfeitamente ... tente

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");             
            mail.From = new MailAddress("[email protected]");
            mail.To.Add("[email protected]");
            mail.To.Add("[email protected]");
            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);

Você pode consultá-lo no meu blog

Ganesh Pillai N
fonte
Estou usando o mesmo código que está funcionando na minha máquina local, mas não está funcionando no servidor. Obtendo erro O servidor SMTP requer uma conexão segura ou o cliente não foi autenticado. A resposta do servidor foi: 5.5.1 Autenticação necessária. .
Akshay Chawla
1
Entrei em contato com meu provedor de hospedagem e eles disseram: Pudemos ver que você configurou o SMTP de terceira parte (smtp.gmail.com), que não é compatível com nosso ambiente de servidor compartilhado. Devido ao abuso excessivo da função de email ou problema de spam, a função de email não é suportada. Você pode enviar e-mail usando o PHPMailer, que é muito popular e frequentemente usado. mas meu site é compilado em mvc c #, então como posso usar o phpmailer?
Akshay Chawla
3

basta ativar a configuração do ou gmail. veja abaixo a imagem dada:

insira a descrição da imagem aqui

Rajesh Paliwal
fonte
2

Eu tive o mesmo problema para um aplicativo implantado no Microsoft Azure.

SmtpException: o servidor SMTP requer uma conexão segura ou o cliente não foi autenticado. A resposta do servidor foi: 5.5.1 Autenticação necessária.

Primeiro, aprovei todos os dispositivos desconhecidos (alguns endereços IP originários da Irlanda) na página a seguir (conectado como usuário do gmail): https://security.google.com/settings/u/1/security/secureaccount

Eu usei as seguintes configurações para o cliente:

var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("[email protected]", "my_password"); 

Ele começou a funcionar somente depois de eu definir a seguinte propriedade no cliente smtp:

client.TargetName = "STARTTLS/smtp.gmail.com";
haiiaaa
fonte
2

O que funcionou para mim foi ativar a opção para aplicativos menos seguros (estou usando o 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("[email protected]")
        mail.[To].Add("[email protected]")
        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

Portanto, faça login na sua conta e acesse google.com/settings/security/lesssecureapps

Edgar
fonte
2

Um comentário de Tomasz Madeyski foi o que corrigiu meu problema ... ele diz que existe um bug no SetDefaultCredential, ele diz:

"O problema é que no setter UseDefaultCredentials existe este código: this.transport.Credentials = value? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials: (ICredentialsByHost) null; que substitui as credenciais definidas pelo setter de credenciais. Para mim, parece o bug do SmtpClient"

se você colocar smtpClient.UseDefaultCredentials = falsedepois de definir credenciais ... essa linha será definida como nula essas credenciais ...

FabianSilva
fonte
2

NOVEMBRO 2018, tentaram de tudo sem sucesso.

Abaixo está a solução que funcionou finalmente. Infelizmente não está usando SSL, mas funciona !!!

var fromAddress = new MailAddress(asd@asd.com, "From Name");
var toAddress = new MailAddress("[email protected]", "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);
}
InGeek
fonte
1

Tentei todas as sugestões encontradas aqui, desde a habilitação de aplicativos menos seguros até a porta 587 ... nada funcionou. Finalmente, apenas comentei a linha UseDefaultCredentials = false. Tudo funcionava se eu não tocasse aquele booleano.

Kris Coleman
fonte
1
mesmo aqui ... eu não posso acreditar que uma única linha levou uma hora de mim!
Wahid Masud
0

Eu realmente olhei para muitas idéias, a única solução era a seguinte (funciona com diferentes provedores de email):

            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)...
Walter
fonte
0

Sou assinante do google apps for business e passo as últimas duas horas apenas lidando com isso, mesmo depois de ter todas as configurações corretas (smtp, port, enableSSL, etc.). Aqui está o que funcionou para mim e para os sites que estavam lançando o erro 5.5.1 ao tentar enviar um email:

  1. Faça login no seu admin.google.com
  2. Clique em SEGURANÇA <- se não estiver visível, clique em "MAIS CONTROLOS" e adicione-o da lista
  3. Clique em configurações básicas
  4. Role até a parte inferior da caixa Configurações básicas, clique no link: 'Vá para configurações para aplicativos menos seguros'
  5. Selecione a opção nº 3: impor acesso a aplicativos menos seguros para todos os usuários (não recomendado)
  6. Pressione SALVAR na parte inferior da janela

Depois de fazer isso, meus formulários de e-mail do site estavam funcionando novamente. Boa sorte!

RichieMN
fonte
0

Se você estiver usando o Gmail.

  • 1 logon na sua conta

    2- procure este link

    3- Permitir aplicativos menos seguros: LIGADO

Aproveitar....

Muhammad Azeem
fonte
0

não coloque o ponto de interrupção antes de aguardar smtp.SendMailAsync (mail);

:)

quando ele aguarda com um ponto de interrupção dando esse erro quando eu removo o ponto de interrupção, ele funcionou

Hamit YILDIRIM
fonte
-1

Usei todas as soluções acima mencionadas, mas finalmente funcionou apenas depois de ativar o Acesso IMAP a partir das configurações do Gmail Link para Ativar acesso IMAP nas configurações do gmail

Obviamente, os pontos nas outras soluções também eram necessários.

AndroidMechanic - Viral Patel
fonte
Isso não me ajudou. A ativação do IMAP apenas permite que você leia as mensagens de email do Gmail de outros clientes de email como Outlook, Thunderbird.
Kimbaudi 11/11
-5

tente mudar o host, esse é o novo, eu peguei esse mozilla thunderbird

Host = "smtp.googlemail.com"

isso funciona para mim

patogalarzar
fonte