PUBLICIDADE
Este código tem nota
10

Autor

asilvestre

Alessandro Silvestre

membro deste fevereiro de 2009

Compartilhe e guarde

  • Rec6
  • StumbleUpon
  • ueba
  • linkk
  • dihitt
  • linkloko
  • linkto
  • Technorati
  • Simpy
  • del.icio.us
  • Faves: Fave It!

PUBLICIDADE

Enquete

O buscador Bing, da Microsoft, conseguirá alcançar o Google?

Enviando E-mail com ASP.NET em C#


Apresento a vocês o script pronto e funcional para se criar em C# ASP.NET uma página de contatos que pode ser inclusa em qualquer site para envio de e-mail.

Neste exemplo além de aprender a enviar e-mails com o ASP.NET em C#, aprenderemos a criar uma classe para ler arquivos XML para preenchimentos de objetos do tipo ComboBox, isto é uma tarefa útil pois evita acessos desnecessários ao banco de dados.

Neste exemplo utilizaremos 4 arquivos Default.aspx/Default.aspx.cs, FillDropdownList.cs, ContatoAssunto.xml, Estados.xml, estes dois últimos deverão ser criados na pasta XMLFiles.

Vale apena destacar que a aplicação foi criada no VS 2008 Framework 3.5 e o código completo da aplicação encontra-se em anexo ao arquivo.

Espero que esta possa lhe ser de grande utilidade.
//-- Definição do layout (Default.aspx)

