Artigos / Tekever.eu

Artigos de desenvolvimento e opinião em tecnologia.

Secções:

Linux | Windows | .NET / ASP | LAMP | Java | Só Conversa |

 


Formularios 5. Envio de Email - ASP.NET/C#

  2006-08-21




Vamos começar por criar uma página de formulário de contacto onde um utilizador escreve o seu email, o assunto e deixa um texto a ser enviado por email para o website em questão (Ver os exemplos anteriores de criação de formulários e validações: Formularios 2. Criar Campos , Formularios 3. Validar Campos).

Vamos usar o seguinte formulário já criado com as validações correctas:



O código completo da página email.aspx usado é o seguinte:

 
<%@ 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>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>

<asp:PlaceHolder ID="phFormulario" runat="server">

email:<br />
<asp:TextBox ID="frmEmail" runat="server"></asp:TextBox><br />
<asp:RequiredFieldValidator ID="ValidaEmailObrigatorio" runat="server"
ErrorMessage="email obrigatório" ControlToValidate="frmEmail" Font-Bold="true"
Display="Dynamic" EnableClientScript="true"> </asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="ValidaEmailValido" runat="server"
ErrorMessage="email inválido" Display="Dynamic" ControlToValidate="frmEmail"
ValidationExpression="
^[a-zA-Z][w.-]*[a-zA-Z0-9]@[a-zA-Z0-9][w.-]*[a-zA-Z0-9].[a-zA-Z][a-zA-Z.]
*[a-zA-Z]$
" EnableClientScript="true"
Font-Bold="
true"></asp:RegularExpressionValidator>
 
<br /><br />
 
assunto:<br />
<asp:TextBox ID="
frmAssunto" runat="server"></asp:TextBox><br />
<asp:RequiredFieldValidator ID="
ValidaAssunto" runat="server"
ErrorMessage="
introduza assunto" ControlToValidate="frmAssunto"
Display="
Dynamic" Font-Bold="true"></asp:RequiredFieldValidator>

<br /><br />

texto:<br />
<asp:TextBox ID="
frmTexto" runat="server" TextMode="MultiLine" Height="85px"
Width="
201px"></asp:TextBox><br />
<asp:RequiredFieldValidator ID="
ValidaTexto" runat="server"
ErrorMessage="
introduza um texto" ControlToValidate="frmTexto" Font-Bold="true"
Display="
Dynamic" EnableClientScript="true"> </asp:RequiredFieldValidator>
<br /><br />
<asp:Button ID="
btnEnviar" runat="server" Text="Enviar"
OnClick="
btnEnviar_Click" />

</asp:PlaceHolder>

</div>
</form>
</body>
</html>


A ideia é basicamente que ao clicarmos no botão ENVIAR, seja executado um código que permita enviar um email ao webmaster do site que o utilizador visita. Para isso passe do modo de visualização “Source” para “Design” onde poderá ver o formulário construído. Faça duplo clique com o rato sobre o botão ENVIAR. É automaticamente aberto o ficheiro de extensão cs correspondente a esta página (email.aspx.cs) com o novo evento criado ao accionar o botão pela adição automática do código:

 
protected void btnEnviar_Click(object sender, EventArgs e)
{
//É precisamente aqui dentro que vamos trabalhar o nosso código de envio de
email
}
 


Em primeiro lugar temos de importar as bibliotecas necessárias, existem uma série delas que são adicionadas por defeito quando o código é gerado, mas neste caso temos de adicionar no topo antes do Page Load, o seguinte:

 
using System.Web.Mail;
 


Depois escolhemos o Servidor (SmtpServer) como “localhost” e instanciamos um objecto de MailMessage. As definições de destinatário, remetente, assunto e texto do email são configurados pelas propriedades (atributos) como se pode ver em seguida no código completo.

NOTA:
Para enviar efectivamente um email (testar o codigo) verifique que tem instalado e a correr o Internet Information Services – em Control Panel escolha Administrative Tools – caso não esteja instalado terá de o instalar.

Código Completo do ficheiro
email.aspx.cs

 
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;
using System.Web.Mail;
 
public partial class email : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
 
}
protected void btnEnviar_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
SmtpMail.SmtpServer = "localhost";
 
MailMessage email = new MailMessage();
email.To = "destinatario@exemplo.com";
email.From = frmEmail.Text; // quem envia
email.Subject = frmAssunto.Text; // assunto
email.Body = frmTexto.Text; // texto do email
 
