Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

eriva_br

[Resolvido] [asp.net] Enviar e-mail com asp.net

Recommended Posts

Exemplo de código para enviar email utilizando aspx, utilizando credenciais para o envio (passando usuário e senha):

(código comentado e com tratamento de erros)

 

desenvolvido em Visual Studio 2005, utilizando a linguagem C#

 

 

Crie um novo projeto web no VS 2005, adicione uma nova página com o nome email.aspx

 

código HTML para a página email.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="email.aspx.cs" Inherits="email" %>
	
	<!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 runat="server">
		<title>Enviar e-mail</title>
	</head>
	<body>
		<form  id="form1" runat="server">
		<div>
			<asp:TextBox ID="txtSmtp" runat="server"  
				Style="z-index: 109; left: 50px; position: absolute; top: 44px"></asp:TextBox>
			 
			<asp:Label ID="lblSmtp" runat="server" Style="z-index: 109; left: 50px; position: absolute;
				top: 21px" Text="Servidor SMTP"></asp:Label>
			 
			<asp:Label ID="Label1" runat="server" Style="z-index: 109; left: 213px; position: absolute;
				top: 14px" Text="Exemplos SMTP:<br>Terra: smtp.scl.terra.com.br<br>gmail: smtp.gmail.com"></asp:Label>
			<asp:TextBox ID="txtDe" runat="server" Style="z-index: 109; left: 53px; position: absolute;
				top: 241px" Width="270px"></asp:TextBox>
			<asp:Label ID="Label2" runat="server" Style="z-index: 109; left: 53px; position: absolute;
				top: 218px" Text="De:"></asp:Label>
			<asp:TextBox ID="txtPara" runat="server" Style="z-index: 109; left: 53px; position: absolute;
				top: 293px" Width="270px"></asp:TextBox>
			<asp:Label ID="Label3" runat="server" Style="z-index: 109; left: 53px; position: absolute;
				top: 270px" Text="Para:"></asp:Label>
			<asp:TextBox ID="txtCC" runat="server" Style="z-index: 109; left: 423px; position: absolute;
				top: 241px" Width="270px"></asp:TextBox>
			<asp:Label ID="Label4" runat="server" Style="z-index: 109; left: 423px; position: absolute;
				top: 218px" Text="Com cópia:"></asp:Label>
			<asp:TextBox ID="txtCCO" runat="server" Style="z-index: 109; left: 423px; position: absolute;
				top: 293px" Width="270px"></asp:TextBox>
			<asp:Label ID="Label5" runat="server" Style="z-index: 109; left: 423px; position: absolute;
				top: 270px" Text="Com cópia oculta:"></asp:Label>
			<asp:TextBox ID="txtPorta" runat="server" Style="z-index: 109; left: 50px; position: absolute;
				top: 106px"></asp:TextBox>
			<asp:Label ID="Label6" runat="server" Style="z-index: 109; left: 50px; position: absolute;
				top: 83px" Text="Porta"></asp:Label>
			<asp:TextBox ID="txtUsuario" runat="server" Style="z-index: 109; left: 419px; position: absolute;
				top: 38px" Width="270px"></asp:TextBox>
			<asp:Label ID="Label7" runat="server" Style="z-index: 109; left: 419px; position: absolute;
				top: 15px" Text="Usuário:"></asp:Label>
			<asp:TextBox ID="txtSenha" runat="server" Style="z-index: 109; left: 420px; position: absolute;
				top: 100px" Width="161px"></asp:TextBox>
			<asp:Label ID="Label8" runat="server" Style="z-index: 109; left: 420px; position: absolute;
				top: 77px" Text="Senha:"></asp:Label>
			<asp:TextBox ID="txtAssunto" runat="server" Style="z-index: 109; left: 53px; position: absolute;
				top: 349px" Width="270px"></asp:TextBox>
			<asp:Label ID="Label9" runat="server" Style="z-index: 109; left: 53px; position: absolute;
				top: 326px" Text="Assunto:"></asp:Label>
			<asp:TextBox ID="txtMensagem" runat="server" Height="225px" Style="z-index: 109;
				left: 55px; position: absolute; top: 406px" TextMode="MultiLine" Width="407px"></asp:TextBox>
			<asp:Label ID="Label10" runat="server" Style="z-index: 109; left: 53px; position: absolute;
				top: 383px" Text="Mensagem:"></asp:Label>
			<asp:Label ID="Label13" runat="server" Style="z-index: 109; left: 478px; position: absolute;
				top: 383px" Text="Anexos:"></asp:Label>
			<asp:Button ID="btnEnviarEmail" runat="server" Text="Enviar" 
				Style="z-index: 109; left: 416px; position: absolute; top: 645px" OnClick="btnEnviarEmail_Click"/>
			<asp:Button ID="btnEnviarArq" runat="server" Text="Enviar Anexo" 
				Style="z-index: 109; left: 480px; position: absolute; top: 443px" OnClick="btnEnviarArq_Click"/>
			<asp:Label ID="lblResultado" runat="server" Style="z-index: 109; left: 55px; position: absolute;
				top: 684px"></asp:Label>
			<asp:Label ID="Label11" runat="server" Style="z-index: 109; left: 214px; position: absolute;
				top: 102px" Text="Porta Padrão 25<br>Para gmail use 587 ou 465"></asp:Label>
			<asp:CheckBox ID="chkSsl" runat="server" 
				Style="z-index: 109; left: 50px; position: absolute; top: 154px" Text="Secure Sockets Layer (SSL)"/>
			<asp:CheckBox ID="chkLeitura" runat="server" 
				Style="z-index: 109; left: 55px; position: absolute; top: 647px" Text="Confirmação de Leitura"/>
			<asp:Label ID="Label12" runat="server" 
				Style="z-index: 109; left: 423px; position: absolute; top: 326px" Text="Tipo Mensagem:"></asp:Label>
			<asp:DropDownList ID="ddlTipoMsg" runat="server"
				Style="z-index: 109; left: 423px; position: absolute; top: 349px" Width="144px"></asp:DropDownList>
			<asp:FileUpload ID="filUpload" runat="server"  
				Style="z-index: 109; left: 478px; position: absolute; top: 406px"  />
			<asp:ListBox ID="lstAnexos" runat="server"
				Style="z-index: 109; left: 480px; position: absolute; top: 471px" Height="138px" Width="231px"></asp:ListBox>
			<asp:Button ID="btnExcluirArq" runat="server" Text="Excluir Anexo" 
				Style="z-index: 109; left: 590px; position: absolute; top: 614px" OnClick="btnExcluirArq_Click"/></div>		
		</form>
	</body>
	</html>

 