<body>
<!---[ I - Rotina Valida Dominio ]------------------------------------------------------------------------------>	
    <form id="form1" runat="server">
    <div>
        <table border="0" cellpadding="2" cellspacing="2" width="100%"  >
            <tr>
                <td colspan="2" align="center">
                                <h2><asp:Label 
                                        ID="lbl_status" 
                                        runat="server" 
                                        Text="" 
                                        Font-Bold="True" 
                                        Font-Italic="True" 
                                        Font-Overline="False" 
                                        Font-Strikeout="False" 
                                        Font-Underline="False" 
                                        ForeColor="Red" 
                                        Font-Size="Small">
                                    </asp:Label></h2>
                </td>
            </tr>
            
            <tr><td width="15%" align="right" valign="middle" > Assunto :</td>
                <td width="80%" align="left"> 
                        <asp:DropDownList 
                            ID="DDListAssunto" 
                            runat="server" 
                            TabIndex="1">
                        </asp:DropDownList></td></tr>

            <tr><td width="15%" align="right" valign="middle" > Nome :</td>
                <td width="80%" align="left"> 
                        <asp:TextBox 
                            ID="txt_nome" 
                            runat="server" 
                            MaxLength="50" 
                            Width="350px" 
                            TabIndex="2">
                        </asp:TextBox>
                        <asp:RequiredFieldValidator 
                            ID="RequiredFieldValidator1" 
                                runat="server" 
                                ControlToValidate="txt_nome" 
                                ErrorMessage="Obrigatório">
                        </asp:RequiredFieldValidator>
                </td></tr>
                
            <tr><td width="15%" align="right" valign="middle"> e-mail :</td>
                 <td width="80%" align="left"> 
                    <asp:TextBox 
                        ID="txt_email" 
                        runat="server" 
                        Width="350px" 
                        TabIndex="3">
                    </asp:TextBox>
                    <asp:RequiredFieldValidator 
                        ID="RequiredFieldValidator2" 
                        runat="server" 
                        ControlToValidate="txt_email" 
                        ErrorMessage="Obrigatório">
                    </asp:RequiredFieldValidator>
                 </td></tr>
                
            <tr><td width="20%" align="right" valign="middle"> Confirme e-mail :</td>
                <td width="80%" align="left"> 
                    <asp:TextBox 
                        ID="txt_EmailConf" 
                        runat="server" 
                        Width="350px" 
                        TabIndex="4">
                    </asp:TextBox>
                    <asp:CompareValidator 
                        ID="CompareValidator1" 
                        runat="server" 
                        ControlToCompare="txt_email" 
                        ControlToValidate="txt_EmailConf" 
                        ErrorMessage="Não confere">
                    </asp:CompareValidator>
                </td></tr>

            <tr><td width="15%" align="right" valign="middle"> Empresa :</td>
                <td width="80%" align="left"> 
                    <asp:TextBox 
                        ID="txt_empresa" 
                        runat="server" 
                        Width="350px" 
                        TabIndex="5">
                    </asp:TextBox>
                </td></tr>
                
            <tr><td width="15%" align="right" valign="middle"> País :</td>
                <td width="80%" align="left"> 
                    <asp:TextBox 
                        ID="txt_pais" 
                        runat="server" 
                        Width="200px" 
                        TabIndex="6">
                    </asp:TextBox>
                    <asp:RequiredFieldValidator 
                        ID="RequiredFieldValidator3" 
                        runat="server" 
                        ControlToValidate="txt_pais" 
                        ErrorMessage="Obrigatório">
                    </asp:RequiredFieldValidator>
                </td></tr>

            <tr><td width="15%" align="right" valign="middle"> Cidade :</td>
                <td width="80%" align="left"> 
                    <asp:TextBox 
                        ID="txt_cidade" 
                        runat="server" 
                        Width="350px" 
                        TabIndex="7">
                    </asp:TextBox>
                    <asp:RequiredFieldValidator 
                        ID="RequiredFieldValidator4" 
                        runat="server" 
                        ControlToValidate="txt_cidade" 
                        ErrorMessage="Obrigatório">
                    </asp:RequiredFieldValidator>
                </td></tr>
                
            <tr><td width="15%" align="right" valign="middle"> Estado :</td>
                <td width="80%" align="left"> 
                    <asp:DropDownList 
                        ID="DDListEstados" 
                        runat="server" 
                        TabIndex="8">
                    </asp:DropDownList>&nbsp;
                    <asp:Label 
                        ID="Label1" 
                        runat="server" 
                        Font-Names="Verdana" 
                        Font-Size="Smaller" 
                        Text="(Somente se for no brasil)">
                    </asp:Label>
                </td></tr>
                
            <tr><td width="15%" align="right" valign="middle"> Telefone 1 :</td>
                <td width="80%" align="left"> 
                    <asp:TextBox 
                        ID="txt_fone1" 
                        runat="server" 
                        TabIndex="9">
                    </asp:TextBox>&nbsp;
                    <asp:Label 
                        ID="Label2" 
                        runat="server" 
                        Font-Names="Verdana" 
                        Font-Size="Smaller" 
                        Text="(xx XXXX-XXXX)">
                    </asp:Label>
                    <asp:RequiredFieldValidator 
                        ID="RequiredFieldValidator5" 
                        runat="server" 
                        ControlToValidate="txt_fone1" 
                        ErrorMessage="Obrigatório">
                    </asp:RequiredFieldValidator>
                </td></tr>              

            <tr><td width="15%" align="right" valign="middle"> Telefone 2 :</td>
                <td width="80%" align="left"> 
                    <asp:TextBox 
                        ID="txt_fone2" 
                        runat="server" 
                        TabIndex="10">
                    </asp:TextBox>&nbsp;
                    <asp:Label 
                        ID="Label3" 
                        runat="server" 
                        Font-Names="Verdana" 
                        Font-Size="Smaller" 
                        Text="(xx XXXX-XXXX)">
                    </asp:Label>
                </td></tr>
                
            <tr><td width="15%" align="right" valign="middle"> Departamento :</td>
                <td width="80%" align="left"> 
                    <asp:TextBox 
                        ID="txt_departamento" 
                        runat="server" 
                        Width="350px" 
                        TabIndex="11">
                    </asp:TextBox>
                </td></tr>
                
            <tr><td width="15%" align="right" valign="middle"> Setor :</td>
                <td width="80%" align="left"> 
                    <asp:TextBox 
                        ID="txt_setor" 
                        runat="server" 
                        Width="350px" 
                        TabIndex="12">
                   </asp:TextBox>
                </td></tr>
                
            <tr><td width="15%" align="right" valign="middle"> Observações :</td>
                <td width="80%" align="left"> 
                    <asp:TextBox 
                        ID="txt_Obs" 
                        runat="server" 
                        Width="350px" 
                        TextMode="MultiLine" 
                        Height="163px" 
                        TabIndex="13">
                    </asp:TextBox>
                </td></tr>
                
            <tr><td colspan="2" >
                <table width="100%">
                <tr>
                    <td align="center" >
                        <asp:Button 
                            ID="btEnviar" 
                            runat="server" 
                            Text="Enviar" 
                            onclick="btEnviar_Click" 
                            TabIndex="14" 
                            style="height: 26px" />
                    </td>
                </tr>
                </table>
            </td>
        </table>
