none
Dúvida para enviar e-mail

    Question

  • Pessoal,

    Estou com a seguinte dúvida. Eu criei um compent class no meu projeto chamado Email.cs e dentro do meu projeto vários webforms enviarão email e cada um com um layout diferente.
    Como são muitos e-mails diferentes eu criei uma pasta dentro do meu projeto chamada template e dentro delas existem todos os emails (webforms) que serão enviados ao cliente.
    Eu gostaria de saber como faço para o Mensagem.body enviar um webform como conteúdo?
    Wednesday, October 19, 2011 4:17 PM

All replies

  • Você terá de ler os arquivos via System.IO

     qual a extensão dos seus arquivos ? 


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Se for útil marque como resposta e faça um Developer feliz :)
    Wednesday, October 19, 2011 4:34 PM
  • Artur uma saída poderia ser vc criar um label em cada templete, pois os labels aceitam tudo vc cria dentro dele <table> <tr><td> como se fosse um aspx e assim vc pode personalizar seus e-mails já que vc tem muitos, mais sabe a quantidade e pelo que acho dependendo do e-mail vc tem que fazer uma referencia explicita a ele, veja um exemplo

    lbl_conteudo.text = "<table>";

    lbl_conteudo.text += "<tr>";

    lbl_conteudo.text += "<td coospan="+" 2 "+">;

    e assim vc vai concatenando, se vc precisar de exibir dados no e-mail vc tb pode fazer como mostrei acima criar um datareader e dar um for e trás a informação tipo isso

    lbl_conteudo.text += "<td >" + dr[i]["dado"] + "</td>";

    Uso isso sempre que quero fazer relatórios ou personalizar algo, como acho que é o seu caso.


    Junior
    Wednesday, October 19, 2011 4:43 PM
  • Arthur,

    se você estiver com tempo para estudo e pesquisa, procure sobre um cara chamado .xslt. Uma forma de você criar templates juntamente com sua estrutura HTML e, combinar com propriedades implementadas na sua classe, de uma forma mais profissional e estruturada. Logo, você irá ler esse arquivo .xslt e realizar a transformação do mesmo.

    Um maneira mais rápida, seria você criar todos os seus templates de e-mail, em páginas do tipo .html e em cada local onde você desejar inserir informações (vindas de um banco de dados), você identificaria com uma 'tag' específica, exemplo: #nomeCliente#.

    No momento de realizar os disparos, você teria que realizar a leitura (System.IO) deste arquivo de template (.html), e realizar um .replace() das 'tags' pelo seu conteúdo vindo do banco. Feito isso, você terá uma variável com todo o corpo do seu e-mail, já com o template e seus dados dinâmicos e daí então, é só ultilizá-lo como 'body' do seu e-mail.

    Bom, é só uma dica. Qualquer coisa, é só falar.


    Att,
    Felippe

    felippem.wordpress.com
    @felippem

    Wednesday, October 19, 2011 8:42 PM
  • Olavo,

     

       Obrigado pela resposta. Então... além dos webforms que compõem meu site eu criei dentro de uma pasta chamada template outros webforms que tem o conteúdo HTML que eu gostaria que fosse enviado como e-mail para o cliente.

    Hoje, para disparar o e-mail eu criei um arquivo chamado Email.cs que contém todo código necessário para o envio. A única ressalva é que onde seria o Body do email está hardcode "<html> <head> <title>teste</title></head><body>teste</body></html>".

     

    O código do Email.cs segue abaixo. 

    O que eu preciso é que o webforms FaleConosco.aspx.cs passe como parâmetro o conteúdo do webforms de template que seria referente ao Fale Cosco. 

    O webforms Cadastro.aspx.cs passe como parâmetro o conteúdo do webforms do template que seria referente ao recebemos seu pedido.

    e assim por diante

     

     

     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Configuration;

    using System.Net.Mail;

    using System.Web.UI.WebControls;

     

    namespace IFT_005

    {

        public class Email

        {

     

            public static void EnviarEmail(string Nome_FaleConosco,

                                           string Login_FaleConosco,

                                           string Email_FaleConosco,

                                           string Telefone_FaleConosco,

                                           string Tipo_Coacntato_FaleConosco,

                                           string Assunto_FaleConosco,

                                           string Mensagem_FaleConosco,

                                           string Flag)

     

            {

                //Cria Objeto que Envia E-mail

                SmtpClient client = new SmtpClient();

     

                MailMessage Mensagem = new MailMessage();

               //meu email de teste

                 Mensagem.To.Add(new MailAddress("arthurroco@gmail.com"));

                Mensagem.From = new MailAddress("arthurroco@gmail.com");

                Mensagem.IsBodyHtml = true;

     

                //Assunto do e-mail

                Mensagem.Subject = Assunto_FaleConosco;

     

                if (Flag == "FaleConosco")

                {

     

                    //Conteúdo do e-mail

                    Mensagem.Body = "<strong>" +

                                    "NOME: " +

                                    "</strong>" +

                                    Nome_FaleConosco +

                                    "<br/>" +

                                    "<strong>" +

                                    "LOGIN: " +

                                    "</strong>" +

                                    Login_FaleConosco +

                                    "<br/>" +

                                    "<strong>" +

                                    "EMAIL: " +

                                    "</strong>" +

                                    Email_FaleConosco +

                                    "<br/>" +

                                    "<strong>" +

                                    "TELEFONE: " +

                                    "</strong>" +

                                    Telefone_FaleConosco +

                                    "<br/>" +

                                    "<strong>" +

                                    "TIPO DE CONTATO: " +

                                    "</strong>" +

                                    Tipo_Contato_FaleConosco +

                                    "<br/>" +

                                    "<strong>" +

                                    "MENSAGEM: " +

                                    "</strong>" +

                                    Mensagem_FaleConosco;

                }

                else

                {

                    //Conteúdo do e-mail

                    Mensagem.Body = "teste";

                }

     

                try

                {

                    //Enviando o e-mail

                    client.Send(Mensagem);

                }

                catch    

                { 

                }

            }

        }

    }

     

    Mais uma vez obrigado

    Thursday, October 20, 2011 1:17 AM
  • Felippe,

     

         Agradeço muito a sua resposta. Tenho tempo sim e vou me inteirar sobre o que você disse. A respeito de incluir TAGs no template e fazer replace é exatamente o que eu quero fazer. Só estou apanhando no como fazer. 

    Você teria algum exemplo para m passar? Agradeceria muito.

     

    Obrigadão pela força

    Thursday, October 20, 2011 1:24 AM
  • Junior,

        Agradeço muito sua ideia, mas eu preciso de uma coisa mais específica. Algo semelhante ao que o site da americanas e submarino faz. Você realiza uma compra no site e é enviado um e-mail automático. Hoje cada webforms meu que precisa enviar e-mail tem hardcode .aspx.cs a lógica de envio de e-mail. Se o cadastro é realizado com sucesso eu mando o email concatenando a parte fixa com os valores dos texts

       Mensagem.Body = "<strong>" +

                                    "NOME: " +

                                    "</strong>" +

                                    Nome_FaleConosco +

                                    "<br/>" +

                                    "<strong>" +

                                    "LOGIN: " +

                                    "</strong>" +

                                    Login_FaleConosco +

                                    "<br/>" +

                                    "<strong>" +

                                    "EMAIL: " +

                                    "</strong>" +

                                    Email_FaleConosco +

                                    "<br/>" +

                                    "<strong>" +

                                    "TELEFONE: " +

                                    "</strong>" +

                                    Telefone_FaleConosco +

                                    "<br/>" +

                                    "<strong>" +

                                    "TIPO DE CONTATO: " +

                                    "</strong>" +

                                    Tipo_Contato_FaleConosco +

                                    "<br/>" +

                                    "<strong>" +

                                    "MENSAGEM: " +

                                    "</strong>" +

                                    Mensagem_FaleConosco;

     

    Eu quero dar uma melhorada nesse código e para todos os e-mails eu criei um webforms. Quero somente passar como parâmetro o webforms q pretendo usar num determinado ponto do código e chamar um único arquivo que contenha a lógica de envio de e-mail e faça os replaces.

     

    Obrigado pela força

    Thursday, October 20, 2011 1:30 AM
  • Arthur,

    seguindo pelo segundo modo como te disse na thread anterior (.replace() nas tags), você poderia fazer do tipo:

     

    string corpoEmail = System.IO.File.ReadAllText(Server.MapPath("/Templates/NovoCadastro.html"));
    corpoEmail = corpoEmail.Replace("#nomeCliente#", txtNomeCompleto.Text()); [...]
    


    Lembrando o óbvio, que você deverá validar tudo certinho as informações de entrada e a existência do arquivo em disco, para que você não se surpreenda com uma bela 'tela amarela'.

    Abraços.

     

     


    Att,
    Felippe

    felippem.wordpress.com
    @felippem
    Thursday, October 20, 2011 2:26 AM
  • Bom dia Felippe,

    Tudo bem contigo?

     

        Cara...obrigadão mesmo pela ajuda. Deu certo. Era exatamente o que eu estava tentando fazer.

     

     

    Thursday, October 20, 2011 1:44 PM
  • Por nada! Estamos aí! Sucesso!


    Att,
    Felippe

    felippem.wordpress.com
    @felippem
    Thursday, October 20, 2011 1:49 PM