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?

110

Quero enviar um e-mail do meu aplicativo e escrevi o seguinte código para enviar e-mail

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

Estou executando no localhost, então que erro estou cometendo ao enviá-lo.

Quando eu envio o botão dá um erro como

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.

Código no arquivo 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="[email protected]" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="[email protected]" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="[email protected]">
        <network host="smtp.gmail.com" password="mypassword" port="587" userName="[email protected]"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

o que devo fazer para resolver este erro e enviar e-mail ??

Abhay Andhariya
fonte
possível duplicata do envio de e-mail em .NET pelo Gmail
Roman R.
Eu acho que você pode ter que olhar para esta resposta, também: stackoverflow.com/a/9572958/1136253
mrbengi
Eu tive o mesmo problema. verifique [esta postagem] [1] [1]: stackoverflow.com/a/20186909/709340
Moslem Hady
Você deve considerar especificar os dados de configuração do SMTP no arquivo de configuração e não substituí-los em um código - consulte os dados de configuração do SMTP em systemnetmail.com/faq/4.1.aspx
Michael Freidgeim

Respostas:

62

Primeiro verifique se há problemas relacionados à segurança do gmail. Você pode ter habilitado a autenticação dupla no gmail. Além disso, verifique sua caixa de entrada do gmail se estiver recebendo alertas de segurança. Nesses casos, verifique outra resposta de @mjb como abaixo

Abaixo está o item muito geral que sempre verifico primeiro para esses problemas

client.UseDefaultCredentials = true;

defina-o como falso.

Observe a resposta de @Joe King - você deve definir client.UseDefaultCredentials antes de definir client.Credentials

Ronak Patel
fonte
2
Nesse caso, você deve compartilhar seu código. A resposta acima é para o código em questão
Ronak Patel
7
Observe a resposta de @Joe King - você deve definir client.UseDefaultCredentials antes de definir client.Credentials
Aaron
1
Essa resposta não funcionará, acho que a maioria das pessoas enfrentou a segurança do lado do gmail. veja a resposta de mjb para uma solução adequada
Jerry Liang
2
Além disso, certifique-se de que o "Captcha" esteja desativado - isso pode ser necessário se você estiver executando o script em um servidor remoto (não é necessário quando executado em uma máquina local): accounts.google.com/DisplayUnlockCaptcha
Jens
3
Configurando client.UseDefaultCredentials = false; antes de client.Credentials e definindo client.EnableSsl = true; fez o truque no meu caso.
Empilhado em
140

Eu tenho o mesmo problema.

Eu encontrei esta solução:

O Google pode bloquear tentativas de login de alguns aplicativos ou dispositivos que não usam padrões de segurança modernos. Como esses aplicativos e dispositivos são mais fáceis de invadir, bloqueá-los ajuda a manter sua conta mais segura.

Alguns exemplos de aplicativos que não são compatíveis com os padrões de segurança mais recentes incluem:

  • O aplicativo Mail em seu iPhone ou iPad com iOS 6 ou inferior
  • O aplicativo Mail em seu Windows phone anterior ao lançamento 8.1
  • Alguns clientes de e-mail da área de trabalho, como Microsoft Outlook e Mozilla Thunderbird

Portanto, você deve habilitar o login menos seguro (ou acesso de aplicativo menos seguro ) em sua conta do Google.

Depois de entrar na conta do Google, vá para:

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

Em C #, você pode usar o seguinte código:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("[email protected]");
    mail.To.Add("[email protected]");
    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 protected]", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

-------------------
Informações compartilhadas por Michael Freidgeim na área de comentários abaixo:
Resposta semelhante com capturas de tela https://stackoverflow.com/a/32457468/52277

mjb
fonte
1
Isso, junto com a garantia de que o SSL estava habilitado no código, funcionou maravilhosamente, muito obrigado
Crouch
1
Obrigado @mjb por compartilhar a resposta. Isso salva minha vida :)
Mayeed 01 de
3
esta deve ser a resposta selecionada
thatOneGuy
2
Este foi o meu problema, obrigado por passar pelo problema e dar uma resposta mais explicativa.
Bojan
Funcionou para mim também. Obrigado @mjb
Rajbir Jawanda
44

Certifique-se de definir SmtpClient.Credentials após ligar SmtpClient.UseDefaultCredentials = false.