<!---[ T - Rotina Valida Dominio ]------------------------------------------------------------------------------>	
    </div>
    </form>
</body>

//-- Definição do código (Default.aspx.cs)

    #region Defindindo namespace
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Web;
        using System.Web.UI;
        using System.Web.UI.WebControls;

        using System.Web.UI.WebControls.WebParts;
        using System.Xml.Linq;
        using System.Net.Mail;
        using System.Net;
        using System.IO;
        // Usei esta definição pois em ninha Classe FillDropdownList.cs eu criei um namespace
        using EmailSend.Class;  
    #endregion

    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // Limpo o conteudo do objeto label
            this.lbl_status.Text = "";
            // Verifico se a pagina NÃO foi submetida
            if (!IsPostBack)
            {
                // Obtenho o caminho completo da localização do arquivo ContatoAssunto.xml
                    string urlXmlService = Server.MapPath("XMLFiles/ContatoAssunto.xml");
                // Executo o metodo que le o arquivo XML e preenche em um ComboBox
                    FillDropdownList ddl = new FillDropdownList(this.DDListAssunto, urlXmlService, "Descricao", "IDAssunto", "assunto", "Selecione");
                    ddl.FillDropdown();

                // Obtenho o caminho completo da localização do arquivo Estados.xml
                    string urlXmlEstado = Server.MapPath("XMLFiles/Estados.xml");
                // Executo o metodo que le o arquivo XML e preenche em um ComboBox
                    FillDropdownList ddlUF = new FillDropdownList(this.DDListEstados, urlXmlEstado, "IDEstado", "IDEstado", "Estado", "Selecione");
                    ddlUF.FillDropdown();
            }
            // Forco o foco no primeiro campo do formulario
            this.DDListAssunto.Focus();
        }

        protected void btEnviar_Click(object sender, EventArgs e)
        {
            // Rotina de Envio de E-mail, estou utilizando tratamento de erro Try..Catch
            // isto é minha rotina esta dentro da chave try, se por ventura acontecer algum 
            // erro a execução passa IMEDIATAMENTE para o codigo existente na chave Catch
            try
            {
                //// Criando variaveis de recebimento de dados;
                //DateTime _dtNow = DateTime.UtcNow;

                // Montando o corpo da E-mail
                string CorpoEmail = ""
                                    + "<br>Data   : " + DateTime.UtcNow.ToString()
                                    + "<br>Assunto: (" + this.DDListAssunto.SelectedValue.ToString() + ") - " + this.DDListAssunto.SelectedItem.Text.ToString()
                                    + "<br>Nome   : " + this.txt_nome.Text.ToString()
                                    + "<br>E-Mail : " + this.txt_email.Text.ToString()
                                    + "<br>Empresa: " + this.txt_empresa.Text.ToString()
                                    + "<br>País   : " + this.txt_pais.Text.ToString()
                                    + "<br>Cidade : " + this.txt_cidade.Text.ToString()
                                    + "<br>Estado : " + this.DDListEstados.SelectedValue.ToString()
                                    + "<br>Fone 1 : " + this.txt_fone1.Text.ToString()
                                    + "<br>Fone 2 : " + this.txt_fone2.Text
                                    + "<br>Depto  : " + this.txt_departamento.Text
                                    + "<br>Setor  : " + this.txt_setor.Text.ToString()
                                    + "<br>Observ : " + this.txt_Obs.Text.ToString();
                Response.Write("Para ocultar este texto, comente estas linhas....<hr>");
                Response.Write(CorpoEmail.ToString());
                Response.Write("<br/><hr>");
                return;            
                // Estancia da Classe de Mensagem
                MailMessage mailMessage = new MailMessage();

                // Remetente MEU E-MAIL, estando esta pagina em seu site quem esta enviando
                // o e-mail é vc MESMO o cliente esta apenas fornecendo dados para que VOCE
                // possa posteriormente entrar encontato com ele.

                    mailMessage.From = new MailAddress("MeuE-mail@MinhaEmpresa.com.br");

                // O Destinario tambem TAMBÉM é VOCE, para que assim o e-mail chegue a sua conta (outlook)
                    mailMessage.To.Add("MeuE-mail@MinhaEmpresa.com.br");

                // Se houver necessidade vc pode enviar uma copia do e-mail para alguem, como por exemplo
                // para o proprio cliente para que ele fique ciente de o e-mail de contato foi enviado e que
                // logo voce entrara em contato

                    mailMessage.CC.Add("CopiarEmailPara@MinhaEmpresa.com.br");

                // Assunto
                    mailMessage.Subject = "Contato MinhaEmpresa.com.br - >> " + this.DDListAssunto.SelectedItem.Text.ToString() + " - " + this.DDListAssunto.SelectedValue.ToString();

                // A mensagem é do tipo HTML(true) ou Texto Puro (false)?   
                    mailMessage.IsBodyHtml = true;

                // Corpo da Mensagem, conteudo da variavel criada acima
                    mailMessage.Body = CorpoEmail.ToString();
                // ***************************************************************************
                // *** 
                // ***                              A T E N C A O
                // *** 
                // ***************************************************************************
                        // Se voce pode habilitar este trecho para enviar arquivos em anexo.
                        // NAO SE ESQUECA DE INCLUIR O OBJETO FileUpload NO DESIGNER DA PAGINA
                        // criando um loop pode ser enviado mais de um anexo.
                        // Recupera o binario enviado pelo FileUpload   
                        //    MemoryStream MS = new MemoryStream(fileAnexo.FileBytes);   
                        // Anexa o Stream do arquivo   
                        //    Attachment anexo = new Attachment(MS, fileAnexo.FileName);   
                        //    mailMessage.Attachments.Add(anexo);   
                // ***************************************************************************

                // Estancia a Classe de Envio; as informações aqui inseridas voce obtem com o provedor
                // onde hospedou seu site
                
                    SmtpClient smtpClient = new SmtpClient("mail.MinhaEmpresa.com.br");

                // Credencial para envio por SMTP Seguro (APENAS QUANDO O SERVIDOR EXIGE AUTENTICAÇÃO)   
                    smtpClient.Credentials = new NetworkCredential("MeuE-mail@MinhaEmpresa.com.br", "MinhaSenha");
                
                // Envia a mensagem   
                    smtpClient.Send(mailMessage);

                // Informa que o e-mail foi enviado com sucesso
                    this.lbl_status.Text = "Dados enviado com sucesso. Em breve entraremos em contato.";

                // Limpa os campos do formulario
                    this.DDListAssunto.SelectedIndex = 0;
                    this.DDListEstados.SelectedIndex = 0;
                    this.txt_nome.Text = "";
                    this.txt_email.Text = "";
                    this.txt_EmailConf.Text = "";
                    this.txt_empresa.Text = "";
                    this.txt_pais.Text = "";
                    this.txt_cidade.Text = "";
                    this.txt_fone1.Text = "";
                    this.txt_fone2.Text = "";
                    this.txt_departamento.Text = "";
                    this.txt_setor.Text = "";
                    this.txt_Obs.Text = "";
            }
            catch (Exception f)
            {
                // Se houver algum erro informa o usuário
                this.lbl_status.Text = "Não foi possível enviar dados. Tente mais tarde";
            }
        }
    }

