C# - Enviando email

Publicado 14/4/2009 por fernandasallai em C#
Tags:

Todos nós sabemos da importância de permitir que você se comunique com as pessoas que acessam o seu site. Por isto, irei demonstrar de maneira simples o envio de emails utilizando C#.

Vamos começar !

Web.config

Nosso web.config ficará conforme listagem 1.

<?xml version="1.0"?>

<configuration>
  
  <!-- Incluir uma chave chamada emailFrom contendo o email do remetente dentro da tag appSettings -->
  <appSettings>
    <add key="emailFrom" value="emailRemetente"/>
  </appSettings>

  <system.net>
    <mailSettings>
      <smtp>
        <!-- Incluir no host o smtp, no userName o endereço de email do remetente e no password a senha do email do remetente -->
        <network host="smtpEmail" port="25" userName="emailRemetente" password="senhaEmailRemetente"/>
      </smtp>
    </mailSettings>
  </system.net>

  <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>

</configuration>

Listagem 1 - Código no Web.Config.

Classe email

Vamos criar uma classe chamada Email com o código da listagem 2. Para adicionar uma classe clique com o botão direito do mouse em cima do projeto - ADD - Class - nomeie a classe.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

// namespace para o e-mail
using System.Net.Mail;

// namespace do ConfigurationManager
using System.Configuration;

namespace EnviandoEmail
{
    public class Email
    {
        /// 
        /// Enviar e-mail
        /// 
        /// Endereço do destinatário
        /// Assunto do e-mail
        /// Conteúdo do e-mail
 
        public static void EnviarEmail(string email, string assunto, string conteudo)
        {
            //Cria o objeto que envia o e-mail 
            SmtpClient client = new SmtpClient();

            //Cria o endereço de email do remetente 
            MailAddress de = new MailAddress(ConfigurationManager.AppSettings["EmailFrom"]);

            //Cria o endereço de email do destinatário -->
            MailAddress para = new MailAddress(email);

            MailMessage message = new MailMessage(de, para);
            message.IsBodyHtml = true;

            //Assunto do email 
            message.Subject = assunto;
            //Conteúdo do email 
            message.Body = conteudo;

            try
            {
                //Envia o email 
                client.Send(message);
            }
            catch
            {
                
            }
        }
    }
}

Listagem 2 - Codificação da classe de e-mail.

Página EnviandoEmail.aspx

Para adicionar a página clique com o botão direito do mouse em cima do projeto - ADD - New item - Web Form - nomeie para EnviandoEmail. 

Na listagem 3 e figura 1 serão exibidos como ficará o layout. 

OBS: Este post tem o objetivo de demonstrar o envio de e-mail, então não me preocupei com o layout. Claro que você poderá melhorá-lo.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EnviandoEmail.aspx.cs" Inherits="EnviandoEmail.EnviandoEmail" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Enviando e=mail</title>
</head>
<body>
    <form id="frmAspNet" runat="server">
    <br />
    <div>
        <asp:Label ID="lblEmail" runat="server" Text="E-mail" style="padding-right: 35px"></asp:Label>
        <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
    </div>   
    <br />
     <div>
        <asp:Label ID="lblAssunto" runat="server" Text="Assunto" style="padding-right: 25px"></asp:Label>
        <asp:TextBox ID="txtAssunto" runat="server"></asp:TextBox>
    </div>
    <br />
    <div>
        <asp:Label ID="lblConteudo" runat="server" Text="Conteúdo" style="padding-right: 15px"></asp:Label>
        <asp:TextBox ID="txtConteudo" runat="server"></asp:TextBox>
    </div>    
    <asp:Button ID="btnEnviarEmail" runat="server" Text="Enviar" onclick="btnEnviarEmail_Click" />
    <asp:Label ID="lblMensagem" runat="server" Text="Label"></asp:Label>
    </form>
</body>
</html>

Listagem 3 - Layout.

Figura 1 - Layout.

Página EnviandoEmail.aspx.cs

Na listagem 4 teremos a codificação de nossa página.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

// namespace Regex
using System.Text.RegularExpressions;

