Envio de email através do servidor SMTP do Gmail com c #

Por alguma razão, nem a resposta aceita nem quaisquer outras funcionam para mim para ” Enviar e-mail no .NET através do Gmail “. Por que eles não funcionariam?

ATUALIZAÇÃO: Eu tentei todas as respostas (aceitas e outras) na outra pergunta, mas nenhuma delas funcionou.

Gostaria apenas de saber se funciona para qualquer outra pessoa, caso contrário, o Google pode ter mudado alguma coisa (o que aconteceu antes).

Quando eu tento o pedaço de código que usa SmtpDeliveryMethod.Network , recebo rapidamente um SmtpException em Enviar (mensagem). A mensagem é

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. Saiba mais em “<- sério, termina aí.

ATUALIZAR:

Essa é uma pergunta que fiz há muito tempo e a resposta aceita é o código que usei muitas vezes em projetos diferentes.

Tomei algumas das ideias nesta postagem e outros projetos do EmailSender para criar um projeto do EmailSender no Codeplex . Ele foi projetado para testabilidade e suporta meus serviços SMTP favoritos, como GoDaddy e Gmail.

CVertex, certifique-se de rever o seu código e, se isso não revelar nada, postá-lo. Eu estava apenas habilitando isso em um site ASP.NET de teste em que estava trabalhando, e funciona.

Na verdade, em algum momento eu tive um problema no meu código. Eu não vi isso até que eu tinha uma versão mais simples em um programa de console e vi que estava funcionando (sem alteração no lado do Gmail como você estava preocupado). O código abaixo funciona exatamente como as amostras que você mencionou:

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

Eu também consegui trabalhar usando uma combinação de web.config, http://msdn.microsoft.com/en-us/library/w355a94k.aspx e código (porque não há nenhum correspondente EnableSsl no arquivo de configuração :().

O SEGUINTE QUASE É CERTAMENTE A RESPOSTA À SUA PERGUNTA, CASO TIVESSE QUE MAIS FOI FALHADA :

Eu tenho exatamente o mesmo erro, verifica-se o novo algoritmo de medição de força de senha do Google mudou considerando minha senha atual como muito fraco, e não me dizendo nada sobre isso (nem mesmo uma mensagem ou aviso) … Como eu descobri isso ? Bem, optei por mudar minha senha para ver se ajudaria (tentei de tudo sem sucesso) e quando mudei minha senha, funcionou!

Então, para um experimento, tentei alterar minha senha de volta para minha senha anterior para ver o que aconteceria, e o Gmail não permitiu que eu fizesse isso, citando a razão “desculpe, não podemos permitir que você salve essa alteração como escolhida a senha é muito fraca “e não me deixaria voltar à minha senha antiga. Eu percebi que estava errando porque ou a) você precisa alterar sua senha uma vez a cada x meses ou b). Como eu disse antes, seus algoritmos de força de senha mudaram e, portanto, a senha fraca que eu tinha não foi aceita, mesmo que eles não tenham dito nada sobre isso quando tentaram entrar em QUALQUER LUGAR! Esse (número 2) é o cenário mais provável, pois minha senha fraca tinha cerca de quatro meses e permite que eu a use no Gmail.

É muito ruim que eles não tenham dito nada sobre isso, mas faz sentido. Como a maioria dos e-mails invadidos usa o software fora do Gmail, e acredito que você precise ter uma senha mais forte se quiser usar o Gmail fora do ambiente do Gmail.

Eu espero que isso ajude!

Além das outras etapas de solução de problemas acima, também gostaria de acrescentar que, se você ativou a autenticação de dois fatores (também conhecida como verificação em duas etapas ) em sua conta do GMail, deverá gerar uma senha específica do aplicativo e usá-la recentemente senha gerada para autenticar via SMTP .

Para criar um, acesse: https://www.google.com/settings/ e escolha Autorizar aplicativos e sites para gerar a senha.

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

Vincular à configuração do Gmail

insira a descrição da imagem aqui

Eu tive alguns problemas para enviar e-mails da minha conta do Gmail também, que foram devido a várias das situações acima mencionadas. Aqui está um resumo de como eu consegui trabalhar e mantê-lo flexível ao mesmo tempo:

  • Antes de mais nada, configure sua conta do Gmail:
    • Ative o IMAP e declare o número máximo de mensagens correto (você pode fazer isso aqui)
    • Certifique-se de que sua senha tenha pelo menos 7 caracteres e seja forte (de acordo com o Google)
    • Certifique-se de não ter que inserir um código captcha primeiro. Você pode fazer isso enviando um e-mail de teste do seu navegador.
  • Faça alterações no web.config (ou no app.config, ainda não tentei isso, mas presumo que seja tão fácil fazer funcionar em um aplicativo do Windows):
      ...           
 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 