a janela ira ficar neste formato:

Imagem Postada

 

 

códigos para o arquivo CS, email.aspx.cs:

 

Namespaces:

//Namespaces carregados por padrão ao incluir uma nova página no VS 2005
	using System;
	using System.Data;
	using System.Configuration;
	using System.Collections;
	using System.Web;
	using System.Web.Security;
	using System.Web.UI;
	using System.Web.UI.WebControls;
	using System.Web.UI.WebControls.WebParts;
	using System.Web.UI.HtmlControls;
	//Namespaces usados para o envio de email
	using System.Net.Mail;
	using System.Net.Mime;

código para o evento Page_Load:

protected void Page_Load(object sender, EventArgs e)
		{
			if (!IsPostBack)
			{
				this.txtSenha.TextMode = TextBoxMode.Password;
	
				//habilitando multipla seleção na lista de anexos
				this.lstAnexos.SelectionMode = ListSelectionMode.Multiple;
				//carregando os tipos de mensagem
				this.ddlTipoMsg.Items.Add(new ListItem("HTML", "0"));
				this.ddlTipoMsg.Items.Add(new ListItem("RICHTEXT", "1"));
				this.ddlTipoMsg.Items.Add(new ListItem("XML", "2"));
				this.ddlTipoMsg.Items.Add(new ListItem("PLAIN", "3"));			
	
				//ajuste dos tabindex's dos controles
				Int16 vTabIndex = 1;
				this.txtSmtp.TabIndex = vTabIndex++;
				this.txtPorta.TabIndex = vTabIndex++;
				this.txtUsuario.TabIndex = vTabIndex++;
				this.txtSenha.TabIndex = vTabIndex++;
				this.chkSsl.TabIndex = vTabIndex++;
				this.txtDe.TabIndex = vTabIndex++;
				this.txtPara.TabIndex = vTabIndex++;
				this.txtCC.TabIndex = vTabIndex++;
				this.txtCCO.TabIndex = vTabIndex++;
				this.txtAssunto.TabIndex = vTabIndex++;
				this.ddlTipoMsg.TabIndex = vTabIndex++;
				this.txtMensagem.TabIndex = vTabIndex++;
				this.filUpload.TabIndex = vTabIndex++;
				this.btnEnviarArq.TabIndex = vTabIndex++;
				this.lstAnexos.TabIndex = vTabIndex++;
				this.btnExcluirArq.TabIndex = vTabIndex++;
				this.chkLeitura.TabIndex = vTabIndex++;
				this.btnEnviarEmail.TabIndex = vTabIndex++;
				this.txtSmtp.Focus();
			}
		}