A ordem é importante, pois a configuração SmtpClient.UseDefaultCredentials = falseserá redefinida SmtpClient.Credentialscomo nula.

Joe King
fonte
2
Estou procurando a solução para isso há meia hora, o seu é o único postzinho na internet que encontrei que menciona o pedido disso. Obrigado cara.
4
@Joe King Você é simplesmente incrível, companheiro ... estava procurando por isso há 3 horas :)
Jatin
1
Obrigado @Joe King, pois faltam informações vitais nos documentos do MS. Esta foi a solução para o meu problema de envio com nome de usuário e senha também.
Aaron
1
Isso é facilmente esquecido, mas a ordem é importante, como acabei de descobrir.
GatesReign
1
sim. salvou meu dia. você precisa chamar UseDefaultCredentials = false antes de definir as credenciais.
Rendel
33

Pesquisei e tentei coisas diferentes durante horas. Para resumir, tive que levar em consideração os seguintes pontos:

  1. Use em smtp.gmail.comvez desmtp.google.com
  2. Use a porta 587
  3. Definir client.UseDefaultCredentials = false;antes de definir credenciais
  4. Ative o Access para aplicativos menos seguros
  5. Conjunto client.EnableSsl = true;

Se essas etapas não ajudarem, verifique esta resposta .
Talvez você possa encontrar algo útil neste FAQ do System.Net.Mail também.

Empilhado
fonte
1
Essa resposta é muito útil ... resolveu meu problema. Muito obrigado
Hari
1
se ainda não estiver funcionando, acesse este link g.co/allowaccess e permita o acesso
Portekoi
1
"Acesso para aplicativos menos seguros" salvou meu dia.
Romil Kumar Jain
1
Esta parte fez isso por mim: "Ligue o acesso para aplicativos menos seguros". Obrigado!
Tadej
11

Tente fazer o login em sua conta do gmail. ele fica bloqueado se você enviar e-mails usando o SMTP do gmail. Não sei o limite de e-mails que você pode enviar antes de ser bloqueado, mas se você entrar uma vez, ele funciona novamente a partir do código. certifique-se de que a configuração do webconfig está correta.

Shuchita Bora
fonte
Melhor resposta de fato! Eu entrei novamente e funcionou! PS: Tive de fornecer um captcha no Google
Bellash
Recebi este erro porque minha conta do Google está protegida com autenticação de dois fatores. Acabei criando uma conta dedicada para enviar o e-mail.
MvdD de
8

Experimente desta forma, acabei de fazer algumas alterações leves:

MailMessage msg = new MailMessage();

msg.From = new MailAddress("[email protected]");
msg.To.Add("[email protected]");
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("[email protected]", "mypassword");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

Também mostre seu arquivo app.config, se você tiver configurações de e-mail lá.

meda
fonte
Eu ainda não configurei nele. o que devo escrever ai?
Abhay Andhariya
não há arquivo app.config em meu aplicativo mvc.
Abhay Andhariya
Tentei muitas outras soluções, mas apenas esta funcionou. obrigado
Adil Malik
3

Encontrei o mesmo problema, mesmo definindo "UseDefaultCredentials" como false. Mais tarde, descobri que a causa raiz é que eu ativei a "verificação em duas etapas" em minha conta. Depois de desligá-lo, o problema desapareceu.

Soros Liu
fonte
4
Não desative a verificação em 2 etapas. Está aí por um motivo. Você pode gerar uma senha específica do aplicativo nas configurações do GMail e usá-la no SmtpClient. Você deve fazer isso independentemente, em vez de expor uma senha normal.
Daniel Dyson
3

Ative o aplicativo menos seguro a partir deste link e bum ...

Behzad Qureshi
fonte
Isso funcionou para mim .. Esta deve ser a resposta aceita
Noman
2

insira a descrição da imagem aqui Certifique-se de que o acesso a aplicativos menos seguros seja permitido.

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("[email protected]");
        mail.Sender = new MailAddress("[email protected]");
        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("[email protected]", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

            smtp.Send(mail);
        }
        catch (SmtpException e)
        {
            textBox1.Text= e.Message;
        }
Shivam Srivastava
fonte
1
O link para alternar a configuração para "Acessar aplicativo menos seguro" está aqui - google.com/settings/security/lesssecureapps Alterar a configuração não me ajudou a superar o erro
mvark
1