try
{
SmtpMail.Send(email);
phFormulario.Visible = false;
Response.Write("email enviado");
}
catch (Exception exc)
{
string Erro = "Falha no envio: " + exc.ToString();
phFormulario.Visible = false;
Response.Write(Erro);
}
}
}
}
 


Se precisar autenticação usar:
 
try
{
MailMessage mensagem = new MailMessage(frmEmail.Text, "
destinatario@exemplo.com"
, frmAssunto.Text, frmTexto.Text);
SmtpClient smtpClient = new SmtpClient(frmSMTPServer.Text);
System.Net.NetworkCredential SMTPUserInfo = new
System.Net.NetworkCredential (frmSMTPUser.Text, frmSMTPPass.Text);
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = SMTPUserInfo;
smtpClient.Send(mensagem);
Response.Write("email enviado");
 
}
catch (Exception exc)
{
Response.Write("Erro! Falha no envio: <br/> " + exc.ToString());
}
 


Podem ocorrer problemas no envio de email cujos dominios sejam diferentes do dominio do servidor (exemplo: dominio de servidor mail.xpto.com e endereço exemplo@gmail.com) e que resultam num erro do genero:

Mailbox unavailable. The server response was: 5.7.1 Unable to relay for (email address).

Isto acontece pois o servidor tenta prevenir o uso indevido do mesmo para encaminhamento de emails spam. Nestes casos usar a seguinte validação:

 
smtpClient.DeliveryMethod =
System.Net.Mail.SmtpDeliveryMethod.PickupDirectoryFromIis;
 






Escrito por Tânia Penedo
Website do autor: http://www.taniapenedo.com
Dados do autor: Programação multi-plataforma; C#, PHP, Java, MySQL, SQL-Server.

Comentários

Comentários a este artigo

Enviado em 2010-02-26 por Thiago Siqueira
Fiz da forma que está explicando, + na hora que mando enviar, dá erro (A resposta do servidor foi: 553 UTILIZE A AUTENTICACAO PARA ENVIO DE MENSAGENS).
Quando tento inserir a parte do código de autenticação, surge varios erros e não consegui andar mais. Pode me ajudar? Sou iniciante. Obrigado

Enviado em 2008-05-21 por Janice
Muito bom!
Fiz um formulário de e-mail em asp e está funcionando direito, mas em alguns computadores na hora de clicar no enviar aparece que a pagina não pode ser exibida, como se o arquivo form em asp não estivesse no site.
Você sabe por que isso acontece e como posso corrigir isso?

Obrigado.

Enviado em 2008-05-20 por Pablo
Muito bom, bem prático! Sou iniante na área de programção e achei muitíssimo detalhada a descrição!
Porém estou com problema!!

\"\"Depois escolhemos o Servidor (SmtpServer) como “localhost” e instanciamos um objecto de MailMessage. As definições de destinatário, remetente, assunto e texto do email são configurados pelas propriedades (atributos) como se pode ver em seguida no código completo.\"

Como faço para instanciar um objeto? e criar o servidor!?
Por favor, se puder me contate pelo e-mail
~~bigboy1000@hotmail.com~~

Gostaria de me informar a respeito de seus tutoriais! Obrigado!

Enviado em 2007-10-13 por Jose Geraldo
como funciona no caso de autenticacao no servidor~ favor entre em contato msn cnec7l@hotmail.com

Enviado em 2007-10-08 por Rodrigo
Show de bola, tudo que euprecisava :D

Muito Obrigado

Enviado em 2007-01-03 por Wesley Costa
Muito bom....

Faça um comentário

Comentário

Nome
E-mail

Este comentário só ficará válido depois de fazer clique no link que lhe será enviado já a seguir para o e-mail indicado. Como tal garanta que o seu e-mail está válido e operacional, se não receber o nosso e-mail verifique os seus filtros de SPAM, ou a caixa de Lixo/Trash do seu cliente de e-mail.

 

Avaliar artigo

Avalie este artigo

 



Nome
E-mail

Este voto só ficará contabilizado depois de fazer clique no link que lhe será enviado já a seguir para o e-mail indicado. Como tal garanta que o seu e-mail está válido e operacional, se não receber o nosso e-mail verifique os seus filtros de SPAM, ou a caixa de Lixo/Trash do seu cliente de e-mail.

 

 

 

 

Recomendar este artigo a alguém

Envie a alguém conhecido

De:  
Nome E-mail
 
Para:  
Nome E-mail
Será enviado um link da página deste artigo para o e-mail que indicar como destino.