Enviar e-mail usando C# e autenticando pela conta do Google

Você precisa utilizar envio de e-mail e está querendo usar a sua conta do Gmail para isso. Pode fazê-lo seguindo os passos abaixo.

Uma classe para fazer o teste

Criei uma aplicação console em C# (.Net 5) e além da classe principal eu criei uma classe chamada EmailServico cujo exemplo segue no pré-formatado.

using System;
using System.Configuration;
using System.Net;
using System.Net.Mail;
using System.Text;

namespace EnvioEmail
{
    public class EmailServico : MailMessage
    {
        #region Private Fields

        private readonly string EMAIL_HOST = ConfigurationManager.AppSettings["emailServico:email_host"];
        private readonly string EMAIL_ORIGEM = ConfigurationManager.AppSettings["emailServico:email_remetente"];
        private readonly string EMAIL_SENHA = ConfigurationManager.AppSettings["emailServico:email_senha"];

        #endregion Private Fields

        #region Public Methods

        public void MandarEmail(MailMessage mensagem)
        {
            try
            {
                using (var mensagemEmail = new MailMessage())
                {
                    mensagemEmail.From = new MailAddress(EMAIL_ORIGEM);
                    mensagemEmail.To.Add(new MailAddress(mensagem.To.ToString()));

                    mensagemEmail.Subject = mensagem.Subject;
                    mensagemEmail.Body = mensagem.Body;
                    mensagemEmail.BodyEncoding = Encoding.UTF8;
                    mensagemEmail.BodyEncoding = Encoding.GetEncoding("ISO-8859-1");
                    mensagemEmail.Priority = MailPriority.Normal;

                    using (var smtpCliente = new SmtpClient())
                    {
                        smtpCliente.Host = EMAIL_HOST;
                        smtpCliente.Port = 587;
                        smtpCliente.EnableSsl = true;
                        smtpCliente.DeliveryMethod = SmtpDeliveryMethod.Network;
                        smtpCliente.Credentials = new NetworkCredential(EMAIL_ORIGEM, EMAIL_SENHA);
                        smtpCliente.UseDefaultCredentials = false;

                        smtpCliente.Send(mensagemEmail);
                    }
                }
            }
            catch (SmtpFailedRecipientException ex)
            {
                Console.WriteLine("Mensagem : {0} " + ex.Message);
                return;
            }
            catch (SmtpException ex)
            {
                Console.WriteLine("Mensagem SMPT Fail : {0} " + ex.Message);
                return;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Mensagem Exception : {0} " + ex.Message);
                return;
            }

            Console.WriteLine("Email enviado com sucesso! Digite 0 para sair.");
            Console.Read();
        }

        #endregion Public Methods
    }
}

Para autenticar no Google

O Gmail não permite que você coloque simplesmente seu e-mail e senha da sua conta para poder enviar e-mails da sua aplicação. Você tem que criar uma credencial junto a administração da sua conta para isso. Depois você vai usar a senha desta credencial para usar, siga os passos abaixo:

  • logado no Google, vá no ícone da sua conta e clique em “Gerenciar sua Conta do Google”:

Google

  • Selecione a opção “Segurança”:

Google

  • Entre na “Verificação em duas etapas”, confirme sua senha e ative a verificação.

Google

  • Selecione a opção “Senhas de app” para gerar a senha

Google

  • Nesta tela que você entrou selecione a opção “Selecionar app”
  • Escolha a opção “Outro (nome personalizado)”
  • Neste momento informe o nome do seu site ou webapp, clique em “Gerar”
  • Copie a senha gerada pelo google como na janela abaixo:

Google

  • Eu copiei a senha, o usuário e o host para o app.config, mas você pode colocar em outro arquivo de configuração

<?xml version=”1.0″ encoding=”utf-8″ ?>
<configuration>
<appSettings>
<add key=”emailServico:email_host” value=”smtp.gmail.com” />
<add key=”emailServico:email_remetente” value=”seuemail@gmail.com” />
<add key=”emailServico:email_senha” value=”suasenhagerada” />
</appSettings>
</configuration>

Uma Console.App de exemplo

Fiz um exemplo para testar e disponibilizei no GitHub. Pode clicar aqui para clonar e rodar.