//-- Definição do classe (FillDropdownList.cs)

    #region Defindindo namespace
        using System;
        using System.Data;
        using System.Configuration;
        using System.Linq;
        using System.Web;
        using System.Web.Security;
        using System.Web.UI;
        using System.Web.UI.HtmlControls;
        using System.Web.UI.WebControls;
        using System.Web.UI.WebControls.WebParts;
        using System.Xml.Linq;
    #endregion
    namespace EmailSend.Class
    {
        public class FillDropdownList
        {
            #region Criando Variaveis Internas
                private DropDownList _ddl;
                private string _ddlText;
                private string _ddlValue;
                private string _nodeElement;
                private string _urlXml;
                private string _textDefault;
            #endregion

            /// <summary>    
            /// Obter ou alterar o nome do campo que irá preencher o texto dos itens    
            /// </summary>    
                public string DDLText 
                { get { return _ddlText; } 
                  set { _ddlText = value; } 
                }

            /// <summary>    
            /// Obter ou alterar o nome do campo que irá preencher o valor dos itens    
            /// </summary>    
                public string DDLValue 
                { get { return _ddlValue; } 
                  set { _ddlValue = value; } 
                }

            /// <summary>    
            /// Obter ou alterar o endereço do ficheiro xml a ser lido    
            /// </summary>    
                public string UrlXml 
                { get { return _urlXml; } 
                  set { _urlXml = value; } 
                }

            /// <summary>    
            /// Obter ou alterar o nome dos elementos que vão ser lidos    
            /// </summary>    
                public string NodeElement 
                { get { return _nodeElement; } 
                  set { _nodeElement = value; } 
                }

            /// <summary>    
            /// Método construtor    
            /// </summary>    
            /// <param name="dropdown">Dropdown a ser preenchida</param>    
            /// <param name="urlXml">Endereço do xml a ser lido</param>    
            /// <param name="fieldText">Campo que possui o valor dos itens</param>    
            /// <param name="fieldValue">Campo que possui o texto dos itens</param>    
            /// <param name="nodeElement">Identificação do elemento onde estão guardados os itens a processar</param>    
                public FillDropdownList(DropDownList dropdown, string urlXml, string fieldText, string fieldValue, string nodeElement, string textDefault)
            {
                this._ddl = dropdown;
                this._ddlText = fieldText;
                this._ddlValue = fieldValue;
                this._urlXml = urlXml;
                this._nodeElement = nodeElement;
                this._textDefault = textDefault;
            }

            /// <summary>    
            /// Preencher DropdownList    ///     
            /// nota: o tratamento de erros deverá ser mais elaborado ...    
            /// </summary>    
                public void FillDropdown()
            {
                DataSet dataSet = new DataSet();
                dataSet = new DataSet(this._nodeElement);
                dataSet.ReadXml(this._urlXml);
                this._ddl.DataSource        = dataSet.Tables[this._nodeElement];
                this._ddl.DataTextField     = this._ddlText;
                this._ddl.DataValueField    = this._ddlValue;
                this._ddl.DataBind();

                if (this._textDefault.Length <= 0)
                { this._ddl.Items.Insert(0, new ListItem("(escolha um item)", "")); }
                else
                { this._ddl.Items.Insert(0, new ListItem(this._textDefault, "")); }
                dataSet.Dispose();
            }
        }
    }