E agora, sempre que você quiser enviar e-mails, tudo o que você precisa fazer é chamar SSLMail.SendMail :

Por exemplo, em uma página com um controle 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 

Ou em qualquer lugar no seu código, você pode ligar:

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

Espero que isso ajude quem entra nesse post! (Eu usei o VB.NET, mas acho que é trivial convertê-lo para qualquer linguagem .NET.)

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

Se você receber 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. Saiba mais em” como eu recebo antes disso, verifique se a linha SMTPClientObj.UseDefaultCredentials = False incluído e esta linha deve antes do SMTPClientObj.Credentials .

Eu tentei alternar essas duas linhas para o lado oposto e o erro 5.5.1 Authentication Required retornado.

Ah … É incrível … Primeiro eu não pude enviar um email por qualquer motivo. Mas depois que eu mudei a sequência dessas duas linhas como abaixo, ela funciona perfeitamente.

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

Espero que esta ajuda !!! 🙂

O problema não é de habilidade técnica para enviar pelo Gmail. Isso funciona para a maioria das situações. Se você não consegue enviar uma máquina, geralmente é porque a máquina não foi autenticada com um humano nos controles pelo menos uma vez.

O problema que a maioria dos usuários enfrenta é que o Google decide alterar os limites de saída o tempo todo. Você deve sempre adicionar código defensivo à sua solução. Se você começar a ver erros, diminua a velocidade de envio e pare de enviar por um tempo. Se você continuar tentando enviar o Google, às vezes, ele adicionará um tempo extra ao seu período de atraso para que você possa enviar novamente.

O que eu fiz no meu sistema atual é enviar um atraso de 1,5 segundos entre cada mensagem. Então, se eu tiver algum erro, pare por 5 minutos e comece de novo. Isso geralmente funciona e permite que você envie até os limites da conta (a última vez que verifiquei foi de 2.000 para os principais logins de clientes por dia).

Eu tive o mesmo problema, mas acabou por ser minha proteção contra vírus estava bloqueando o e-mail “spam” de saída. Desligar isso permitiu-me usar a porta 587 para enviar e-mail SMTP via GMail

Não tenho certeza de qual versão do .NET é necessária para isso porque eglasius mencionou que não há uma configuração enableSsl correspondente (estou usando o .NET 4.0, mas suspeito que funcione no .NET 2.0 ou posterior), mas essa configuração acabou funcionando para mim (e não requer que você use qualquer configuração programática):

        

Pode ser necessário ativar o POP ou IMAP na sua conta do Gmail primeiro: https://mail.google.com/mail/?shva=1#settings/fwdandpop

Eu recomendo tentar com um cliente de e-mail normal primeiro …

Se nada mais funcionou aqui para você, talvez seja necessário permitir o access à sua conta do Gmail a partir de aplicativos de terceiros. Esse foi o meu problema. Para permitir o access, faça o seguinte:

  1. Faça login na sua conta do Gmail.
  2. Visite esta página https://accounts.google.com/DisplayUnlockCaptcha e clique no botão para permitir o access.
  3. Visite esta página https://www.google.com/settings/security/lesssecureapps e ative o access a aplicativos menos seguros.

Isso funcionou para mim espero que funcione para outra pessoa!

Etapas simples para corrigir isso:

1) Faça login no seu Gmail

2) Navegue até esta página https://www.google.com/settings/security/lesssecureapps e defina como “Ativar”

@Andres Pompiglio: Sim, é verdade que você deve alterar sua senha pelo menos uma vez … esses códigos funcionam bem:

 //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
"; } catch (Exception ex) { msg = ex.Message; } return msg; } //End Send Email Function

E você pode fazer uma chamada para a function usando:

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

Eu também achei que a conta que eu usei para fazer login foi desativada pelo google por algum motivo. Uma vez que eu redefinir minha senha (para o mesmo que costumava ser), então eu era capaz de enviar e-mails muito bem. Eu estava recebendo a mensagem 5.5.1 também.

Eu também tentei muitas soluções, mas fiz algumas mudanças.

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

com smtpclient acima parâmetros são trabalho no gmail

