Categorias

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)


	
    

Assunto :
Nome :
e-mail :
Confirme e-mail :
Empresa :
País :
Cidade :
Estado :  
Telefone 1 :  
Telefone 2 :  
Departamento :
Setor :
Observações :
//-- 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 = "" + "
Data : " + DateTime.UtcNow.ToString() + "
Assunto: (" + this.DDListAssunto.SelectedValue.ToString() + ") - " + this.DDListAssunto.SelectedItem.Text.ToString() + "
Nome : " + this.txt_nome.Text.ToString() + "
E-Mail : " + this.txt_email.Text.ToString() + "
Empresa: " + this.txt_empresa.Text.ToString() + "
País : " + this.txt_pais.Text.ToString() + "
Cidade : " + this.txt_cidade.Text.ToString() + "
Estado : " + this.DDListEstados.SelectedValue.ToString() + "
Fone 1 : " + this.txt_fone1.Text.ToString() + "
Fone 2 : " + this.txt_fone2.Text + "
Depto : " + this.txt_departamento.Text + "
Setor : " + this.txt_setor.Text.ToString() + "
Observ : " + this.txt_Obs.Text.ToString(); Response.Write("Para ocultar este texto, comente estas linhas....
"); Response.Write(CorpoEmail.ToString()); Response.Write("

"); 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("[email protected]"); // O Destinario tambem TAMBÉM é VOCE, para que assim o e-mail chegue a sua conta (outlook) mailMessage.To.Add("[email protected]"); // 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("[email protected]"); // 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("[email protected]", "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 /// /// Obter ou alterar o nome do campo que irá preencher o texto dos itens /// public string DDLText { get { return _ddlText; } set { _ddlText = value; } } /// /// Obter ou alterar o nome do campo que irá preencher o valor dos itens /// public string DDLValue { get { return _ddlValue; } set { _ddlValue = value; } } /// /// Obter ou alterar o endereço do ficheiro xml a ser lido /// public string UrlXml { get { return _urlXml; } set { _urlXml = value; } } /// /// Obter ou alterar o nome dos elementos que vão ser lidos /// public string NodeElement { get { return _nodeElement; } set { _nodeElement = value; } } /// /// Método construtor /// /// Dropdown a ser preenchida /// Endereço do xml a ser lido /// Campo que possui o valor dos itens /// Campo que possui o texto dos itens /// Identificação do elemento onde estão guardados os itens a processar 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; } /// /// Preencher DropdownList /// /// nota: o tratamento de erros deverá ser mais elaborado ... /// 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) 1 Análise crítica 2 Administração de Redes 3 Desenvolvimento 4 Dúvidas 5 Orçamento 6 Outros 7 Sugestões //-- Definição do arquivo XML (Estados.xml) AC AL AM AP BA CE DF ES GO MA MG MS MT PA PB PE PI PR RJ RN RO RR RS SC SE SP TO

Arquivos para Download:

EmailSend.zip