Envio de E-mail -C#

Amanda Carneiro
4 min readJan 19, 2021

Lembro que lá em 2011 eu tive que fazer um trabalho em Java que fazia o envio de e-mails automático. Foi sofrido e foi difícil, esse primeiro contato foi a impressão que ficou sobre envio de e-mails em geral.

Recentemente precisei trabalhar novamente com envio de e-mails automático e, para minha surpresa, foi simples, fácil de testar e eu pude usar minha conta de e-mail pessoal para criar toda a estrutura de envio e fazer os testes. C# possui uma gama gigante de bibliotecas e classes padrão, então uma tarefa que poderia ser complexa, se tornou simples.

A principal classe para essa atividade é a classe “Mail” que pode ser facilmente utilizada incluindo o namespace na classe que fará o envio de e-mail:

using System.Net.Mail;

Assim como no envio de e-mails feito a partir de um provedor de e-mail comum(Gmail, outlook, etc.), para o envio de mensagens de e-mail são necessários 4 parâmetros básicos:

Remetente: O endereço de e-mail que está fazendo o envio.

Destinatário: O ou os endereços de e-mail que receberão a mensagem.

Assunto: O assunto que será enviado junto com a mensagem.

Mensagem: O corpo da mensagem, que pode ser apenas um texto sem formatação alguma ou pode ser um HTML por exemplo, com formatação, cores, tipos de letra e imagens.

Tendo esses 4 parâmetros é possível criar um objeto do tipo MailMessage:

MailMessage mensagemEmail = new MailMessage(Remetente,Destinatario,Assunto,Mensagem);

Esse objeto é a parte essencial para que a criação da mensagem seja possível.

Além dele, é necessário o meio seguro que fará o envio do e-mail, que é o SMTP(Simple Mail Transfer Protocol), um protocolo de transferência de e-mail que identifica e define a padronização dos e-mails, indicando qual caminho deve ser seguido para que o e-mail seja entregue de forma segura e íntegra.

A classe SmtpClient é usada para enviar o e-mail para um servidor SMTP:

SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);

No exemplo a cima o objeto do tipo SmtpClient está sendo inicializado com as informações do servidor SMTP e a porta especificada do Gmail. Dessa forma, pode ser usada uma conta de e-mail Gmail para fazer os testes, caso já possua um servidor específico que deve fazer os envios, pode ser incluído o IP e a porta específica nessa inicialização, por exemplo:

SmtpClient smtp = new SmtpClient("10.10.1.110", 25);

Depois de criar seu objeto SmtpClient, você pode habilitar a propriedade EnableSsl, que é especifica para os casos em que o SSL for usado para acessar o servidor de e-mail SMTP especificado:

smtp.EnableSsl = true;

Agora falta um passo importante, que é a inclusão de uma credencial que vai ser usada para fazer a autenticação da conta de e-mail para o disparo da mensagem:

//Criação da credencial
NetworkCredential credentialsEmail = new NetworkCredential("email@gmail.com", "password");
//Inclusão da credencial como propriedade do objeto smtp
smtp.Credentials = credentialsEmail;
//Inclusão da credencial como default
smtp.UseDefaultCredentials = true;

O NetworkCredential é uma classe base que fornece credenciais em esquemas de autenticação baseados em senha. Então ao adicionar esse objeto na propriedade Credentials do objeto de tipo SmtpClient, está sendo atribuído via código um login e senha que serão utilizados no processo de autenticação.

Sabemos que incluir credenciais diretamente em código não é uma boa prática de programação. Então, na vida real, em vez de incluir as credenciais diretamente em código, o correto é criar uma camada de interface para que o usuário possa realizar esse login de forma dinâmica.

Por fim, depois de ter todas as etapas concluídas, o envio da mensagem de e-mail pode ser feita com um comando simples:

// Enviar a mensagem de e-mail
smtp.Send(mensagemEmail);

Ao final do processo, a classe para teste de envio de e-mails deve ficar parecida com o que segue:

using System;
using System.Net.Mail;
using System.Net;
namespace csharp.EnviaEmail
{
public class EnviaEmail
{
public static string EnviaMensagemEmail(string Destinatario,
string Remetente,string Assunto, string enviaMensagem)
{
try
{
// Cria mensagem de email
MailMessage mensagemEmail = new MailMessage(Remetente,
Destinatario, Assunto, enviaMensagem);
//SMTP
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
smtp.EnableSsl = true;
//Incluir um email e senha válidos
NetworkCredential credentialsEmail = new
NetworkCredential("xxxx@gmail.com", "password");
// inclui as credenciais
smtp.Credentials = credentialsEmail;
smtp.UseDefaultCredentials = true;
// Enviar a mensagem de e-mail
smtp.Send(mensagemEmail);
return "Mensagem enviada para: " + Destinatario; } catch (Exception ex)
{
return ex.Message.ToString();
}
}
}
}

É obvio que para uma aplicação na vida real, é necessário muito mais do que SMTP e credenciais incluídas “na unha” diretamente no código, mas a ideia é demonstrar como o C# pode facilitar esse processo.

A partir dessa ideia simples pode ser implementada uma tela de envio de e-mail ou a criação de um design de e-mail usando HTML e CSS, pode ser usado um servidor próprio, podem ser implementados filtros e validações para contas de destinatário e remetente, enfim, vai da necessidade e criatividade.

--

--

Amanda Carneiro

Engenheira de software, apaixonada por tecnologia. Amo arte, amo conhecer lugares novos e viver viajando é o que me motiva todos os dias.