Ir para conteúdo

Arquivado

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

Lab Design

Formatar Email em HTML para envio

Recommended Posts

Galera, eu to com esse problema.

 

Não consigo colocar um CRLF no final de cada linha na hora de montar o body em C#.

Já testei de várias formas mas nenhuma delas ta funcionando:

Se uso o "\r\n" quando o email é disparado chega como blalbla0D0A e assim por diante.

 

Abaixo o body que to tentando preparar:

string html;

 

html = "<html>"+ControlChars.NewLine+

"\t<head>"+ControlChars.NewLine+

"\t\t<title>Alpha Clin - Contato</title>\\n"+

"\t\t<style type=text/css>\\n"+

"\t\t\t * {font: normal 9pt Verdana, Arial, Helvetica, sans-serif;color: #000000}\\n"+

"\t\t\t a {text-decoration:none}"+

"\t\t\t a:hover {color: #ff0000;border-bottom: solid 1px #ff0000;font-weight:bold}"+

"\t\t\t td {border: solid 1px #c0c0c0}"+

"\t\t\t .label {text-align=right}"+

"\t\t\t .value {font-weight:bold}"+

"\t\t </style>"+

"\t </head>"+

"\t<body topmargin=4 leftmargin=4>"+

"<table border=4 cellpadding=4 cellspacing=0 width=565>"+

"<tr><td colspan=2><img src='http://www.alphaclin.com.br/images/fundotopo.jpg' width=560></td></tr>"+

"<tr><td align=center colspan=2><font size=4><b>FALE CONOSCO</b></font></td></tr>"+

"<tr><td class=label>Data:</td><td class=value><b>" + String.Format("{0:dd/MM/yyyy}", DateTime.Now) +

"<tr><td class=label>De:</td><td class=value><b>" + nome.Text + "</td></tr>"+

"<tr><td class=label>Fone:</td><td class=value><b>" + fone.Text + "</b></td>"+

"<tr><td class=label>E-mail:</td><td class=value><a href='mailto:" + de.Text + "'><b>" + de.Text + "<b/></a></td></tr>"+

"<tr><td class=label>Assunto</td><td class=value>" + assunto.Text + "</td></tr>"+

"<tr><td class=label>Mensagem</td><td>" + mensagem.Text + "</td></tr>"+

"\t\t</table>"+

"\t</body>"+

"</html>";

Algo bem simples porém da forma que está é recusado pela maioria dos servidores alegando caracteres maliciosos no email.

Tudo que eu preciso é somente que o body chegue no destino sendo cada <tr num linha, cada style numa linha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto é em tela, no corpo do email num funciona.

 

em php eu uso "\r\n" no final de cada linha mas no C# num funciona chega no destino como 0D0A ou seja chega como caractere normal e não caractere de controle.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só Fernando, vou postar o codigo completo abaixo pra voce entender melhor o que está acontecendo:

1) O email chega formatado no cliente sem problemas porém a maioria dos servidores recusam ele alegando codigos maliciosos, isso devido ao caracteres 0D0A que o aspnet ta convertendo automaticamente.

private void SendMail()

