Desenvolvimento - ASP. NET
Enviando Emails com ASP.NET usando System.Net.Mail
Neste artigo mostro como enviar emails em uma aplicação ASP.NET, usando o namespace System.Net.Mail.
por Wellington Balbo de CamargoOlá pessoal, neste artigo iremos mostrar como enviar emails em uma aplicação ASP.NET, usando o namespace System.Net.Mail, presente desde o Net Framework 2.0.
Faço este artigo com base na videoaula de ASP.NET de Luiz Maia, do Portal Linha de Código, mediante autorização do mesmo. Acompanhem o passo-a-passo:
Como dito anteriormente, desde a versão 2.0 do .NET Framework começou a ser usado o namespace System.Net.Mail, em substituição ao obsoleto System.Web.Mail.SmtpMail. Apenas como efeito de comparação, listo abaixo as diferenças entre o namespace anterior e este (retirado da videoaula que originou este artigo):
Antes usava: Agora usa:
System.Web.Mail.SmtpMail System.Net.Mail.SmtpClient
System.Net.MailMessage System.Web.Mail.MailMessage
- O corpo da mensagem Body foi substituído por IsBodyHtml
- A classe System.Net.MailMessage coleta o endereço de origem como um objeto MailAddress
- A classe System.Net.MailMessage coleta os endereços de destino, CC e Bcc como um objeto MailAddressCollection.
Vamos então para a criação de nossa aplicação. Abra o Visual Studio, clique em File > New WebSite (SHIFT + ALT + N) e dê o nome de EnviandoEmailsAspNet.
Agora abra a Solution Explorer (CTRL + W + S) e adicione uma nova classe a solução, dando o nome a ela de EnvioEmail. Irá aparecer uma mensagem perguntando se deseja usar a pasta AppCode, clique em Sim.
Em nossa classe EnvioEmail, primeiramente declare o namespace System.Net.Mail.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Mail;
Após isso, vamos criar um método do tipo void, ou seja, não terá retorno, para enviar o email. Veja a seguir a declaração do método com seus parâmetros:
/// <summary>
/// Classe Envia Email - Variáveis
/// </summary>
/// <param name="from">Remetente</param>
/// <param name="recepient">Destinatário</param>
/// <param name="cc">Com Cópia</param>
/// <param name="bcc">Com Cópia Oculta</param>
/// <param name="subject">Assunto</param>
/// <param name="body">Corpo da Mensagem</param>
public void EnviaEmail(string from, string recepient, string cc,
string bcc, string subject, string body)
{
}
Ok, agora vamos atribuir as variáveis criadas aos valores que serão passados usando as classes do System.Net.Mail:
public void EnviaEmail(string from, string recepient, string cc,
string bcc, string subject, string body)
{
//instancio a classe MailMessage, responsável por atribuir
//os valores para as variáveis declaradas no método
MailMessage email = new MailMessage();
//endereço do remetente, chamo o método From que recebe uma nova
//instância de MailAdress passando como parâmetro a variável from
email.From = new MailAddress(from);
//destinatário, uso método Add, já que posso enviar para várias pessoas
email.To.Add(new MailAddress(recepient));
//faço uma verificação, se houver cc e bcc, envio
if (cc != "")
{
email.CC.Add(new MailAddress(cc));
}
if (bcc != "")
{
email.Bcc.Add(new MailAddress(bcc));
}
//defino o assunto
email.Subject = subject;
//defino o corpo da mensagem
email.Body = body;
//defino que o formato do texto será HTML
email.IsBodyHtml = true;
//minha prioridade de envio será normal
email.Priority = MailPriority.Normal;
//instancio o SMTP passando o host configurado no IIS
SmtpClient smtp = new SmtpClient("exemplo.server.com");
//envio o email por meio do método Send, passando como
//parâmetro a variável instanciada da classe MailMessage
smtp.Send(email);
}
Nosso método está pronto. Agora abra o modo design da página Default.aspx, criada por padrão, e insira os campos referentes ao envio de email dessa forma:
Altere a propriedade ID dos controles para os seguintes valores (os labels, com exceção do último, não precisa ser alterado o ID), na ordem: txtDe, txtPara, txtCc, txtBcc, txtAssunto, txtTexto, btnEnviar e lblMsg. Não vou me preocupar em fazer validações nos controles, pois o intuito deste artigo é apenas mostrar como é simples enviar um email.
Daqui um tempo, irei fazer um artigo falando somente das validações do ASP.NET.
Dê dois cliques no botão Enviar e digite o seguinte código:
protected void btnEnviar_Click(object sender, EventArgs e)
{
//instancio a classe de envio de email
EnvioEmail email = new EnvioEmail();
//chamo o método EnviaEmail, passando os textboxes como parâmetros
email.EnviaEmail(txtDe.Text, txtPara.Text, txtCc.Text, txtBcc.Text, txtAssunto.Text, txtTexto.Text);
}
Essa é a forma básica de enviar emails com ASP.NET. Este exemplo só irá funcionar corretamente se o seu domínio estiver usando o SMTP configurado no IIS (Internet Information Services) e autenticado. Dito isto, não adianta eu rodar a aplicação e clicar no botão de Enviar, já que minha máquina não está configurada e o intuito desse artigo é apenas de mostrar como é simples criar um método para enviar email. Podemos configurar o SMTP pelo Web.config, arquivo de configuração de nossa aplicação.
Podemos usar alguns recursos adicionais como anexar arquivos no envio do email. Para fazer isso em uma aplicação ASP.NET, devemos lembrar-se de dar a permissão para o usuário anexar os arquivos.
Faça o seguinte método para enviar um email com anexo: crie um botão com o nome Anexar e ID btnAnexar, dê dois cliques nele e digite o seguinte código (antes não se esqueça de usar o namespace System.Net.Mail):
protected void btnAnexar_Click(object sender, EventArgs e)
{
//instancio a classe MailMessage
MailMessage email = new MailMessage();
//endereço do remetente, chamo o método From que recebe uma nova
//instância de MailAdress passando como parâmetro um email de exemplo
email.From = new MailAddress("envioemail@exemplo.com.br");
//destinatário, uso método Add, já que posso enviar para várias pessoas
email.To.Add(new MailAddress("wellingtonbalbo@gmail.com"));
//defino o assunto
email.Subject = "Teste de envio com sucesso!";
//defino o corpo da mensagem
email.Body = "body";
//uso o método Attachments para anexar arquivos, lembrando que anexar
//quantos arquivos quiser, desde que seja dada a permissão a este usuário
email.Attachments.Add(new Attachment("C:\\teste01.txt"));
email.Attachments.Add(new Attachment("C:\\teste02.txt"));
email.Attachments.Add(new Attachment("C:\\teste03.txt"));
//instancio o SMTP passando o host configurado no IIS
SmtpClient smtp = new SmtpClient("127.0.0.1");
//envio o email por meio do método Send, passando como
//parâmetro a variável instanciada da classe MailMessage
smtp.Send(email);
}
Assim finalizo nosso artigo, mostrando que para enviar emails com ASP.NET é simples, o namespace System.Net.Mail contém diversas classes com tudo o que é preciso para se enviar emails.
Para quem se interessar, disponibilizo o código fonte desse projeto aqui.
Créditos à Luiz Maia, que fez as videoaulas e ao Linha de Código, por onde pude baixá-las (mediante assinatura), estudá-las e posteriormente fazer este artigo.
Quaisquer dúvidas, mandem emails para wellingtonbalbo@gmail.com ou deixem nos comentários deste artigo que responderei o mais breve possível.
Até o próximo artigo!