[Resolvido] [asp.net] Enviar e-mail com asp.net
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"](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:
/applications/core/interface/imageproxy/imageproxy.php?img=http://img.photobucket.com/albums/v331/eriva_br/imagemEmail.jpg&key=122936075e5ae44a9f9bfc1f5a8eb450b5637b0e6dd720cfe5a9cfa3b0f0c07c" alt="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.
Discussão (0)
Carregando comentários...