código para os tratamentos, validações

#region Validadores
	
		private bool IsEmpty(string str)
		{
			bool isValid = true;
			try
			{
				if ((str == null) || (str.ToString().Trim().Length == 0))
				{
					isValid = false;
				}
			}
			catch
			{
				isValid = false;
			}
			return !isValid;
		}
		private bool IsNumber(string str)
		{
			bool isValid = true;
	
			try
			{
				long number = Int64.Parse(str);
			}
			catch
			{
				isValid = false;
			}
	
			return isValid;
		}
		private bool IsEmail(string str)
		{
			string[] mails = str.Split(';');
			foreach (string ma in mails)
			{
				if (ma.Trim() != "" && !this.IsEmailUnico(ma.Trim()))
					return false;
			}
			return true;
		}
		private bool IsEmailUnico(string str)
		{
			string[] mails = str.Split(';');
			foreach (string ma in mails)
			{
				if (ma.Trim() != "")
				{
					string patternStrictEmail = @"^(([^<>()[\]\\.,;:\s@\""]+"
						+ @"(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@"
						+ @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
						+ @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+"
						+ @"[a-zA-Z]{2,}))$";
					System.Text.RegularExpressions.Regex re = new System.Text.RegularExpressions.Regex(patternStrictEmail);
					if (!re.IsMatch(ma.Trim()))
						return false;
				}
			}
			return true;
		}
		private bool ValidarCampos()
		{
			bool resultado = true;
			this.lblResultado.ForeColor = System.Drawing.Color.BlueViolet;
			this.lblResultado.Text = "";
			if (this.IsEmpty(this.txtSmtp.Text))
			{
				this.txtSmtp.Focus();
				this.lblResultado.Text += "Campo SMTP não pode ficar em branco<br>";
				resultado = false;
			}
			if (this.IsEmpty(this.txtPorta.Text))
			{
				this.txtPorta.Focus();
				this.lblResultado.Text += "Campo PORTA não pode ficar em branco<br>";
				resultado = false;
			}
			if (!this.IsNumber(this.txtPorta.Text))
			{
				this.txtPorta.Focus();
				this.lblResultado.Text += "Campo PORTA deve ser numérico<br>";
				resultado = false;
			}
			if (this.IsEmpty(this.txtUsuario.Text))
			{
				this.txtUsuario.Focus();
				this.lblResultado.Text += "Campo USUÁRIO não pode ficar em branco<br>";
				resultado = false;
			}
			if (this.IsEmpty(this.txtSenha.Text))
			{
				this.txtSenha.Focus();
				this.lblResultado.Text += "Campo SENHA não pode ficar em branco<br>";
				resultado = false;
			}
			if (this.IsEmpty(this.txtDe.Text))
			{
				this.txtDe.Focus();
				this.lblResultado.Text += "Campo DE não pode ficar em branco<br>";
				resultado = false;
			}
			if (this.IsEmpty(this.txtPara.Text))
			{
				this.txtPara.Focus();
				this.lblResultado.Text += "Campo PARA não pode ficar em branco<br>";
				resultado = false;
			}
			if (this.IsEmpty(this.txtAssunto.Text))
			{
				this.txtAssunto.Focus();
				this.lblResultado.Text += "Campo ASSUNTO não pode ficar em branco<br>";
				resultado = false;
			}
			if (!this.IsEmailUnico(this.txtDe.Text))
			{
				this.txtDe.Focus();
				this.lblResultado.Text += "Campo DE deve ser um e-mail válido<br>";
				resultado = false;
			}
			if (!this.IsEmail(this.txtPara.Text))
			{
				this.txtPara.Focus();
				this.lblResultado.Text += "Campo PARA deve ser um e-mail válido, caso for necessário separar por;<br>";
				resultado = false;
			}
			if (!this.IsEmail(this.txtCC.Text))
			{
				this.txtCC.Focus();
				this.lblResultado.Text += "Campo CC deve ser um e-mail válido, caso for necessário separar por;<br>";
				resultado = false;
			}
			if (!this.IsEmail(this.txtCCO.Text))
			{
				this.txtCCO.Focus();
				this.lblResultado.Text += "Campo CCO deve ser um e-mail válido, caso for necessário separar por;<br>";
				resultado = false;
			}
			return resultado;
		}
	
		#endregion

 

