Converter de RTF para HTML e enviar por email.
Olá pessoal,
tenho que converter um arquivo RTF para HTML. Para realizar esse procedimento estou fazendo confome mostrado abaix:
Como posso mandar o arquivo por email?
Tentei assim:
Mas abre a janela do outlook express. Gostaria de mandar automaticamente, sem interferência do usuário, e pelo programa de email padrão.
Como fazer isso?
Aqui vai um link interessante sobre [b:986b6a6d16]Automating Excel and Word[/b:986b6a6d16]
[url]
http://homepages.borland.com/ccalvert/TechPapers/Delphi/DelphiWord.htm[/url]
[/b]
tenho que converter um arquivo RTF para HTML. Para realizar esse procedimento estou fazendo confome mostrado abaix:
Wordapp := CreateOleObject(´Word.Application´); Wordapp.Visible := false; Doc := Wordapp.documents.open(´C:\Teste.RTF´); Doc.saveas(´C:\Agenda\Teste.html´, wdFormatHTML, AddToRecentFiles := False);
Como posso mandar o arquivo por email?
Tentei assim:
WordApp.Options.SendMailAttach := False; WordApp.Documents.Item(1).SendMail;
Mas abre a janela do outlook express. Gostaria de mandar automaticamente, sem interferência do usuário, e pelo programa de email padrão.
Como fazer isso?
Aqui vai um link interessante sobre [b:986b6a6d16]Automating Excel and Word[/b:986b6a6d16]
[url]
http://homepages.borland.com/ccalvert/TechPapers/Delphi/DelphiWord.htm[/url]
[/b]

Carlosib
Curtidas 0
Respostas

