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 Camargo



Olá 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!

Wellington Balbo de Camargo

Wellington Balbo de Camargo - Desenvolvedor Web/Desktop em .NET, com pouco mais de 1 ano de experiência na área. Cursando o 4º Semestre de Análise de Sistemas, atualmente estuda para melhorar os conhecimentos em SQL Server e ASP.NET, buscando em um futuro próximo as certificações Microsoft nessas áreas. Mantém um blog com dicas e artigos para iniciantes em .NET no endereço http://programandodotnet.wordpress.com e nas horas vagas procura ajudar e aprender com o pessoal do Fórum daMSDN. Atualmente é editor de artigos da Linha de Código.