namespace EnviandoEmail
{
    public partial class EnviandoEmail : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            lblMensagem.Visible = false;
        }

        protected void btnEnviarEmail_Click(object sender, EventArgs e)
        {
            // Validar se campos foram preenchidos
            if (ValidarCampos())
            {
                // Esconde a mensagem de validação
                lblMensagem.Visible = false;

                // Enviar e-mail
                Email.EnviarEmail(txtEmail.Text, txtAssunto.Text, txtConteudo.Text);

                // Limpar todos os campos
                LimparCampos();

                // Exibe mensagem de sucesso no envio do e-mail.
                Page.ClientScript.RegisterStartupScript(this.GetType(), "mensagem de sucesso", "E-mail enviado com sucesso.");
            }
            else
            {
                lblMensagem.Visible = true;
            }
        }

        /// 
        /// Validar preenchimento dos campos
        /// 
        /// True/False
        private bool ValidarCampos()
        {
            bool camposPreenchidos = true;

            if (txtEmail.Text == string.Empty)
            {
                lblMensagem.Text = "Preencha o e-mail.";

                return camposPreenchidos = false;
            }
            else
            {
                if (!IsValidEmail(txtEmail.Text))
                {                    
                    lblMensagem.Text = "O formato do e-mail é inválido.";

                    return camposPreenchidos = false;
                }
            }

            if (txtAssunto.Text == string.Empty)
            {
                lblMensagem.Text = "Preencha o assunto.";

                return camposPreenchidos = false;
            }

            if (txtConteudo.Text == string.Empty)
            {
                lblMensagem.Text = "Preencha o conteúdo.";

                return camposPreenchidos = false;
            }

            return camposPreenchidos;
        }

        /// 
        /// Validar o e-mail
        /// 
        /// E-mail
        /// 
        private bool IsValidEmail(string email)
        {
            // instancia um regex com a expressão desejada
            Regex rg = new Regex(@"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$");

            return rg.IsMatch(email);            
        }

        /// 
        /// Limpar os campos
        /// 
        private void LimparCampos()
        {
            txtAssunto.Text = string.Empty;
            txtConteudo.Text = string.Empty;
            txtEmail.Text = string.Empty;
        }
    }
}

Listagem 4 - Codificação da página.

Pronto... E agora é só enviar o e-mail.... haha

Até mais =D

Projeto disponível: EnviandoEmail.rar (22,88 kb)


Comentários

Adriano Almeida Brazil

quarta-feira, 15 de abril de 2009 5:50

Adriano Almeida

Parabéns, muito bom !!!

fernandasallai Brazil

quinta-feira, 16 de abril de 2009 5:22

fernandasallai

Obrigada Adriano.

Bruno Lins Brazil

quarta-feira, 24 de junho de 2009 5:43

Bruno Lins

Fernanda o seu post é muito bom, está meu ajudando muito!!!
Mas tenho uma duvida cruel onde eu busco o smtp dentro do Exchange ou no servidor smtp no IIS,por esse fato meu codigo não roda, não sei se é um IP ou smtp.dominio.com.br.

Beijos

fernandasallai Brazil

quinta-feira, 25 de junho de 2009 11:05

fernandasallai

Oi  Bruno....
Obrigada e estou feliz por estar lhe ajudando.

Não utilizo exchange então resolvi pesquisar para tentar resolver sua dúvida.
Achei um artigo do Anderson Patricio no site Linha de Código que aborda sobre resolução de problemas no fluxo de mensagens no Exchange server  www.linhadecodigo.com.br/ArtigoImpressao.aspx
Veja se isso te ajuda e me informe para que possamos ajudar outras pessoas.

Patrick Vargas Brazil

sexta-feira, 16 de outubro de 2009 6:18

Patrick Vargas

Iae bruno, blz!!
se estás se referindo ao endereço smtp pode ser tanto por ip quando por dns, mas tem que se lembrar de habilitar o relay do exchange para que ele permita o envio.
abraço.

MCTS - Exchange Server

fernandasallai Brazil

domingo, 18 de outubro de 2009 12:35

fernandasallai

Obrigada Patrick pela informação ao Bruno.

Poliana Dias Brazil

sexta-feira, 1 de abril de 2011 14:11

Poliana Dias

Como sempre, seu post tá muito bom, continue distribuindo informações, Parabéns.

fernandasallai Brazil

sábado, 2 de abril de 2011 9:40

fernandasallai

Obrigada Poliana. Fico feliz que tenha gostado.

Comentar


(Vai mostrar seu Gravatar)

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



Fernanda Sallai

Sem a curiosidade que me move, que me inquieta, que me insere na busca, não aprendo nem ensino - Paulo Freire