Massuda
28/09/2005
Através do Word o envio de email é feito via MAPI, que usa o programa padrão de correio eletrônico para fazer o envio (no seu caso, é o Outlook Express).
Se quiser fazer você mesmo o envio, você pode tentar usar o Indy. Dê uma olhada [url=http://forum.clubedelphi.net/viewtopic.php?t=65357]neste tópico[/url] para ver um exemplo (bem) básico de como enviar email usando Indy. Sobre como enviar email com texto HTML, 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 no Indy (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.
Se quiser fazer você mesmo o envio, você pode tentar usar o Indy. Dê uma olhada [url=http://forum.clubedelphi.net/viewtopic.php?t=65357]neste tópico[/url] para ver um exemplo (bem) básico de como enviar email usando Indy. Sobre como enviar email com texto HTML, 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 no Indy (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.
GOSTEI 0

Carlosib
28/09/2005
Como faço para mandar um RTF em anexo e aberto no corpo da mensagem?
Desculpe, Mussuda, mas estou enrolado e não estou saindo do lugar.... estou tentando com Indy.
Desejo que o RTF fique aberto no corpo do email.....
Uso Indy 10.0.75 e Delphi 7.
Desculpe, Mussuda, mas estou enrolado e não estou saindo do lugar.... estou tentando com Indy.
with IdMsgSend do begin ContentType := ´text/html; charset=iso-8859-1´; newAttach:= TIdAttachmentFile.Create(MessageParts, ´C:\Mala.RTF´); Headers.Values[´X-Library´] := ´´; ContentType := ´text/html; charset=iso-8859-1´; From.Name := ´Nome´; From.Address := ´email_de_Origem´; ReplyTo.EMailAddresses := ´email_de_destino´; Recipients.EMailAddresses := ´email_de_destino´; { To: header } Subject := ´Arquivo RTF´; Priority := mpHigh; //Prioridade end;
Desejo que o RTF fique aberto no corpo do email.....
Uso Indy 10.0.75 e Delphi 7.
GOSTEI 0

Massuda
28/09/2005
Como faço para mandar um RTF em anexo e aberto no corpo da mensagem?
Não tem como mandar o arquivo em formato RTF, você precisa gerar uma versão do arquivo em formato HTML; sobre como formatar a mensagem, dê uma olhada no artigo que citei (mesmo que você não leia inglês, o artigo tem os exemplos de como mandar o HTML).GOSTEI 0

Carlosib
28/09/2005
Me desculpe se estou falando bobagem :oops: ....
Mas o que desejo é algo similar ao:
Quando estou escrevendo o texto no word...vou no menu Arquivo --> Enviar Para -->> Destinatário da Mensagem. Enviando desta forma o arquivo é visualizado no corpo da mensagem.... não aparece como sendo um anexo.
Me desculpe se falei bobagem :oops: ..... mas é isso que eu desejo.... :cry:
Mas o que desejo é algo similar ao:
Quando estou escrevendo o texto no word...vou no menu Arquivo --> Enviar Para -->> Destinatário da Mensagem. Enviando desta forma o arquivo é visualizado no corpo da mensagem.... não aparece como sendo um anexo.
Me desculpe se falei bobagem :oops: ..... mas é isso que eu desejo.... :cry:
GOSTEI 0

Massuda
28/09/2005
Isso é um negócio realmente confuso... mas para poder enviar um email formatado em HTML sua mensagem precisa ser multiparte, o que na prática significa que ela precisa ter um anexo cujo conteúdo é o texto formatado em HTML (declarado como sendo text/html). Dê uma olhada no item 3.3 do artigo que mencionei.
GOSTEI 0

Carlosib
28/09/2005
Infelizmente não estou conseguindo.....
Estou tentando assim:
Se eu mandar pelo outlook express vai normal.... via webmal...vai normal.... só com meu código que não funciona.
:oops: :cry:
Estou tentando assim:
with IdMsgSend do begin ContentType := ´text/html; charset=iso-8859-1´; lTextPart := TIdText.Create(MessageParts); lTextPart.Body.Text := ´This is a plain text message´; lTextPart.ContentType := ´text/plain; charset=iso-8859-1´; lTextPart := TIdText.Create(MessageParts); lTextPart.Body.Text := ´<html><body><b>This is a HTML message</b></body></html>´; lTextPart.ContentType := ´text/html; charset=iso-8859-1´; newAttach:= TIdAttachmentFile.Create(MessageParts, ´C:\Mala.RTF´); Headers.Values[´X-Library´] := ´´; ContentType := ´text/html; charset=iso-8859-1´; From.Name := ´Mala´; From.Address := ´carlos@uol.com.br´; ReplyTo.EMailAddresses := ´destino@uol.com.br´; Recipients.EMailAddresses := ´destino@uol.com.br´; { To: header } Subject := ´Mala em RTF´; Priority := mpHigh; //Prioridade end; ......
Se eu mandar pelo outlook express vai normal.... via webmal...vai normal.... só com meu código que não funciona.
:oops: :cry:
GOSTEI 0

Massuda
28/09/2005
Se eu mandar pelo outlook express vai normal.... via webmal...vai normal.... só com meu código que não funciona.
Você está recebendo esse email aonde? O Outlook Express trata de modo especial o arquivo RTF, mas outros programas (que eu saiba) não fazem isso.De qualquer forma, acho que isso faz o que você quer...
with IdMsgSend do begin TIdAttachmentFile.Create(MessageParts, ´C:\Mala.RTF´); Headers.Values[´X-Library´] := ´´; From.Name := ´Mala´; From.Address := ´carlos@uol.com.br´; ReplyTo.EMailAddresses := ´destino@uol.com.br´; Recipients.EMailAddresses := ´destino@uol.com.br´; { To: header } Subject := ´Mala em RTF´; Priority := mpHigh; //Prioridade end;
GOSTEI 0

Carlosib
28/09/2005
Recebo e visualizo o conteúdo do email no outlook express e no webmail do click21.
O arquivo RTF abre como sendo o corpo da mensagem.
Mussuda, se quiseres mando um email para vc para veres o que desejo...Derepente posso esta falando besteira.....
Usando o código como vc relatou o RTF não abre...nem no outlook nem no webmail do click21.
O arquivo RTF abre como sendo o corpo da mensagem.
Mussuda, se quiseres mando um email para vc para veres o que desejo...Derepente posso esta falando besteira.....
Usando o código como vc relatou o RTF não abre...nem no outlook nem no webmail do click21.
GOSTEI 0

Carlosib
28/09/2005
Abaixo segue o código da mensagem quando o RTF abre:
Esse código estou pegando no webmail do click21....
Como fazer?
From carlosib@brturbo.com.br Wed Sep 28 20:27:08 2005 Return-Path: <carlosib@brturbo.com.br> Delivered-To: carlosib@click21.com.br Received: by mail3.click21.com.br (Postfix, from userid 501) id 4F9AFF736D; Wed, 28 Sep 2005 20:27:08 -0300 (EST) Received: from smtp1.brturbo.com.br (smtp1.brturbo.com.br [200.199.201.163]) by mail3.click21.com.br (Postfix) with ESMTP id D7FD4F7187 for <carlosib@click21.com.br>; Wed, 28 Sep 2005 20:27:07 -0300 (EST) Received: from arthur (unknown [200.193.111.31]) by smtp1.brturbo.com.br (Postfix) with SMTP id 995EC3428; Wed, 28 Sep 2005 20:26:55 -0300 (BRT) Message-ID: <000501c5c482$62836ce0$f2c5fea9@arthur> From: "Carlos BR Trubo" <carlosib@brturbo.com.br> To: "Carlos BR Trubo" <carlosib@brturbo.com.br>, <carlosib@click21.com.br> Subject: Pelo word Date: Wed, 28 Sep 2005 20:14:31 -0300 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_0000_01C5C469.3C967270" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.2527 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2527 X-CRM114-Version: 20040716-BM-OSB [tre] MF-BD1ECE33 X-CRM114-Status: Good ( pR: 8.9777/-5.0 ) This is a multi-part message in MIME format. ------=_NextPart_000_0000_01C5C469.3C967270 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit
Esse código estou pegando no webmail do click21....
Como fazer?
GOSTEI 0

Massuda
28/09/2005
O email que você postou foi enviado pelo Word... nesse caso, o Word fez a conversão de RTF para HTML e montou a mensagem exatamente da forma como descreve o artigo que citei. Se você observar todo o código da mensagem, verá que uma das duas partes da mensagem é assim descrita...
Content-Type: text/html; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
...isso significa que é uma parte (TIdText) em formato HTML.GOSTEI 0

Carlosib
28/09/2005
Pessoa o que estou fazendo de errado agora:
A imagem não aparece no local correto....
with IdMsgSend do begin lTextPart := TIdText.Create(MessageParts); lTextPart.Body.Clear; lTextPart.ContentType := ´text/plain´; lTextPart := TIdText.Create(MessageParts); lTextPart.Body.Clear; lTextPart.Body.LoadFromFile(´C:\Agenda\MalaDireta\Mala.HTML´); lTextPart.ContentType := ´text/html´; Headers.Values[´X-Library´] := ´´; if DirectoryExists(´C:\Agenda\MalaDireta\Mala_Arquivos\´) then begin try for i:=0 to Arquivos.Count - 1 do begin if AnsiUpperCase(ExtractFileExt(Arquivos.Items.strings[i])) <> ´.PNG´ then continue; lImagePart := TIdAttachmentFile.Create(MessageParts, Arquivos.Items.strings[i]); lImagePart.ContentType := ´image/jpg´; lImagePart.Headers.Clear; lImagePart.Headers.Add(´Content-ID: <./Mala_arquivos/´+Arquivos.Items.strings[i]+´>´); end; except on E : Exception do begin showMessage(E.Message); end; end; end; From.Name := ´Mala´; From.Address := ´origem@uol.com.br´; ReplyTo.EMailAddresses := Para; Recipients.EMailAddresses := Para; { To: header } Subject := ´:: Teste HTML ::´; Priority := mpHigh; //Prioridade end;
A imagem não aparece no local correto....
GOSTEI 0

Massuda
28/09/2005
A imagem não aparece no local correto....
Não entendi o que você quis dizer.GOSTEI 0

Carlosib
28/09/2005
quando recebo o email.....o arquivo HTML aparece aberto no corpo do email porém a imagem aparece no final do arquivo. Isso no outlook express.
No webmail do click21 o arquivo HTML aparece aberto e a imagem fica como anexo.[/code]
lTextPart.Body.LoadFromFile(´C:\Agenda\MalaDireta\Mala.HTML´);
No webmail do click21 o arquivo HTML aparece aberto e a imagem fica como anexo.[/code]
GOSTEI 0

Massuda
28/09/2005
Este é o exemplo que está no artigo que citei num post anterior......note que o src da tag HTML que insere a imagem no texto tem o mesmo valor do segundo parâmetro do TIdAttachment.Create que anexa a imagem ao email; você tem que tem um valor diferente para cada imagem. Do jeito que você fez, acho que você deve estar dizendo para procurar a imagem num diretório na própria maquina de quem le o email.
var lMessage: TIdMessage; lTextPart: TIdText; lImagePart: TIdAttachment; begin // ... some code here to initialize your SMTP server. // It could be done somewhere as well lMessage := TIdMessage.Create(Self); lMessage.From.Address := ´myemail@mydomain.com´; lMessage.Subject := ´My test email´; lMessage.Recipients.Add.Address := ´someoneemail@somedomain.com´; lMessage.Body.Clear; lTextPart := TIdText.Create(lMessage.MessageParts); lTextPart.Body.Text := ´This is a plain text message´; lTextPart.ContentType := ´text/plain´; lTextPart := TIdText.Create(lMessage.MessageParts); lTextPart.Body.Text := ´<html><body>´ + ´<b>This is a HTML message with picture</b>´ + // isto insere a imagem anexa no texto ´<img src="htmlbodyIMG0000.JPG" >´ + ´</body></html>´; lTextPart.ContentType := ´text/html´; // isto insere a imagem anexa no texto lImagePart := TIdAttachment.Create(lMessage.MessageParts, ´htmlbodyIMG0000.JPG´); lImagePart.ContentType := ´image/jpg´; lImagePart.Headers.Add(´Content-ID: <htmlbodyIMG0000.JPG>´); // ... A code to send a message end;
GOSTEI 0

Carlosib
28/09/2005
o link asegui mostra o arquivo HTML aberto localmente:
[url]http://www.digilab.com.br/Carlos/01.jpg[/url]
O próximo link mostra o arquivo aberto após ser enviado por email no outlook:
[url]http://www.digilab.com.br/Carlos/02.jpg[/url]
O terceiro link mostra o email aberto no webmail do click21
[url]http://www.digilab.com.br/Carlos/03.jpg[/url]
[url]http://www.digilab.com.br/Carlos/01.jpg[/url]
O próximo link mostra o arquivo aberto após ser enviado por email no outlook:
[url]http://www.digilab.com.br/Carlos/02.jpg[/url]
O terceiro link mostra o email aberto no webmail do click21
[url]http://www.digilab.com.br/Carlos/03.jpg[/url]
GOSTEI 0

Carlosib
28/09/2005
Mussuda,
ao converter de RTF para HTML o word criou uma pasta MALA_Arquivos e lá colocou as imagens.
No código do HTML a referência as imagens referenciavam-se a esta pasta criada.
Usei o código abaixo para fazer a imagem apontar para a mesma pasta onde esta o arquivo HTML:
Na hora de anexar os arquivos usei:
Porém a imagem continua não aparecendo....
O que continuo a fazer de errado?
Segue abaixo o código completo:
ao converter de RTF para HTML o word criou uma pasta MALA_Arquivos e lá colocou as imagens.
No código do HTML a referência as imagens referenciavam-se a esta pasta criada.
Usei o código abaixo para fazer a imagem apontar para a mesma pasta onde esta o arquivo HTML:
lTextPart.Body.LoadFromFile(´C:\Agenda\MalaDireta\Mala.HTML´); lTextPart.Body.Text := AnsiReplaceStr(lTextPart.Body.Text, ´./Mala_arquivos/´, ´´);
Na hora de anexar os arquivos usei:
for i:=0 to Arquivos.Count - 1 do begin lImagePart := TIdAttachmentFile.Create(MessageParts, Arquivos.Items.strings[i]); lImagePart.ContentType := ´image/jpg´; lImagePart.Headers.Clear; lImagePart.Headers.Add(´Content-ID: <´+Arquivos.Items.strings[i]+´>´); end;
Porém a imagem continua não aparecendo....
O que continuo a fazer de errado?
Segue abaixo o código completo:
with IdMsgSend do begin lTextPart := TIdText.Create(MessageParts); lTextPart.Body.Clear; lTextPart.ContentType := ´text/plain´; lTextPart := TIdText.Create(MessageParts); lTextPart.Body.Clear; lTextPart.Body.LoadFromFile(´C:\Agenda\MalaDireta\Mala.HTML´); lTextPart.Body.Text := AnsiReplaceStr(lTextPart.Body.Text, ´./Mala_arquivos/´, ´´); lTextPart.ContentType := ´text/html´; Headers.Values[´X-Library´] := ´´; if DirectoryExists(´C:\Agenda\MalaDireta\Mala_Arquivos\´) then begin try for i:=0 to Arquivos.Count - 1 do begin lImagePart := TIdAttachmentFile.Create(MessageParts, Arquivos.Items.strings[i]); lImagePart.ContentType := ´image/jpg´; lImagePart.Headers.Clear; lImagePart.Headers.Add(´Content-ID: <´+Arquivos.Items.strings[i]+´>´); end; except on E : Exception do begin showMessage(E.Message); end; end; end; From.Name := ´Mala´; From.Address := ´carlosib@brturbo.com.br´; ReplyTo.EMailAddresses := Para; Recipients.EMailAddresses := Para; { To: header } Subject := ´:: Teste HTML com Imagem ::´; Priority := mpHigh; //Prioridade end;
GOSTEI 0

Massuda
28/09/2005
Tenho a impressão que o problema está aqui...
PS: Meu nome é M[b:5066a9e624]a[/b:5066a9e624]ssuda.
for i:=0 to Arquivos.Count - 1 do
begin
lImagePart := TIdAttachmentFile.Create(MessageParts, Arquivos.Items.strings[i]);
lImagePart.ContentType := ´image/jpg´;
lImagePart.Headers.Clear;
[color=red:5066a9e624]lImagePart.Headers.Add(´Content-ID: <´+Arquivos.Items.strings[i]+´>´);[/color:5066a9e624]
end;
...mude a linha em vermelho para...lImagePart.Headers.Add(´Content-ID: <´+ExtractFileName(Arquivos.Items[i])+´>´);
PS: Meu nome é M[b:5066a9e624]a[/b:5066a9e624]ssuda.
GOSTEI 0

Carlosib
28/09/2005
Massuda me desculpe por trocar seu nome...... :wink:
Cara, fiz as alterações sugeridas...e continua com o mesmo problema. Tens mais alguma sugestão?
Cara, fiz as alterações sugeridas...e continua com o mesmo problema. Tens mais alguma sugestão?
for i:=0 to Arquivos.Count - 1 do begin lImagePart := TIdAttachmentFile.Create(MessageParts, Arquivos.Items.strings[i]); lImagePart.ContentType := ´image/jpg´; lImagePart.Headers.Clear; lImagePart.Headers.Add(´Content-ID: <´+ExtractFileName(Arquivos.Items[i])+´>´); end;
GOSTEI 0

Massuda
28/09/2005
No momento estou sem idéias... a princípio, bastaria garantir que, no trecho de código que você postou......o Content-ID tem que ser igual ao valor do src na tag img do código HTML que o Word gerou para você e que você manipulou fazendo....
lImagePart.Headers.Add(´Content-ID: <´+ExtractFileName(Arquivos.Items[i])+´>´);
lTextPart.Body.Text := AnsiReplaceStr(lTextPart.Body.Text, ´./Mala_arquivos/´, ´´);
GOSTEI 0