código para o evento Click do botão Enviar e-mail

protected void btnEnviarEmail_Click(object sender, EventArgs e)
		{
			//Cria uma nova instância da Classe MailMessage
			MailMessage message = new MailMessage();
			SmtpClient client = new SmtpClient();
			try
			{
	
				if (this.ValidarCampos())
				{
					//montando e-mail
					message.From = new MailAddress(this.txtDe.Text.Trim(), this.txtDe.Text.Trim(), System.Text.Encoding.GetEncoding(1252));
	
					message.SubjectEncoding = System.Text.Encoding.GetEncoding(1252);
					message.BodyEncoding = System.Text.Encoding.GetEncoding(1252);
	
					string[] destinatarios = this.txtPara.Text.Trim().Split(';');
					foreach (string dest in destinatarios)
					{
						if (dest.Trim() != "")
							message.CC.Add(dest);
					}
					if (!this.IsEmpty(this.txtCC.Text))
					{
						destinatarios = this.txtCC.Text.Trim().Split(';');
						foreach (string dest in destinatarios)
						{
							if (dest.Trim() != "")
								message.CC.Add(dest);
						}					
					}
					if (!this.IsEmpty(this.txtCCO.Text))
					{
						destinatarios = this.txtCCO.Text.Trim().Split(';');
						foreach (string dest in destinatarios)
						{
							if (dest.Trim() != "")
								message.CC.Add(dest);
						}					
					}
					
					message.Subject = this.txtAssunto.Text.Trim();				
	
					string MsgTipo;
					//Define o tipo do corpo da mensagem
					switch (this.ddlTipoMsg.SelectedValue)
					{
						case "0":
							MsgTipo = MediaTypeNames.Text.Html;
							break;
						case "1":
							MsgTipo = MediaTypeNames.Text.RichText;
							break;
						case "2":
							MsgTipo = MediaTypeNames.Text.Xml;
							break;
						default:
							MsgTipo = MediaTypeNames.Text.Plain;
							break;
					}
					//Cria Instância de AlternateView para os Tipos de Corpo de Email
					AlternateView alternate = AlternateView.CreateAlternateViewFromString(this.txtMensagem.Text.Trim(), System.Text.Encoding.GetEncoding(1252), MsgTipo);
					message.AlternateViews.Add(alternate);
	
					//confirmaçção de leitura
					if (this.chkLeitura.Checked)
						message.Headers.Add("Disposition-Notification-To", "<" + this.txtDe.Text.Trim() + ">");
	
					//anexando arquivos
					foreach (ListItem li in this.lstAnexos.Items)
					{
						if (li.Enabled) //isso para não enviar anexos que foram excluidos
						{
							Attachment data = new Attachment(li.Value, MediaTypeNames.Application.Octet);
							message.Attachments.Add(data);
						}
					}
	
	
					//verificando autenticação
					client.Credentials = new System.Net.NetworkCredential(this.txtUsuario.Text.Trim(), this.txtSenha.Text.Trim());
					client.Port = Convert.ToInt32(this.txtPorta.Text.Trim());
					client.Host = this.txtSmtp.Text.Trim();
					//client.UseDefaultCredentials = false;
					client.EnableSsl = chkSsl.Checked;
	
	
					//enviando e-mail
					client.Send(message);
	
					//limpa controles
					this.lstAnexos.Items.Clear();
					this.txtMensagem.Text = "";
					this.txtAssunto.Text = "";
					this.txtPara.Focus();
	
					this.lblResultado.ForeColor = System.Drawing.Color.Blue;
					this.lblResultado.Text = "e-mail enviado com sucesso!";
				}
			}
			catch (Exception ex)
			{
				this.lblResultado.ForeColor = System.Drawing.Color.Red;
				this.lblResultado.Text = "Erro no envio de email:<br>" + ex.Message.ToString();
			}
			finally
			{
				message.Dispose();
				message = null;
				client = null;
			}
		}

 

