Array
(
)

Enviar e-mail com formatação HTML e Anexo

Rgaffo
   - 21 nov 2005

Boa tarde caros amigos Delphianos,

Estive procurando nos últimos dias como fazer para enviar um e-mail com comandos HTML e arquivos anexado, o que eu encontrei eu testei, mas não funcionou.
Qdo eu envio o e-mail com os comandos HTML ele vai como texto e não com a formatação HTML como deveria, qdo não anexo nada ele fica com a formatação HTML. Pelo que eu pesquisei é algo a ver com o ContentType ou Charset.
Estou usando os componentes Indy no Delphi 5.


Desde já agradeço,

Tenham um bom dia.

Robert
_____________________________________________________________
´Somos do tamaho dos nossos sonhos.´
Fernando Pessoa


Massuda
   - 21 nov 2005

Dê uma olhada no artigo [url=http://www.dragonsoftru.com/?html=indy-email.html]EMAIL MESSAGES FROM DELPHI. USING INDY TO SEND E-MAILS[/url] (de Serge Dosyukov da Dragon Software, em inglês). O artigo explica como gerar diversos tipos de mensagens (texto simples, texto simples com anexos, HTML e HTML com anexos); a parte 3 explica como gerar uma mensagem formatada em HTML com imagens anexas. Mesmo que você não leia inglês, o código exemplo deve te ajudar. Atente para o detalhe que você precisa definir corretamente os links para as imagens em seu código HTML.


Rgaffo
   - 21 nov 2005

Massuda,
Eu já fui nesse site tb, vc até tinha indicado para outra pessoa que postou aki, acontece que a questão não é enviar figuras anexadas e sim outros arquivos, aí que está o problema, eu li quase tudo e não me ajudou muito. Pesquisei bastante antes de postar a duvida aki é que eu não encontrei nada msm para esse problema.

Desde já agradeço.

Sem mais.


Rgaffo
   - 22 nov 2005

Massuda,

Obrigado pela indicação do artigo, olhei melhor e então entendi, mas qdo eu implementei o código deu o seguinte erro:

valid RCPT command must precede DATA.

Sabe o que isso pode ser.

Desde já agradeço e desculpe alguma coisa.

Sem mais,
Robert.


Massuda
   - 22 nov 2005

Não conheço esse erro... qual servidor SMTP você está utilizando?


Rgaffo
   - 22 nov 2005

estou usando o SMTP da empresa que eu trabalho.


Massuda
   - 22 nov 2005

Você poderia postar aqui o código que você está usando para enviar o email?


Rgaffo
   - 22 nov 2005

Descobri,
Esse erro acontece qdo falta informações para o envio de e-mail, por exemplo o destinatário, não descobri qual era a informação que faltava, pesquisei sobre RCPT no google, então resolvi digitar novamente, primeiramente com dados fixos e depois com as váriaveis dai funcionou, mas o problema do anexo ainda não resolvi.

Sem mais,
Obrigado.

Robert


Rgaffo
   - 22 nov 2005

Claro, segue abaixo:


#Código

procedure TfrmENVP01A.EnviarEmail(Para, Assunto, MensagemEMail: String);
var
sAssunto, sMensagem: String;
TextPart: TIdText;
Anexo: TIdAttachment;
begin

... // Validação de variaveis.

// Existe uma procedure que é chamada antes para conectar
// ao servidor POP e SMTP

if not (POP3.Connected) or not (SMTP.Connected) or (SMTP.Username = ´´) then
Exit;

with Mensagem do Begin
with From do Begin
Name := ´Robert´;
Address := SMTP.UserName;
End; //with From do
Subject := Assunto;
Recipients.EMailAddresses := Para;
ReceiptRecipient.Text := SMTP.UserName; // Auto Resposta
Body.Text := MensagemEMail;
End; // with Mensagem do

{TextPart := TIdText.Create(Mensagem.MessageParts);
TextPart.Body.Text := MensagemEMail;
TextPart.ContentType := ´text/hmtl´;}

TIdAttachment.Create(Mensagem.MessageParts, ´arquivo,cfg´);

{Anexo.ContentType := ´text/plain´;
Anexo.Headers.Add(´Content-ID: <ciscfg.cfg>´);}

Try
Screen.Cursor := crHourGlass;
SMTP.Send(Mensagem);
ResultEnvio := ´E-Mail enviado´;
SMTP.Disconnect;
POP3.Disconnect;
Except
On E: Exception do Begin
SMTP.Disconnect;
POP3.Disconnect;
ResultEnvio := ´Erro ao enviar o E-Mail:´ + E.Message + #1310 + ´ Classe:´ + E.ClassName;
Exit
End;
End; // Try
end;



Rgaffo
   - 22 nov 2005

O código acima funciona, mas a parte em que envia o e-mail com o anexo, que é a minha dúvida, não funciona.

Sem mais,

Obrigado.

Robert


Massuda
   - 22 nov 2005

O envio está (de certa forma) funcionando, pois o erro que ocorre é que seu servidor SMTP está dizendo que não entendeu os comandos enviados.

Como você está conectando com o servidor? Seu servidor SMTP requer autenticação?


Rgaffo
   - 22 nov 2005

Agora ele está enviando o e-mail normal, não está mais dando o erro, o problema agora é que o anexo faz com que o corpo vire texto. Ainda estou estuando o artigo que me passou, mas não resolveu, segui o artigo dai deu o problema do RCPT agora funciona, mas o problema do anexo continua.

O código para conexão com o servidor é:

#Código

procedure TfrmENVP01A.ConectaPOPSMTP;
begin
POP3.Disconnect;
SMTP.Disconnect;

SQLChange(qryExec, ´select * from SERVEREMAIL where TipoServ = 1´);
Screen.Cursor := crHourGlass;
if (qryExec.RecordCount > 0) then
Try // Conectar ao servidor POP
with POP3 do Begin
Username := Descriptografar(qryExec.FieldByName(´User´).AsString);
Password := Descriptografar(qryExec.FieldByName(´Pass´).AsString);
Host := LowerCase(qryExec.FieldByName(´Host´).AsString);
Connect;
End; // with POP3 do
Except
On E: Exception do Begin
POP3.Disconnect;
MsgInfo(´Erro ao conectar com o servidor POP: ´ + E.Message + ´ / Classe: ´ + E.ClassName);
Exit
End;
End; // Try do Conectar ao servidor POP

SQLChange(qryExec, ´select * from SERVEREMAIL where TipoServ = 0´);
Screen.Cursor := crHourGlass;
if (qryExec.RecordCount > 0) then
Try // Conectar ao servidor SMTP
with SMTP do Begin
Username := Descriptografar(qryExec.FieldByName(´User´).AsString);
Password := Descriptografar(qryExec.FieldByName(´Pass´).AsString);
Host := LowerCase(qryExec.FieldByName(´Host´).AsString);
Connect;
End; // with SMTP do
Except
On E: Exception do Begin
POP3.Disconnect;
SMTP.Disconnect;
MsgInfo(´Erro ao conectar com o servidor SMTP: ´ + E.Message + ´ / Classe: ´ + E.ClassName);
Exit
End;
End; // Try do Conectar ao servidor SMTP
end;


TipoServ = 0 -> Servidor SMTP
TipoServ = 1 -> Servidor POP


Massuda
   - 23 nov 2005

Nas tabela SERVEREMAIL você tem exatamente um servidor POP e um servidor SMTP cadastrado? Se tiver mais de um, como você sabe que um determinado POP está relacionado com um determinado SMTP?


Rgaffo
   - 23 nov 2005

Sim, tenho um servidor POP e outro SMTP cadatrado.
Essa tabela possui um só registro, nunca tera mais.
Pelo dominio eu sei que o POP está relacionado so SMTP