{

TextBox nome = (TextBox)frmAdd.FindControl("txt_nome");

TextBox fone = (TextBox)frmAdd.FindControl("txt_fone");

TextBox de = (TextBox)frmAdd.FindControl("txt_email");

TextBox assunto = (TextBox)frmAdd.FindControl("txt_assunto");

TextBox mensagem = (TextBox)frmAdd.FindControl("txt_mensagem");

Label status = (Label)frmAdd.FindControl("mailError");

 

// prepara o email em html

 

string html;

html = ""+

"<html>\n"+

"'<head>\n"+

" <title>Alpha Clin - Contato</title>\n"+

" <style type=text/css>\n"+

" * {font: normal 9pt Verdana, Arial, Helvetica, sans-serif;color: #000000}\n"+

" a {text-decoration:none}\n"+

" a:hover {color: #ff0000;border-bottom: solid 1px #ff0000;font-weight:bold}\n"+

" td {border: solid 1px #c0c0c0}\n"+

" .label {text-align=right}\n"+

" .value {font-weight:bold}\n"+

" </style>\n"+

" </head>\n"+

"\n\n/"+

" <body topmargin=4 leftmargin=4>\n"+

" <table border=4 cellpadding=4 cellspacing=0 width=565>\n"+

" <tr><td colspan=2><img src='http://www.alphaclin.com.br/images/fundotopo.jpg' width=560></td></tr>\n"+

" <tr><td align=center colspan=2><font size=4><b>FALE CONOSCO</b></font></td></tr>\n"+

" <tr><td class=label>Data:</td><td class=value><b>" + String.Format("{0:dd/MM/yyyy}", DateTime.Now) +"\n"+

" <tr><td class=label>De:</td><td class=value><b>" + nome.Text + "</td></tr>\n"+

" <tr><td class=label>Fone:</td><td class=value><b>" + fone.Text + "</b></td>\n"+

" <tr><td class=label>E-mail:</td><td class=value><a href='mailto:" + de.Text + "'><b>" + de.Text + "<b/></a></td></tr>\n"+

" <tr><td class=label>Assunto</td><td class=value>" + assunto.Text + "</td></tr>\n"+

" <tr><td class=label>Mensagem</td><td>" + mensagem.Text + "</td></tr>\n"+

" </table>\n"+

" </body>\n"+

"</html>\n";

 

MailMessage objEmail = new MailMessage(

"lauro@linux", "webmaster@sbrafh.org.br", assunto.Text, html);

objEmail.Priority = MailPriority.Normal;

objEmail.IsBodyHtml = true;

objEmail.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1");

// objEmail.Attachments.Add MailMessage("d:\cromo.psd");

 

/*

* Aqui configuramos os dados de envio como host e porta

* note que a porta deve ser um inteiro, por isso foi

* necessário converter a string em inteiro

*/

SmtpClient objConfiguracao = new SmtpClient();

objConfiguracao.Host = "10.1.1.110";

objConfiguracao.Port = 25;

objConfiguracao.UseDefaultCredentials = true;

 

/*

* Aqui passamos criamos os dados de login e passamos

* para o objConfiguracao

*/

 

NetworkCredential objLogin = new NetworkCredential();

objLogin.UserName = "lauro@linux";

objLogin.Password = "lauro";

objConfiguracao.Credentials = objLogin;

 

 

frmAdd.Visible = false;

mailOk.Visible = true;

 

try

{

/*Aqui enviamos o e-mail e caso não haja

* erros o lblestatus mostra a mensagem

* E-mail enviado com sucesso e limpa os dados

*/

objConfiguracao.Send(objEmail);

}

catch (Exception erro)

{

 

mailOk.Visible = false;

mailErr.Visible = true;

}

 

objEmail.Dispose();

 

}

Agora o resultado no programa de correio:

 

Return-Path: <lauro@linux.labdesign.homelinux.com>

Delivered-To: sbrafh-webmaster@sbrafh.org.br

Received: (qmail 22419 invoked by uid 1000); 22 Dec 2007 22:36:31 -0000

Received: from unknown (10.1.10.172)

by hm101.locaweb.com.br with QMQP; 22 Dec 2007 22:36:31 -0000

X-LocaWeb-Detect-Virus: NON

Received: from unknown (HELO labdesign.homelinux.com) (201.92.204.85)

by hm473 with SMTP; 22 Dec 2007 22:36:23 -0000

Received: from labdesign (lauro [10.1.1.102])

by labdesign.homelinux.com (Postfix) with ESMTP id 6822498793

for <webmaster@sbrafh.org.br>; Sat, 22 Dec 2007 20:57:03 -0200 (BRST)

mime-version: 1.0

from: lauro@linux

to: webmaster@sbrafh.org.br

date: 22 Dec 2007 20:35:27 -0200

subject: teste de contato com envio de emails

content-type: text/html; charset=iso-8859-1

content-transfer-encoding: quoted-printable

Message-Id: <20071222225703.6822498793@labdesign.homelinux.com>

 

<html>=0A'<head>=0A <title>Alpha Clin - Contato</title>=0A <style type=3Dtext/css>=

