Visualizar email com imagem enviado com INDY
Estou enviando um email com imagem no corpo da mensagem pelo Indy. Em clientes de email como outlook eu consigo visualizar a imagem corretamente. Em webmail como o YahooMail tudo ocorre normalmente mas no GMAIL a imagem aparece como anexo. Alguem sabe se tem como conseguir com que a imagem seja exibida no GMAIL?
Rjun
Curtidas 0
Respostas
Massuda
19/10/2006
O GMail tem um bloqueio para exibição de imagens em mensagens HTML, [b:8f78e5299c]independente[/b:8f78e5299c] das imagens estarem embutidas na própria mensagem ou terem de ser baixadas de algum servidor.
Quem controla a exibição é quem recebeu o email.
Quando uma mensagem com imagens é recebida, no topo aparece um aviso...
Quem controla a exibição é quem recebeu o email.
Quando uma mensagem com imagens é recebida, no topo aparece um aviso...
[b:8f78e5299c]Imagens não exibidas[/b:8f78e5299c]
Exibir imagens abaixo - Sempre exibir imagens do fulano@inter.net
...para ver as imagens, o destinatário tem de clicar em ´Exibir...´ ou ´Sempre exibir...´.GOSTEI 0
Rjun
19/10/2006
Massuda
O problema é que não aparece essa mensagem. Aparece somente os anexos, como se a imagem tivesse sido enviada como um anexo comum.
O problema é que não aparece essa mensagem. Aparece somente os anexos, como se a imagem tivesse sido enviada como um anexo comum.
GOSTEI 0
Massuda
19/10/2006
Precisa fazer uma pequena alteração no código HTML da sua mensagem, conforme esse exemplo:...o importante aqui é o [b:1a58e9073c]cid:[/b:1a58e9073c] que está na tag [b:1a58e9073c]img[/b:1a58e9073c].
... Html := TIdText.Create(Email.MessageParts); Html.Body.Text := ´<html><body>´ + ´<img src="cid:imagem.jpg" >´ + ´</body></html>´; Html.ContentType := ´text/html´; Imagem := TIdAttachment.Create(Email.MessageParts, ´c:\pasta\imagem.jpg´); Imagem.ContentType := ´image/jpg´; Imagem.Headers.Add(´Content-ID: <imagem.jpg>´); ...
GOSTEI 0
Rjun
19/10/2006
Massuda, coloco abaixo o código que estou usando.
Aparentemente está igual a sua sugestão. Mesmo assim não consigo comque o email seja exibido corretamente no gmail e no hotmail.
procedure AttachImage; var newText: TIdText; newAttach: TIdAttachment; begin if (EmailContent.BodyIsHtml) then Exit; EmailContent.BodyText := StringReplace(EmailContent.BodyText, ´#1310´, ´<br>´, [rfReplaceAll]); // Converte o texto em um HTML newText := TIdText.Create(IndyMessage.MessageParts); newText.ContentType := ´text/html´; newText.Body.Add(´<html><body>´); newText.Body.Add(EmailContent.BodyText); newText.Body.Add(´<br><br>´); newText.Body.Add(´<img src="cid:´ + ExtractFileName(EmailContent.AttachmentImage) + ´">´); newText.Body.Add(´</body></html>´); newText := TIdText.Create(IndyMessage.MessageParts); newText.ContentType := ´text/html´; // Anexa a imagem ao corpo do email newAttach := TIdAttachment.Create(IndyMessage.MessageParts, EmailContent.AttachmentImage); newAttach.ContentType := ´image/jpg´; newAttach.ExtraHeaders.Values[´Content-ID´] := ´<´ + ExtractFileName(EmailContent.AttachmentImage) + ´>´; end;
Aparentemente está igual a sua sugestão. Mesmo assim não consigo comque o email seja exibido corretamente no gmail e no hotmail.
GOSTEI 0
Massuda
19/10/2006
Pode parecer estranho, mas inclua no seu código...
... EmailContent.BodyText := .... newText := TIdText.Create(IndyMessage.MessageParts); newText.Body.Text := ´´; newText.ContentType := ´text/plain´; // Converte o texto em um HTML ...
GOSTEI 0
Rjun
19/10/2006
Massuda, ainda não deu certo. Tem mais alguma sugestão?
GOSTEI 0
Massuda
19/10/2006
Não sei... estou usando a versão 9.0.0.18 com D5. Este código funciona sem problemas....
No GMail, a mensagem exibe o aviso que existem imagens não exibidas, como citei anteriormente.
var Email: TIdMessage; Texto: TIdText; Html: TIdText; Anexo: TIdAttachment; begin Email := TIdMessage.Create(nil); try ...ajusta remetente, destinatário, etc... Email.ContentType := ´multipart/mixed´; Texto := TIdText.Create(Email.MessageParts); Texto.Body.Text := ´This message contains HTML and images.´; Texto.ContentType := ´text/plain´; Html := TIdText.Create(Email.MessageParts); Html.Body.Text := ´<html><body>´ + ´Mensagem de <b>Teste</b><br>´ + ´<img src="cid:imagem.jpg" >´ + ´</body></html>´; Html.ContentType := ´text/html´; Anexo := TIdAttachment.Create(Email.MessageParts, ´c:\pasta\imagem.jpg´); Anexo.ContentType := ´image/jpg´; Anexo.Headers.Add(´Content-ID: <imagem.jpg>´); ... envia o email... finally Email.Free; end; end;
No GMail, a mensagem exibe o aviso que existem imagens não exibidas, como citei anteriormente.
GOSTEI 0
Rjun
19/10/2006
Massuda, minha versão do Indy é a 9.0.0.10 com D7. Baixei um instalador da versão 9.0.0.19. Executei o instalador mas quando coloque um componente e vejo o form com a versãoa ainda aparece 9.0.0.10. Será que não foi atualizado?
GOSTEI 0
Massuda
19/10/2006
Nunca usei o instalador, sempre instalei manualmente.
Na pasta com os .pas do Indy, a versão está no arquivo IdVers.inc.
Verifiquei meu Indy e vi que estou usando a versão 9.0.0.50(!), que é uma versão ´snapshot´ do CVS deles. Se você tiver interesse, pode baixar [url=http://indy.fulgan.com/ZIP/]desta página[/url].
Na pasta com os .pas do Indy, a versão está no arquivo IdVers.inc.
Verifiquei meu Indy e vi que estou usando a versão 9.0.0.50(!), que é uma versão ´snapshot´ do CVS deles. Se você tiver interesse, pode baixar [url=http://indy.fulgan.com/ZIP/]desta página[/url].
GOSTEI 0
Massuda
19/10/2006
Outra coisa... certifique-se de ter removido as DCUs originais (que vieram com o Delphi) do Indy que eventualmente estejam nas pastas padrão do Delphi (($Delphi)\lib, ($Delphi)\source, etc)
GOSTEI 0
Rjun
19/10/2006
Massuda
Um dia inteiro, mas consegui. Obrigado pela força. Realmente tive que atualizar a versão para 9.0.0.18. E essa parte do código foi extremamente necessária.
Um dia inteiro, mas consegui. Obrigado pela força. Realmente tive que atualizar a versão para 9.0.0.18. E essa parte do código foi extremamente necessária.
Texto := TIdText.Create(Email.MessageParts); Texto.Body.Text := ´This message contains HTML and images.´; Texto.ContentType := ´text/plain´
GOSTEI 0