//-- Definição do arquivo XML (ContatoAssunto.xml)

	<?xml version="1.0" encoding="utf-8" ?>
	<assuntos>
	  <assunto>
	    <IDAssunto>1</IDAssunto>
	    <Descricao>Análise crítica</Descricao>
	  </assunto>
	  <assunto>
	    <IDAssunto>2</IDAssunto>
	    <Descricao>Administração de Redes</Descricao>
	  </assunto>
	  <assunto>
	    <IDAssunto>3</IDAssunto>
	    <Descricao>Desenvolvimento</Descricao>
	  </assunto>
	  <assunto>
	    <IDAssunto>4</IDAssunto>
	    <Descricao>Dúvidas</Descricao>
	  </assunto>
	  <assunto>
	    <IDAssunto>5</IDAssunto>
	    <Descricao>Orçamento</Descricao>
	  </assunto>
	  <assunto>
	    <IDAssunto>6</IDAssunto>
	    <Descricao>Outros</Descricao>
	  </assunto>
	  <assunto>
	    <IDAssunto>7</IDAssunto>
	    <Descricao>Sugestões</Descricao>
	  </assunto>
	</assuntos>

//-- Definição do arquivo XML (Estados.xml)

	<?xml version="1.0" encoding="utf-8" ?>
	<Estados>
	  <Estado>
	    <IDEstado>AC</IDEstado>
	  </Estado>
	  <Estado>
	  <IDEstado>AL</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>AM</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>AP</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>BA</IDEstado>
	  </Estado>
	  <Estado>
	  <IDEstado>CE</IDEstado>
	  </Estado>
	  <Estado>
	  <IDEstado>DF</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>ES</IDEstado>
	  </Estado>
	  <Estado>
	  <IDEstado>GO</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>MA</IDEstado>
	  </Estado>
	  <Estado>
	  <IDEstado>MG</IDEstado>
	  </Estado>
	  <Estado>
	  <IDEstado>MS</IDEstado>
	  </Estado>
	  <Estado>
	  <IDEstado>MT</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>PA</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>PB</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>PE</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>PI</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>PR</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>RJ</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>RN</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>RO</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>RR</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>RS</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>SC</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>SE</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>SP</IDEstado>
	  </Estado>
	  <Estado>
	    <IDEstado>TO</IDEstado>
	  </Estado>
	</Estados>


