Enviar e-mail com formatação HTML e Anexo
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
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
Rgaffo
Curtidas 0
Respostas
Massuda
21/11/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.
GOSTEI 0
Rgaffo
21/11/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.
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.
GOSTEI 0
Rgaffo
21/11/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.
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.
GOSTEI 0
Massuda
21/11/2005
Não conheço esse erro... qual servidor SMTP você está utilizando?
GOSTEI 0
Rgaffo
21/11/2005
estou usando o SMTP da empresa que eu trabalho.
GOSTEI 0
Massuda
21/11/2005
Você poderia postar aqui o código que você está usando para enviar o email?
GOSTEI 0
Rgaffo
21/11/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
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
GOSTEI 0
Rgaffo
21/11/2005
Claro, segue abaixo:
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;GOSTEI 0
Rgaffo
21/11/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
Sem mais,
Obrigado.
Robert
GOSTEI 0
Massuda
21/11/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?
Como você está conectando com o servidor? Seu servidor SMTP requer autenticação?
GOSTEI 0
Rgaffo
21/11/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 é:
TipoServ = 0 -> Servidor SMTP
TipoServ = 1 -> Servidor POP
O código para conexão com o servidor é:
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
GOSTEI 0
Massuda
21/11/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?
GOSTEI 0
Rgaffo
21/11/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
Essa tabela possui um só registro, nunca tera mais.
Pelo dominio eu sei que o POP está relacionado so SMTP
GOSTEI 0