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:
CODE
<%@ 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>
            &nbsp;
            <asp:Label ID="lblSmtp" runat="server" Style="z-index: 109; left: 50px; position: absolute;
                top: 21px" Text="Servidor SMTP"></asp:Label>
            &nbsp;
            <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:



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

Namespaces:
CODE
//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:
CODE
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
CODE
#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
CODE
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
CODE
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
CODE
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.

Você gostou? Comente no fórum!

Comentários:

Gordinho disse:

bom dia, dei uma olhada em seu código e fiz um teste colocando em meu site para testar,
quando clico em envia anexo da erro na seguinte linha:

string
caminhoArq = "E:\\Temp\\" + this.filUpload.FileName;

arquivo não encontrado no respectivo caminho.

o outro é assim, eu ocultei a parte de verificação de anexo e tentei mandar um e-mail sem anexo.
só que da erro na linha para enviar o e-mail.

//enviando e-mail
client.Send(message);

se possível gostaria de uma ajuda para resolver.

Att. Felipe

eriva_br disse:

QUOTE(Gordinho @ 02/06/2008 - 08:35) <{POST_SNAPBACK}>
bom dia, dei uma olhada em seu código e fiz um teste colocando em meu site para testar,
quando clico em envia anexo da erro na seguinte linha:

string
caminhoArq = "E:\\Temp\\" + this.filUpload.FileName;

arquivo não encontrado no respectivo caminho.

mas vc tem essa pasta ai no seu computador ???


QUOTE(Gordinho @ 02/06/2008 - 08:35) <{POST_SNAPBACK}>

o outro é assim, eu ocultei a parte de verificação de anexo e tentei mandar um e-mail sem anexo.
só que da erro na linha para enviar o e-mail.

//enviando e-mail
client.Send(message);


...e qual a mensagem de erro ???

Gordinho disse:

não tenho a pasta, o que faz essa linha:

string caminhoArq = "E:\\Temp\\" + this.filUpload.FileName;

para ter uma noção de qual pasta colocar no lugar do "E:\\Temp\\".

tem que ser duas "\\" ou pode ser uma?

[/size]

[size="2"]erro no send:


Erro no envio de email:
Failure sending mail. linha = 18


essa "linha = 18" foi um modo que encontrei de acahr onde da erro.

att, Felipe

eriva_br disse:

QUOTE(Gordinho @ 02/06/2008 - 09:35) <{POST_SNAPBACK}>
não tenho a pasta, o que faz essa linha:

ai não vai funcionar mesmo bangin.gif , cria uma pasta e passa o caminho correto assobiando.gif

essa pasta serve para armazenar os arquivos postados no servidor, já que a página pode estar em qualquer cliente


QUOTE(Gordinho @ 02/06/2008 - 09:35) <{POST_SNAPBACK}>
string caminhoArq = "E:\\Temp\\" + this.filUpload.FileName;

para ter uma noção de qual pasta colocar no lugar do "E:\\Temp\\".

tem que ser duas "\\" ou pode ser uma?

se quiser colocar uma barra informe antes com o caracter @, pois em C o caracter \ é reservado, exemplo:
string
caminhoArq = @"C:\SuaPasta\" + this.filUpload.FileName;


QUOTE(Gordinho @ 02/06/2008 - 09:35) <{POST_SNAPBACK}>
erro no send:

Erro no envio de email:
Failure sending mail. linha = 18


essa "linha = 18" foi um modo que encontrei de acahr onde da erro.

não conheço esse erro... a rotina acima esta correta, testei com terra, gmail, hotmail, etc... verifica se esta passando os valores corretos para smtp, porta, usuario e senha


boa sorte

Ver o restante dos comentários no fórum (e aproveitar pra comentar também !).

Mais recentes em .Net

Lendo arquivos texto
Por quintelab - Este artigo traz um assunto simples mas que quase todos...
Formatando colunas da gridview em tempo de execução
Por quintelab - Este artigo mostra como formatar uma coluna da gridview...
Carregar página de pesquisa com pop up
Por quintelab - O artigo mostra como chamar uma página de pesquisa...
Exibindo mapa usando a api do google.
Por Ivan - Usando subgurim.net...
Compactando arquivos com c#
Por Joaquim Tito - Dotnet zip library...

Ver mais Artigos de .Net.

Ver e retirar outras dúvidas no fórum Webly.

Alguns Direitos Reservados | RSS | O Fórum

Webly Portal e Fóruns - Internet + Humana | Design by ArthurHenrique.com