ArquivoTipoTamanhoHits 
EmailSend.zipArquivo ZIP7,5 Kb553Baixar o Arquivo
Sim   Não   Este código foi útil para você?
NotaComentário
10
tiger comentou em 6/8/2009

é muito bom

codigos muito bons
10
tiger comentou em 6/8/2009

era o q eu queria

exelente bom d+
Regras:
Os comentários seguem as seguintes regras:
  • Todos os comentários são enviados por membros cadastrados no site.
  • A pontuação de comentários de conteúdo do próprio membro não serão computados.
  • Os comentários serão pré-aprovados, porém a equipe do site revisará o conteúdo de todos os comentários podendo ser invalidados (inclusive a pontuação).
  • Os comentários precisam ter, obrigatóriamente, coerência sobre o conteúdo que será comentado.
  • O membro que atingir 5 comentários invalidados não poderá mais comentar dentro do site. Com isso o membro não poderá mais ganhar pontos com comentários.
  • Há um limite de 10 comentários por dia para cada membro.
  • Qualquer comentário após ter sido publicado poderá ser retirado através da opção ( denunciar)

Comente

     (ainda não tem cadastro? clique aqui!)


Máximo de 30 caracteres

Máximo de 255 caracteres
 

R&W Consulting - Soluções Web Hospedagem UOL HOST PagSeguro - solução para pagamentos online
© 2006-2009 R&W Informática Ltda. - Todos os direitos reservados.