código para o evento Click do botão Enviar Anexo

protected void btnEnviarArq_Click(object sender, EventArgs e)
		{
			try
			{
				//Verifica se tem alguma coisa postada 
				if (this.filUpload.PostedFile.ContentLength != 0 && this.filUpload.HasFile)
				{
					string caminhoArq = "E:\\Temp\\" + this.filUpload.FileName;
					bool vRepetido = false;
					foreach (ListItem li in this.lstAnexos.Items)
					{
						if ((li.Enabled) && (li.Value.Trim().Equals(caminhoArq.Trim(), StringComparison.OrdinalIgnoreCase)))
							vRepetido = true;
					}
					if (vRepetido)
					{
						this.lblResultado.ForeColor = System.Drawing.Color.BlueViolet;
						this.lblResultado.Text = "Arquivo já incluido!";
					}
					else
					{
						this.filUpload.PostedFile.SaveAs(caminhoArq);
						this.lstAnexos.Items.Add(new ListItem(this.filUpload.FileName, caminhoArq));
						this.lblResultado.ForeColor = System.Drawing.Color.Green;
						this.lblResultado.Text = "Anexo incluído: " + this.filUpload.FileName;
					}
				}
				else
				{
					this.lblResultado.ForeColor = System.Drawing.Color.BlueViolet;
					this.lblResultado.Text = "Selecione um arquivo para anexar";
				}
			}
			catch (Exception ex)
			{
				this.lblResultado.ForeColor = System.Drawing.Color.Salmon;
				this.lblResultado.Text = "Falha ao anexar arquivo:<br>" + ex.Message.ToString();
			}
		}

código para o evento Click do botão Excluir Anexo

protected void btnExcluirArq_Click(object sender, EventArgs e)
		{
			try
			{
				foreach (ListItem li in this.lstAnexos.Items)
				{
					if (li.Selected)
						li.Enabled = false;
						//this.lstAnexos.Items.Remove(li);
				}
				this.lblResultado.Text = "";
			}
			catch (Exception ex)
			{
				this.lblResultado.ForeColor = System.Drawing.Color.Salmon;
				this.lblResultado.Text = "Falha ao excluir arquivo anexado:<br>" + ex.Message.ToString();
			}
		}

 

 

 

 

AUTOR: "eriva_br"

 

Dúvidas, criticas, contribuições, correções e adições seram bem vindas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.