Eu estava usando conexão VPN corporativa. Foi a razão pela qual não consegui enviar e-mails da minha inscrição. Funciona se eu me desconectar da VPN.

Eu corri para este mesmo erro ( “O servidor SMTP requer uma conexão segura ou o cliente não foi autenticado. A resposta do servidor foi: Autenticação necessária 5.5.1. Saiba mais em” ) e descobri que eu estava usando a senha errada. Eu consertei as credenciais de login e as enviei corretamente.

Eu sei que isso é tarde, mas talvez isso ajude alguém.

Outra coisa que eu encontrei é que você deve alterar sua senha pelo menos uma vez. E tente usar uma senha de nível seguro (não use o mesmo usuário como senha, 123456, etc.)

Eu estava recebendo o mesmo erro e nenhuma das soluções acima ajudou.

Meu problema era que eu estava executando o código de um servidor remoto, que nunca tinha sido usado para fazer login na conta do Gmail.

Eu abri um navegador no servidor remoto e entrei no gmail a partir daí. Ele fez uma pergunta de segurança para verificar se eu era uma vez que este era um novo local. Depois de fazer a verificação de segurança, consegui autenticar por meio do código.

Ainda outra solução possível para você. Eu estava tendo problemas semelhantes ao conectar-se ao Gmail por meio do IMAP. Depois de experimentar todas as soluções que encontrei, você lerá aqui e em outros lugares sobre o SO (por exemplo, ativar IMAP, habilitar access menos seguro ao seu e-mail, usando https://accounts.google.com/b/0/displayunlockcaptcha e assim por diante), eu realmente configurei uma nova conta do Gmail mais uma vez.

No meu teste original, a primeira conta do Gmail que eu criei, eu tinha conectado à minha conta principal do Gmail. Isso resultou em um comportamento errático em que a conta errada estava sendo referenciada pelo Google. Por exemplo, a execução de https://accounts.google.com/b/0/displayunlockcaptcha abriu a minha conta principal em vez da que criei para o efeito.

Então, quando eu criei uma nova conta e não a conectei à minha conta principal, depois de seguir todas as etapas apropriadas, achei que funcionou bem!

Ainda não confirmei isso (ou seja, reproduzi-lo), mas aparentemente ele fez isso por mim … espero que ajude.

Ative aplicativos menos seguros para sua conta: https://www.google.com/settings/security/lesssecureapps

  1. Primeiro, verifique a configuração da sua conta do Gmail e ative a opção “Acessar aplicativos menos seguros” insira a descrição da imagem aqui

Recomendamos vivamente que utilize uma aplicação segura, como o Gmail, para aceder à sua conta. Todos os aplicativos feitos pelo Google atendem a esses padrões de segurança. Usar um aplicativo menos seguro, por outro lado, pode deixar sua conta vulnerável. Saber mais.

  1. Conjunto

     smtp.UseDefaultCredentials = false; 

    antes

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

Você também pode se conectar através da porta 465, mas devido a algumas limitações do namespace System.Net.Mail, você pode ter que alterar seu código. Isso ocorre porque o namespace não oferece a capacidade de fazer conexões SSL implícitas. Isso é discutido em http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx , e eu forneceu um exemplo de como usar o CDO (Collaborative Data Object) em outra discussão ( GMail SMTP via C #. NET erros em todas as portas ).

Eu tive esse problema resolvido. Aparentemente, essa mensagem é usada em vários tipos de erros. Meu problema era que eu tinha atingido meu máximo de 500 e-mails enviados.

faça o login na conta e tente manualmente enviar um e-mail. Se o limite for atingido, ele informará você

Um ou mais motivos estão lá para esses erros.

  • Faça login com seu Gmail (ou qualquer outro if) em seu sistema local.

  • Além disso, verifique se há um aplicativo menos seguro e defina-o para “Ativar”. Aqui está o link para o GMAIL. https://www.google.com/settings/security/lesssecureapps

  • verifique se há EnableSsl em seu código de e-mail e defina-o como verdadeiro.

     smtp.EnableSsl = true; 
  • Verifique também qual porta você está usando atualmente. 25 é Global, mas você pode verificar isso para outras pessoas também como 587. confira aqui. Toda a comunicação SMTP acontece com mais de 25?

  • SE VOCÊ ESTÁ NO REMOTO : Verifique a resposta de Vlad Tamas acima.

  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; 

Altere sua senha do gmail e tente novamente, deve funcionar depois disso.

Não sei por que, mas toda vez que você muda sua hospedagem você tem que mudar sua senha.