Abaixo está meu código. Eu também tive o mesmo erro, mas o problema é que eu dei 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 em Enviando e-mail

Ganesh Pillai N
fonte
1

Se for uma nova conta do Google, você deve enviar um e-mail (o primeiro) através da interface de usuário normal. Depois disso, você pode usar seu aplicativo / robô para enviar mensagens.

Ezequiel Santana
fonte
1

Você deve considerar especificar os dados de configuração SMTP no arquivo de configuração e não substituí-los em um código - consulte os dados de configuração SMTP em http://www.systemnetmail.com/faq/4.1.aspx

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="[email protected]">
                    <network defaultCredentials="false" host="smtp.example.com" port="25" userName="[email protected]" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>
Michael Freidgeim
fonte
1

Eu encontrei o mesmo problema várias vezes. Depois de habilitar a opção de aplicativo menos seguro, o problema foi resolvido. Habilite o aplicativo menos seguro aqui: https://myaccount.google.com/lesssecureapps

espero que isso ajude.

Mahmud
fonte
0

alguns servidores smtp (os seguros) exigem que você forneça o nome de usuário e o e-mail. Se for do Gmail, é provável que seja o problema de 'Login menos seguro' que você precisa resolver; caso contrário, você pode tentar:

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

observe que o e-mail de e o nome de usuário são diferentes, ao contrário de algumas implementações que se referem a eles como iguais.

chamar este método pode ser feito assim:

SendEmail("[email protected]", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);
Solar Yakir
fonte
0

Depois de ativar a opção menos segura e tentar outras soluções, se você ainda estiver enfrentando o mesmo problema, tente usar esta sobrecarga:

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

ao invés de:

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

Criei uma assinatura de desenvolvedor do Microsoft 365 (E5) hoje de manhã e usei-a para enviar um e-mail de teste usando as seguintes configurações

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

Não funcionou no início, pois continuei recebendo essa mensagem de erro com a exceção lançada por este código. Em seguida, passei cerca de 4 horas brincando com as configurações do centro de administração do Microsoft 365 e lendo artigos para descobrir o problema. Por fim, mudei minha senha do centro de administração do Microsoft 365 e funcionou perfeitamente. Portanto, vale a pena tentar alterar a senha ao receber esta mensagem, antes de pensar em qualquer solução antecipada.

Observe que a senha não era inválida com certeza, pois entrei na minha conta do Microsoft 365 sem problemas. no entanto, a alteração da senha resolveu o problema.

Kushan Randima
fonte
-1

Eu também estava enfrentando o problema de 'O servidor SMTP requer uma conexão segura ou o cliente não foi autenticado. A resposta do servidor foi: 5.5.0 Authentication Required 'então passei por muitos materiais da Internet, mas não me ajudou totalmente. Como eu resolvi

passo 1: smtp.gmail.com é o servidor do gmail, então vá para as configurações do gmail da sua conta-> clique em ver todas as configurações-> Encaminhamento e IMAP / POP-> verifique se o pop-up e o imap estão habilitados, caso não o habilite-> Salvar alterações. passo 2 clique em sua imagem de perfil do Gmail-> clique em Gerenciar sua conta do google-> vá para a guia de segurança-> verifique o acesso a aplicativos menos seguros (esta opção estará disponível se você não optou pela verificação em duas etapas) -> por padrão google irá defini-lo como desabilitado, habilitá-lo para usar sua senha real do Gmail trabalhando para enviar e-mail. observação: -Ativar o acesso ao gmail para aplicativos menos seguros pode ser perigoso para você, então não recomendo

etapa 3: -se sua conta tem a verificação em duas etapas ativada ou deseja usar uma senha diferente da senha real do Gmail usando a senha específica do aplicativo, tente o seguinte: - clique na imagem do perfil do Gmail-> clique em Gerenciar sua conta do Google-> vá para segurança guia-> pesquise APP PASSWORD-> selecione qualquer nome de aplicativo fornecido-> selecione qualquer nome de dispositivo-> clique em gerar-> copie a senha de 16 dígitos e cole-a em seu aplicativo, onde você deve inserir uma senha do Gmail no lugar de sua senha real do gmail.

Suryakant_Dubalgunde
fonte