=0A * {font: normal 9pt Verdana, Arial, Helvetica, sans-serif;color: #000000}=

=0A a {text-decoration:none}=0A a:hover {color: #ff0000;border-bottom:=

solid 1px #ff0000;font-weight:bold}=0A td {border: solid 1px #c0c0c0}=

=0A .label {text-align=3Dright}=0A .value {font-weight:bold}=0A </style>=

=0A </head>=0A=0A=0A/ <body topmargin=3D4 leftmargin=3D4>=0A <table border=3D4=

cellpadding=3D4 cellspacing=3D0 width=3D565>=0A <tr><td colspan=3D2><img=

src=3D'http://www.alphaclin.com.br/images/fundotopo.jpg' width=3D560></td></tr>=

=0A <tr><td align=3Dcenter colspan=3D2><font size=3D4><b>FALE CONOSCO</b></font></td></tr>=

=0A <tr><td class=3Dlabel>Data:</td><td class=3Dvalue><b>22/12/2007=0A=

<tr><td class=3Dlabel>De:</td><td class=3Dvalue><b>Lauro assis lima de=

brito</td></tr>=0A <tr><td class=3Dlabel>Fone:</td><td class=3Dvalue><b>11=

4164-1804</b></td>=0A <tr><td class=3Dlabel>E-mail:</td><td class=3Dvalue><a=

href=3D'mailto:lab.design@globo.com'><b>lab.design@globo.com<b/></a></td></tr>=

=0A <tr><td class=3Dlabel>Assunto</td><td class=3Dvalue>teste de contato=

com envio de emails </td></tr>=0A <tr><td class=3Dlabel>Mensagem</td><td>teste=

de contato com envio de emails </td></tr>=0A </table>=0A

 

- observe que toda quebra de linha ficou como 0A e não o codigo CR que seria chr(10)

 

 

 

Agora um exemplo de outro email enviado atraves de um site php usando uma class em php (Aqui eu usei um \r\n no final de cada linha:

 

Return-Path: <apache@labdesign.homelinux.com>

X-Original-To: lauro@localhost

Delivered-To: lauro@localhost.labdesign.homelinux.com

Received: by labdesign.homelinux.com (Postfix, from userid 74)

id 6CC03716E2; Fri, 21 Dec 2007 02:27:05 -0200 (BRST)

To: lauro@localhost.labdesign.homelinux.com

Subject: Contato

MIME-Version: 1.0

From: LAURO A L BRITO <lab.design@globo.com>

Content-Type: multipart/alternative;

boundary="=_4101fbc295f257b7bc81cc4395c1d687"

Message-ID: <jtdtp5.8kelyk@10.1.1.110>

Date: Fri, 21 Dec 2007 02:27:05 -0200 (BRST)

Status:

 

--=_4101fbc295f257b7bc81cc4395c1d687

Content-Type: text/plain; charset="ISO-8859-1"

Content-Transfer-Encoding: 7bit

 

 

 

 

Aca - Marketing Escolar

 

#topo {

background:url(http://10.1.1.110/aca/images/topoEmail.png) no-repeat;

height:100px;

padding:44px 0 0 125px;

font: bolder 18pt Arial, Helvetica, sans-serif, Verdana;

color:#ffffff;

text-align:center;

}

 

P, p {

font: 9pt Verdana, Arial, Helvetica, sans-serif;

color:#000066

}

 

 

TD, td {

font-family: Verdana, Arial, Helvetica, sans-serif;

font-size: 9pt;

font-style: normal;

font-weight: normal;

color:#000066

}

 

a {

font: bolder 9pt arial, verdana; color:#000050; font-size:9pt;

text-decoration:none

}

 

a:hover {

color:#000066;

text-decoration:underline;

font-weight:bold;

}

 

TD {

padding:0 4px;

font: 9pt Arial, Verdana, Helvetica, sans-serif;

color:#000066

}

 

.tMenu {

height:20px;

background:#000066;

text-align:center;

font: bolder 9pt Arial, Helvetica, sans-serif, Verdana;

color:#CECEE7

}

 

.menu {

padding-left:5px;

height:6px;

background: #CECEE7}

 

.boxborder {border: 1px solid #CECEE7}

 

.titulo, .data {

padding:44px 0 0 125px;

font: bolder 12pt Arial, Helvetica, sans-serif, Verdana;

color:#ffffff;

text-align:center;

}

 

.data {

font: bolder 10pt Arial, Helvetica, sans-serif, Verdana

}

 

.tleft {

padding-left:3pt;

background:#CECEE7

}

 

.tcenter {

text-align:center;

background-color:#CECEE7

}

 

.tright {

padding:0 3pt;

text-align:right;

background:#CECEE7;

font-size:8pt;

height:15pt;

color:#000066

}

 

#corpo {

border-left:1px solid #000066;

border-right:1px solid #000066;

text-align:center;

}

 

#rodape {

background:#a0a0a0;

text-align:center;

font: bolder 10pt Arial, Helvetica, sans-serif, Verdana;

color:#000;

height:20px;

background:url(http://10.1.1.110/aca/images/rodapeEmail.png) no-repeat;

}

#rodape a {

font: bolder 9pt arial, verdana;

color:#CECEE7; font-size:9pt;

text-decoration:none

}

 

#rodape a:hover {

color:#fff;

text-decoration:none;

border-bottom:1px solid #DF773A

}

 

 

 

 

 

 

 

 

Contato

 

 

 

 

 

 

 

Escola:

LAB GRAPHIC DESIGN

 

 

Nome:

LAURO A L BRITO

 

 

E-mail:

lab.design@globo.com

 

 

Fone:

11 4184-9311

Estado:

SP

 

Assunto:

teste pagina de contato

 

Mensagem:

teste

 

 

 

 

Aca - Marketing Escolar

 

 

 

 

 

 

__________ NOD32 2742 (20071222) Information __________

 

This message was checked by NOD32 antivirus system.

http://www.eset.com

 

--=_4101fbc295f257b7bc81cc4395c1d687

Content-Type: text/html; charset="ISO-8859-1"

Content-Transfer-Encoding: quoted-printable

 

 

<html>

<head>

<title>Aca - Marketing Escolar</title>

<style type=3Dtext/css>

#topo {

background:url(http://10.1.1.110/aca/images/topoEmail.png) no-repeat;

height:100px;

padding:44px 0 0 125px;

font: bolder 18pt Arial, Helvetica, sans-serif, Verdana;

color:#ffffff;

text-align:center;

}

 

P, p {

font: 9pt Verdana, Arial, Helvetica, sans-serif;

color:#000066

}

 

 

TD, td {

font-family: Verdana, Arial, Helvetica, sans-serif;

font-size: 9pt;

font-style: normal;

font-weight: normal;

color:#000066

}

 

a {

font: bolder 9pt arial, verdana; color:#000050; font-size:9pt;

text-decoration:none

}

 

a:hover {

color:#000066;

text-decoration:underline;

font-weight:bold;

}

 

TD {

padding:0 4px;

font: 9pt Arial, Verdana, Helvetica, sans-serif;

color:#000066

}

 

.tMenu {

height:20px;

background:#000066;

text-align:center;

font: bolder 9pt Arial, Helvetica, sans-serif, Verdana;

color:#CECEE7

}

 

.menu {

padding-left:5px;

height:6px;

background: #CECEE7}

 

.boxborder {border: 1px solid #CECEE7}

 

.titulo, .data {

padding:44px 0 0 125px;

font: bolder 12pt Arial, Helvetica, sans-serif, Verdana;

color:#ffffff;

text-align:center;

}

 

.data {

font: bolder 10pt Arial, Helvetica, sans-serif, Verdana

}

 

.tleft {

padding-left:3pt;

background:#CECEE7

}

 

.tcenter {

text-align:center;

background-color:#CECEE7

}

 

.tright {

padding:0 3pt;

text-align:right;

background:#CECEE7;

font-size:8pt;

height:15pt;

color:#000066

}

 

#corpo {

border-left:1px solid #000066;

border-right:1px solid #000066;

text-align:center;

}

 

#rodape {

background:#a0a0a0;

text-align:center;

font: bolder 10pt Arial, Helvetica, sans-serif, Verdana;

color:#000;

height:20px;

background:url(http://10.1.1.110/aca/images/rodapeEmail.png) no-repeat=

;

}

#rodape a {

font: bolder 9pt arial, verdana;

color:#CECEE7; font-size:9pt;

text-decoration:none

}

 

#rodape a:hover {

color:#fff;

text-decoration:none;

border-bottom:1px solid #DF773A

}

 

</style>

 

</head>

 

<body topmargin=3D4 leftmargin=3D4>

<table style=3D'width:565px; margin-bottom:8px' border=3D0 cellpadding=

=3D0 cellspacing=3D0>

<tr>

<td id=3Dtopo class=3Dtitulo>Contato</td></tr>

 

<tr>

<td id=3Dcorpo>

<table border=3D0 width=3D100% >

<tr>

<td class=3DboxBorder bgcolor=3D#ffffff align=3Dcenter rowspan=3D4 widt=

h=3D150>

<img border=3D0 src=3Dhttp://10.1.1.110/aca/images/contato.gif></td>

<td align=3Dright class=3DboxBorder>Escola:</td>

<td class=3DboxBorder colspan=3D3><b>LAB GRAPHIC DESIGN</b></td></tr>

 

<tr>

<td align=3Dright class=3DboxBorder>Nome:</td>

<td class=3DboxBorder colspan=3D3><b>LAURO A L BRITO</td></tr>

 

<tr>

<td align=3Dright class=3DboxBorder>E-mail:</td>

<td class=3DboxBorder colspan=3D3><b>lab.design@globo.com</td></tr>

 

<tr>

<td align=3Dright class=3DboxBorder>Fone:</td>

<td class=3DboxBorder><b>11 4184-9311</td>

<td align=3Dright class=3DboxBorder>Estado:</td>

<td class=3DboxBorder><b>SP</td></tr>

<tr>

<td align=3Dright class=3DboxBorder>Assunto:</td>

<td class=3DboxBorder colspan=3D3><b>teste pagina de contato</td></tr>

<tr>

<td align=3Dright class=3DboxBorder vAlign=3Dtop>Mensagem:</td>

<td class=3DboxBorder colspan=3D4>teste</td>

</tr>

</table></td></tr>

 

<tr>

<td id=3Drodape><a href=3D'http://10.1.1.110/aca'>Aca - Marketing Esco=

lar</a></td>

</tr>

</table>

 

 

Veja que existe a quebra de linha da maneira que eu programei no codigo.

 

Isso estou vendo em detalhes no outlook.

 

O que to entendendo é que a class system.net.mail esta convertendo o "\n" para "0D" e considerando como dois caracteres em vez de um caractere de CR.

 

Em VB eu vi alguem usando o vbCrLf existe algo similar em C#?

Compartilhar este post


Link para o post
Compartilhar em outros sites

vbCrLf = '\n'

 

eu qdo usei nao tive problemas, mas agora q vi seu codigo, vi uma diferenca do meu,

nao mandei anexos nas msgs... nao sei se tem alguma coisa a ver, mas o content-type muda, entao o modo de interpretar deve mudar tb.

 

tente usar com <br /> nao testei no asp.net mas nos sisteminhas q fazia de gerenciamento de conteudo com asp, sempre usei <br />.

 

no final das contas se nao der tb... você tem 2 opcoes

 

1 - tentar fzr em VB (faça um teste primeiro, se der certo, crie uma dll separada so pra envio de e-mail e referncie no seu projeto)

 

2 - fazer com asp usando cdo ou cdonts. o asp.net enviaria o request para uma pagina asp (via post ou get) que enviaria os e-mails depois redirecionaria pros aspx denovo...

 

oq importa eh funcionar =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

O <br/> funcionaria no body da mensagem mas somente na hora da formatação.

O problema é que na hora de compor o email tem os headers e se eu não consigo fazer uma quebra de linha, imagine qual será o tamanho dessa linha com o header, com o body da mensagem etc... e tal. É aí que ta pegando.

 

Porque o email e formatado corretamente no cliente. Para que o ASPX não colocasse esse maldido 0D0A, eu teria que montar tudo numa única linha e ficaria um salseiro daqueles. Isso pra uma simples pagina de contato, agora imagine, um email de pedido numa loja virtual que tenho várias em php que talvez futuramente eu reprojete em ASP.NET. Tenho diversos sistemas corporativos que fazem muito uso de emails para pedidos e cotações on line.

 

Então eu preciso uma forma prática pra resolver esse problema.

 

Quanto ao ASP no meu velho tempo de ASP eu usava o aspmail acho que ele converte essas quebras de linha de alguma maneira. Eu vou dar uma vasculhada na minha class em php pra ver o que acontece, porque ela não somente envia mas faz um parse em todo o arquivo antes de enviar e acredito que ela deva pegar esses \r\n da mensagem e converter de alguma forma para um caracteres CrLf no padrão do email que num é o mesmo padrão utilizado para a tela. Acho que o bixo tá pegando é ai. A class system.net.mail deve criar os protocolos no formato de email e nessa conversão, ela acaba convertendo de maneira errada o \r\n.

 

Se você comparar o código do email do ASPX e do PHP vai notar que o do PHP chega certinho no cliente com as quebras de linha, as indentações, da maneira que eu programei e inclusive é aceito por qualquer servidor destinatário. Já o do ASPX não. A globo recusa, e acredito que outros também irão recusar por causa desses caracteres.

 

Ta faltando alguma coisa que ainda não descobri, pior que já procurei na net e até agora não encontrei nenhum exemplo para servir de base, o que acho é só scritps com o body de uma só linha e como eu preciso enviar junto ao email também o css, eu gosto de deixar indentado que fica fácil para a gente fazer qualquer manutenção.

 

 

Mas vou continuar procurando, alguem vai dar um solução porque num é possível um sistema integrado como o ASPX comer uma bola dessa certo.

 

Mas valeu pela tentativa ai.

 

Eu achei até uma dll uma tal de freeemail ou algo similar mas como o site vai estar num servidor remoto se for possível resolver sem recorrer a terceiros é menos dor de cabeça.

 

Um abração ai e Feliz Natal a toda a galera.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta mudar o encode

 

nessa linha,

 

objEmail.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1");

tenta usar

 

objEmail.BodyEncoding = System.Text.Encoding.ASCII;

ou UTF8, ou tenta como default.

 

Acho q essa conversão de caractér pode ser problema do encode.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei com os dois tambem e deu o mesmo resultado.

 

from: Lauro <lauro@linux.com>

to: Lauro <webmaster@portalridgid.com.br>

date: 23 Dec 2007 17:12:02 -0200

subject: =?iso-8859-1?Q?teste de contato com envio de emails?=

content-type: text/html; charset=us-ascii

content-transfer-encoding: quoted-printable

Message-Id: <20071223193327.3E38A98765@labdesign.homelinux.com>

 

<html>=0D=0A<head>=0D=0A <title>Alpha Clin - Contato</title>=0D=0A <style=

type=3Dtext/css>=0D=0A * {font: normal 9pt Verdana, Arial, Helvetica,=

sans-serif;color: #000000}=0D=0A a {text-decoration:none}=0D=0A a:hover=

{color: #ff0000;border-bottom: solid 1px #ff0000;font-weight:bold}=0D=0A=

td {border: solid 1px #c0c0c0}=0D=0A .label {text-align=3Dright}=0D=0A=

.value {font-weight:bold}=0D=0A </style>=0D=0A </head>=0D=0A=0D=0A <body=

Compartilhar este post


Link para o post
Compartilhar em outros sites

<html>

<head>

<title>Alpha Clin - Contato</title>

<style type=3Dtext/css>

* {font: normal 9pt Verdana, Arial, Helvetica, sans-serif;col=

or: #000000}

a {text-decoration:none}

a:hover {color: #ff0000;border-bottom: solid 1px #ff0000;font=

-weight:bold}

td {border: solid 1px #c0c0c0}

=2Elabel {text-align=3Dright}

=2Evalue {font-weight:bold}

</style>

</head>

Resolvido (aparentemente usando o FreeSMTP), agora preciso criar um método pra excluir as tags html pra gerar o text/plain

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.