Imagem não aparece no email como deveria!!!
Olá!
Tenho o seguinte código:
// Adiciona o TEXTO ao corpo da mensagem
newText := TIdText.Create(IdMessage.MessageParts,nil);
newText.ContentType := ´text/html´;
newText.Body.Add(´<HTML>´);
newText.Body.Add(´ <BODY>´);
newText.Body.Add(´ <P>´);
newText.Body.Add(´ <TABLE>´);
newText.Body.Add(´ <TR>´);
newText.Body.Add(´ <TD>´);
newText.Body.Add(´ <IMG>´);
newText.Body.Add(´ </TD>´);
newText.Body.Add(´ </TR>´);
for i := 0 to RichEdit1.Lines.Count-1 do
begin
newText.Body.Add(RichEdit1.Lines.Strings[i]+´<br>´);
end;
newText.Body.Add(´ </TABLE>´);
newText.Body.Add(´ </P>´);
newText.Body.Add(´ </BODY>´);
newText.Body.Add(´</HTML>´);
Envio um e-mail para o Hotmail e uma cópia para o Outlook. No outlook, a imagem aparece dentro da tabela, mas no Hotmail, aparece um quadrinho pequeno (que é pra ser a tabela) e a imagem, bem embaixo.
Alguém saberia me dizer o que que há de errado nisso?
Grato.
Tenho o seguinte código:
// Adiciona o TEXTO ao corpo da mensagem
newText := TIdText.Create(IdMessage.MessageParts,nil);
newText.ContentType := ´text/html´;
newText.Body.Add(´<HTML>´);
newText.Body.Add(´ <BODY>´);
newText.Body.Add(´ <P>´);
newText.Body.Add(´ <TABLE>´);
newText.Body.Add(´ <TR>´);
newText.Body.Add(´ <TD>´);
newText.Body.Add(´ <IMG>´);
newText.Body.Add(´ </TD>´);
newText.Body.Add(´ </TR>´);
for i := 0 to RichEdit1.Lines.Count-1 do
begin
newText.Body.Add(RichEdit1.Lines.Strings[i]+´<br>´);
end;
newText.Body.Add(´ </TABLE>´);
newText.Body.Add(´ </P>´);
newText.Body.Add(´ </BODY>´);
newText.Body.Add(´</HTML>´);
Envio um e-mail para o Hotmail e uma cópia para o Outlook. No outlook, a imagem aparece dentro da tabela, mas no Hotmail, aparece um quadrinho pequeno (que é pra ser a tabela) e a imagem, bem embaixo.
Alguém saberia me dizer o que que há de errado nisso?
Grato.
Lucas_spohr
Curtidas 0
Respostas
Massuda
24/09/2007
O código HTML está errado. A tag img deveria ter, no mínimo, indicação da origem da imagem, algo assim......se por só img, ira aparecer um quadradinho em branco sem imagem, o que está certo.
<img src="http://example.com/sua.imagem.jpg" blablabla...
GOSTEI 0
Lucas_spohr
24/09/2007
opa, perdão! não sei porque, mas não apareceu todo o IMG SRC... o código está assim:
// Adiciona o TEXTO ao corpo da mensagem
newText := TIdText.Create(IdMessage.MessageParts);//,nil);
newText.ContentType := ´text/html´;
newText.Body.Add(´<HTML>´);
newText.Body.Add(´<HEAD>´);
newText.Body.Add(´<TITLE></TITLE>´);
newText.Body.Add(´</HEAD>´);
newText.Body.Add(´<BODY>´);
newText.Body.Add(´<table cellspacing=´0´ cellpadding=´0´ border=´1´>´);
newText.Body.Add(´<TR>´);
newText.Body.Add(´<TD>´);
if OpenPictureDialog1.FileName <> ´´ then
newText.Body.Add(´<IMG SRC=´´+ OpenPictureDialog1.FileName +´´><TR><TD>´);
for i := 0 to RichEdit1.Lines.Count-1 do
begin
newText.Body.Add(RichEdit1.Lines.Strings[i]+´<br>´);
end;
newText.Body.Add(´</TD>´);
newText.Body.Add(´</TR>´);
newText.Body.Add(´</TABLE>´);
newText.Body.Add(´</P>´);
newText.Body.Add(´</BODY>´);
newText.Body.Add(´</HTML>´);
fiz vários testes no código, adiconando algumas tags HTML, mas ñ adiantou...
// Adiciona o TEXTO ao corpo da mensagem
newText := TIdText.Create(IdMessage.MessageParts);//,nil);
newText.ContentType := ´text/html´;
newText.Body.Add(´<HTML>´);
newText.Body.Add(´<HEAD>´);
newText.Body.Add(´<TITLE></TITLE>´);
newText.Body.Add(´</HEAD>´);
newText.Body.Add(´<BODY>´);
newText.Body.Add(´<table cellspacing=´0´ cellpadding=´0´ border=´1´>´);
newText.Body.Add(´<TR>´);
newText.Body.Add(´<TD>´);
if OpenPictureDialog1.FileName <> ´´ then
newText.Body.Add(´<IMG SRC=´´+ OpenPictureDialog1.FileName +´´><TR><TD>´);
for i := 0 to RichEdit1.Lines.Count-1 do
begin
newText.Body.Add(RichEdit1.Lines.Strings[i]+´<br>´);
end;
newText.Body.Add(´</TD>´);
newText.Body.Add(´</TR>´);
newText.Body.Add(´</TABLE>´);
newText.Body.Add(´</P>´);
newText.Body.Add(´</BODY>´);
newText.Body.Add(´</HTML>´);
fiz vários testes no código, adiconando algumas tags HTML, mas ñ adiantou...
GOSTEI 0
Massuda
24/09/2007
:arrow: [url=http://forum.devmedia.com.br/viewtopic.php?t=81650]Este tópico[/url], que já indiquei a você no seu primeiro tópico sobre esse assunto, mostra que deve usar no img ´src=cid:arquivo.xyz´, talvez funcione no seu caso.
GOSTEI 0
Lucas_spohr
24/09/2007
Massuda!
Coloquei o cid no src img, mas continua não dando certo!
inclusive, adicionando o cid, no Outlook, a imagem não aparece...
Obrigado!
Coloquei o cid no src img, mas continua não dando certo!
inclusive, adicionando o cid, no Outlook, a imagem não aparece...
Obrigado!
GOSTEI 0
Massuda
24/09/2007
Mostre seu código.
GOSTEI 0
Lucas_spohr
24/09/2007
AFFFF... esse
// Adiciona o TEXTO ao corpo da mensagem
newText := TIdText.Create(IdMessage.MessageParts,nil);//,nil);
newText.ContentType := ´text/html´;
newText.Body.Add(´<HTML>´);
newText.Body.Add(´<HEAD>´);
newText.Body.Add(´<TITLE></TITLE>´);
newText.Body.Add(´</HEAD>´);
newText.Body.Add(´<BODY>´);
newText.Body.Add(´<table cellspacing=´0´ cellpadding=´0´ border=´1´>´);
newText.Body.Add(´<TR>´);
newText.Body.Add(´<TD>´);
if OpenPictureDialog1.FileName <> ´´ then
newText.Body.Add(´<IMG SRC=´´+ OpenPictureDialog1.FileName +´´><TR><TD>´);
for i := 0 to RichEdit1.Lines.Count-1 do
begin
newText.Body.Add(RichEdit1.Lines.Strings[i]+´<br>´);
end;
newText.Body.Add(´</TD>´);
newText.Body.Add(´</TR>´);
newText.Body.Add(´</TABLE>´);
newText.Body.Add(´</P>´);
newText.Body.Add(´</BODY>´);
newText.Body.Add(´</HTML>´);
// Adiciona o TEXTO ao corpo da mensagem
newText := TIdText.Create(IdMessage.MessageParts,nil);//,nil);
newText.ContentType := ´text/html´;
newText.Body.Add(´<HTML>´);
newText.Body.Add(´<HEAD>´);
newText.Body.Add(´<TITLE></TITLE>´);
newText.Body.Add(´</HEAD>´);
newText.Body.Add(´<BODY>´);
newText.Body.Add(´<table cellspacing=´0´ cellpadding=´0´ border=´1´>´);
newText.Body.Add(´<TR>´);
newText.Body.Add(´<TD>´);
if OpenPictureDialog1.FileName <> ´´ then
newText.Body.Add(´<IMG SRC=´´+ OpenPictureDialog1.FileName +´´><TR><TD>´);
for i := 0 to RichEdit1.Lines.Count-1 do
begin
newText.Body.Add(RichEdit1.Lines.Strings[i]+´<br>´);
end;
newText.Body.Add(´</TD>´);
newText.Body.Add(´</TR>´);
newText.Body.Add(´</TABLE>´);
newText.Body.Add(´</P>´);
newText.Body.Add(´</BODY>´);
newText.Body.Add(´</HTML>´);
GOSTEI 0
Massuda
24/09/2007
Onde você cria o anexo com a imagem?
Parte do problema é que TOpenPictureDialog.FileName retorna um nome de arquivo que inclui o path completo do arquivo. A princípio, bastaria usar um ExtractFileName, mas para funcionar precisa criar o anexo de modo adequado.
O Outlook consegue mostrar a imagem porque provavelmente ela está na mesma máquina. Já o Hotmail (e qualquer um que receba seu email) não vai ver a imagem porque ela não está na máquina).
Parte do problema é que TOpenPictureDialog.FileName retorna um nome de arquivo que inclui o path completo do arquivo. A princípio, bastaria usar um ExtractFileName, mas para funcionar precisa criar o anexo de modo adequado.
O Outlook consegue mostrar a imagem porque provavelmente ela está na mesma máquina. Já o Hotmail (e qualquer um que receba seu email) não vai ver a imagem porque ela não está na máquina).
GOSTEI 0
Lucas_spohr
24/09/2007
bom, está assim:
btn...
var
newText : TIdText;
newAttach : TIdAttachment;
i: integer;
imgID1, imgName1 : String;
begin
// Endereço e ID das Imagens
imgName1 := ExtractFileName(OpenPictureDialog1.FileName);
imgID1 := CreateUniqueID;
// Adiciona o TEXTO ao corpo da mensagem
newText := TIdText.Create(IdMessage.MessageParts,nil);//,nil);
newText.ContentType := ´text/html´;
newText.Body.Add(´<HTML>´);
newText.Body.Add(´<HEAD>´);
newText.Body.Add(´<TITLE></TITLE>´);
newText.Body.Add(´</HEAD>´);
newText.Body.Add(´<BODY>´);
newText.Body.Add(´<TABLE CELLSPACING=´0´ CELLPADDING=´0´ BORDER=´1´>´);
newText.Body.Add(´<TR>´);
newText.Body.Add(´<TD>´);
if OpenPictureDialog1.FileName <> ´´ then
newText.Body.Add(´<IMG SRC=´´+ ExtractFileName(OpenPictureDialog1.FileName) +´´><TR><TD>´);
for i := 0 to RichEdit1.Lines.Count-1 do
begin
newText.Body.Add(RichEdit1.Lines.Strings[i]+´<BR>´);
end;
newText.Body.Add(´</TD>´);
newText.Body.Add(´</TR>´);
newText.Body.Add(´</TABLE>´);
newText.Body.Add(´</P>´);
newText.Body.Add(´</BODY>´);
newText.Body.Add(´</HTML>´);
//Anexa a imagem ao corpo do E-mail
if OpenPictureDialog1.FileName <> ´´ then
begin
newAttach := TIdAttachment.Create(IdMessage.MessageParts,imgName1);
newAttach.ContentType := ´image/jpeg´;
newAttach.ContentDisposition := ´inline´;
newAttach.ExtraHeaders.Values[´Content-ID´] := ´<´+imgId1+´>´;
end;
eu mudei lá em cima, colocando ExtractFileName, no IMG SRC... mas ainda não funcionou!
Obrigado!
btn...
var
newText : TIdText;
newAttach : TIdAttachment;
i: integer;
imgID1, imgName1 : String;
begin
// Endereço e ID das Imagens
imgName1 := ExtractFileName(OpenPictureDialog1.FileName);
imgID1 := CreateUniqueID;
// Adiciona o TEXTO ao corpo da mensagem
newText := TIdText.Create(IdMessage.MessageParts,nil);//,nil);
newText.ContentType := ´text/html´;
newText.Body.Add(´<HTML>´);
newText.Body.Add(´<HEAD>´);
newText.Body.Add(´<TITLE></TITLE>´);
newText.Body.Add(´</HEAD>´);
newText.Body.Add(´<BODY>´);
newText.Body.Add(´<TABLE CELLSPACING=´0´ CELLPADDING=´0´ BORDER=´1´>´);
newText.Body.Add(´<TR>´);
newText.Body.Add(´<TD>´);
if OpenPictureDialog1.FileName <> ´´ then
newText.Body.Add(´<IMG SRC=´´+ ExtractFileName(OpenPictureDialog1.FileName) +´´><TR><TD>´);
for i := 0 to RichEdit1.Lines.Count-1 do
begin
newText.Body.Add(RichEdit1.Lines.Strings[i]+´<BR>´);
end;
newText.Body.Add(´</TD>´);
newText.Body.Add(´</TR>´);
newText.Body.Add(´</TABLE>´);
newText.Body.Add(´</P>´);
newText.Body.Add(´</BODY>´);
newText.Body.Add(´</HTML>´);
//Anexa a imagem ao corpo do E-mail
if OpenPictureDialog1.FileName <> ´´ then
begin
newAttach := TIdAttachment.Create(IdMessage.MessageParts,imgName1);
newAttach.ContentType := ´image/jpeg´;
newAttach.ContentDisposition := ´inline´;
newAttach.ExtraHeaders.Values[´Content-ID´] := ´<´+imgId1+´>´;
end;
eu mudei lá em cima, colocando ExtractFileName, no IMG SRC... mas ainda não funcionou!
Obrigado!
GOSTEI 0
Massuda
24/09/2007
Pegando partes do tópico que indiquei antes, isto aqui deve funcionar com Indy 9.0.18......não testei, nem conferi seu HTML, use se quiser.
var Texto: TIdText; Html: TIdText; Imagem: TIdAttachment; ArquivoImagem: string; begin ArquivoImagem := OpenPictureDialog1.FileName; IdMessage.ContentType := ´multipart/mixed´; Texto := TIdText.Create(IdMessage.MessageParts); Texto.ContentType := ´text/plain´; Texto.Body.Text := ´This message contains HTML and images.´; Html := TIdText.Create(IdMessage.MessageParts); Html.ContentType := ´text/html´; Html.Body.Add(´<HTML>´); Html.Body.Add(´<BODY>´); Html.Body.Add(´<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="1">´); Html.Body.Add(´<TR>´); Html.Body.Add(´<TD>´); if ArquivoImagem <> ´´ then Html.Body.Add(´<IMG SRC="cid:´+ ExtractFileName(ArquivoImagem) +´"><TR><TD>´); for i := 0 to RichEdit1.Lines.Count-1 do begin Html.Body.Add(RichEdit1.Lines.Strings[i]+´<BR>´); end; Html.Body.Add(´</TD>´); Html.Body.Add(´</TR>´); Html.Body.Add(´</TABLE>´); Html.Body.Add(´</P>´); Html.Body.Add(´</BODY>´); Html.Body.Add(´</HTML>´); //Anexa a imagem ao corpo do E-mail if ArquivoImagem <> ´´ then begin Imagem := TIdAttachment.Create(IdMessage.MessageParts, ArquivoImagem); Imagem.ContentType := ´image/jpeg´; Imagem.Headers.Add(´Content-ID: <´+ExtractFileName(ArquivoImagem)+´>´); end;
GOSTEI 0
Massuda
24/09/2007
Se você estiver usando Indy 8 ou Indy 9 que veio com o Delphi, é recomendável atualizar seu Indy. Baixe o Indy 9.0.18 :arrow: [url=http://www.indyproject.org/Sockets/Download/Files/Indy9.en.aspx]desta página[/url]; essa é a última versão oficial; existe outra ´não-oficial´, mais recente, que você pode obter via CVS ou de um dos sites de snapshot do Indy. Instruções para instalação, você encontra no meio :arrow: [url=http://forum.devmedia.com.br/viewtopic.php?t=57069]deste tópico[/url]. Não recomendo usar Indy 10.
GOSTEI 0
Lucas_spohr
24/09/2007
Cara, testei e continua não funcionando!
mando um e-mail para o hotmail, o qualquer um, e a imagem ao invés de aparecer em cima, na primeira linha da tabela, aparece beem embaixo, logo abaixo da tabela!
obrigado...
up
mando um e-mail para o hotmail, o qualquer um, e a imagem ao invés de aparecer em cima, na primeira linha da tabela, aparece beem embaixo, logo abaixo da tabela!
obrigado...
up
GOSTEI 0
Lucas_spohr
24/09/2007
ok, vou testar, atualizando a versão do INDY...
qualquer coisa, posto aí o resultado...
Obrigado, Massuda!
qualquer coisa, posto aí o resultado...
Obrigado, Massuda!
GOSTEI 0
Lucas_spohr
24/09/2007
mas como que no Outlook, aparece dentro da tabela?
GOSTEI 0
Massuda
24/09/2007
Acho que falta um /TD e um /TR depois de inserir o IMG.
GOSTEI 0
Lucas_spohr
24/09/2007
Massuda!!! Deu certo, fiiinalmentee!! Apenas atualizei o Indy, para a 9.0.18!
Muitíssimo obrigado, cara!
putz... nem sei como agradecer... na boa... fiquei um tempão mudando códigos, e mais códigos HTML, e não tinha jeito de funcionar!
bah... menos mal! Espero agora, que não falte mais nada no projeto... hehe
Obrigado! Abraço... Sucesso!!!
Muitíssimo obrigado, cara!
putz... nem sei como agradecer... na boa... fiquei um tempão mudando códigos, e mais códigos HTML, e não tinha jeito de funcionar!
bah... menos mal! Espero agora, que não falte mais nada no projeto... hehe
Obrigado! Abraço... Sucesso!!!
GOSTEI 0
Staurosg3
24/09/2007
eu já bati cabeça com esse codigo o dia inteiro, e não deu certo, no lugar da imagem no corpo do texto aparece o codigo referente ao html, e a imagem fica como anexo, já atualizei o indy e nada algum pode me ajudar???
GOSTEI 0