Newsgroup: it.comp.lang.delphi
Titolo: Indy ed immagini

Un saluto a tutti.
Vorrei sapere se esiste qualche esempio di invio email in html con 
immagini per componenti indy (versione 10)
Il mio problema e' che riesco sia ad inviare email html che immagini ma 
non riesco ad inglobare una singola immagine nella parte html.
Mi succede che l'immagine mi viene inviata sempre e comunque come 
allegato e, la zona nella parte html dove andrebbe l'immagine rimane bianca.
ho settato lo stesso nome sia par la parte html <img src="cid:<nome>> 
che per il contest-id della parte relativa all'attach jpg ma nulla.
Questa e' la parte di codice che si occupa dell'html:
Testo.Add('<img src="cid:parte1">');
e questa e' la parte relativa all'immagine:
bmppart.ContentId := 'parte1';
ovviamente la parte html e' identificata come 'text/html', la parte 
immagine come 'image/jpeg' ed il messaggio come 'multipart/mixed'
idee?

 idee?
Le immagini devono essere linkate "inline" al contenuto html.
http://groups.google.it/group/borland.public.delphi.vcl.components.using/browse_thread/thread/818160f5f963b6d0/ce52dc012ee1b7d6?hl=it&lnk=st&q=send+html+email+tidmessage#ce52dc012ee1b7d6
ciao
-- 
Morde

Magari fosse cosi' semplice. L'avevo gia' fatto ma il risultato e' lo 
stesso.
Se prendo il sorgente dell'email ottengo per la parte html
Content-Type: text/html ; charset="ISO-8859-15"
Content-Transfer-Encoding: 8bit
<img src="
cid:par...@email.it
">
e per la parte immagine
Content-Type: image/jpeg;
         name="Kit Tubi.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
         filename="Kit Tubi.jpg"
Content-ID: 
par...@email.it
{.. cointinuano i dati ..}
come vedere il content-id ed il cid corrispondono ma non viene 
visualizzata l'immagine (ovvero viene visualizzata ma come allegato alla 
fine dell'email e non nel posto che avevo scelto nell'html)

 <img src="
cid:par...@email.it
">




Prova ad usare "multipart/alternative"
Ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

ho provato il codice presente nel link, però mi arriva un email con la X 
rossa al posto dell'immagine, mentre nel sorgente vedo che è inglobata 
correttamente l'immagine
Simone 

Simone P. ha scritto:

esattamente come a me (anche se poi l'immagine la vedo tra gli 
allegati). E' questo che non riesco a capire.

> Prova ad usare "multipart/alternative"
Con questo mi arriva solamente l'immagine

 <img src="
cid:par...@email.it
">
con
<img src="cid:Kit_Tubi.jpg">
dove Kit_tubi.jpg è il nome del file dell'immagine
dovrebbe funzionare, rimane la necessità di allegare l'immagine al
messaggio.
ciao
Micky

Grazie a tutti. Per chi interessa ho risolto cosi':
Creo l'oggetto TIdMessage ed assegno:
  ContentType := 'multipart/related';
  Encoding    := meMIME;
Poi creo l'oggetto TIdText in questo modo:
   With TIdText.Create(email.MessageParts) Do
        Begin
          ContentType := 'multipart/alternative';
          ParentPart  := -1;
        End;
Ora creo l'oggetto che mi serve per avere l'html
   With TIdText.Create(email.MessageParts, Testo) Do
        Begin
          ContentType     := 'text/html';
          ContentTransfer := '8bit';
          CharSet         := 'ISO-8859-15';
          ParentPart      := 0;
        End;
(Testo è una string list contenente il codice html)
eseguo la funzione MessageParts.CountParts sull'oggetto TIdMessage e, 
per finire, creo la/le immagini usate
With TIdAttachmentFile.Create(email.MessageParts, Vet_Mem[I].Immagine) Do
  Begin
    ContentType        := 'image/jpeg';
    FileIsTempFile     := true;
    ContentDisposition := 'inline';
    ContentId          := 'parte'+IntToStr(ImgName);
    ParentPart         := -1;
  End;
Nota: per linkare le immagini nell'html ho usato, come dichiarazione 
html, la dicitura '<img alt="" src="cid:parte'+IntToStr(ImgName)+'">' e, 
per il Content-ID dell'immagine la dicitura
ContentId := 'parte'+IntToStr(ImgName);
Dove ImgName e' un intero
Ora funziona tutto ma non chiedetemi perche' (in rete c'e' poco o nulla)

 Ora funziona tutto ma non chiedetemi perche' (in rete c'e' poco o nulla)
Vedi le RFC, per esempio: 
http://tools.ietf.org/html/rfc2046
sono spiegate i vari sottotipi di "multipart". E' da li' che,
IMO, nascevano i problemi.
ACSH


Ecco appunto. Alla fine da qualche parte c'e' scritto. Grazie mi sara' 
utile per le prossime volte

 utile per le prossime volte
Non so se a qualcuno può essere utile, ma io per poter visualizzare
"inline"
le immagini con le Webmail (Google e altri) devo racchiudere il
Content-ID
tra <>.. cio se nel html metto
<img src="cid:Part1">
nel Contend-ID devo mettere "<Part1>" e non "Part1"
gioloi

hai qualche blocco di codice, ho provato a fare come hai detto ma non mi 
arriva
Simone 


Il codice è preso dal web con piccole modifiche
Nella form ci sono solo 2 edit, 1 button, un opendialog
per leggere l'immagine da allegare e naturalmente il componente
IdSMTP che è già configurato con i parametri di connessione.
Uso Delphi 7 + Indy 9 non so se con le 10 il comportamento
è diverso.
procedure TForm1.Button1Click(Sender: TObject);
var
  html: TStrings;
  htmpart, txtpart: TIdText;
  bmppart: TIdAttachment;
  email: TIdMessage;
  filename: string;
begin
  if OpenDialog1.Execute then
  begin
    filename := OpenDialog1.FileName;
    html := TStringList.Create();
    html.Add('<html>');
    html.Add('<head>');
    html.Add('</head>');
    html.Add('<body><h1>Prova Indy</h1>');
    html.Add('<img src="cid:' + ExtractFileName(filename) + '">');
    html.Add('Ciao!</body>');
    html.Add('</html>');
    email := TIdMessage.Create(nil);
    email.From.Text := edit1.Text;
    email.Recipients.EMailAddresses := edit2.Text;
    email.Subject := 'Prova Indy';
    email.ContentType := 'multipart/mixed';
    email.Body.Assign(html);
    txtpart := TIdText.Create(email.MessageParts);
    txtpart.ContentType := 'text/plain';
    txtpart.Body.Text := '';
    htmpart := TIdText.Create(email.MessageParts, html);
    htmpart.ContentType := 'text/html';
    bmppart := TIdAttachment.Create(email.MessageParts, filename);
    bmppart.ContentType := 'image/jpeg';
    bmppart.FileIsTempFile := False;
    bmppart.ContentDisposition := 'inline';
    bmppart.ExtraHeaders.Values['content-id'] := '<' +
ExtractFileName(filename)
      + '>';
    bmppart.DisplayName := ExtractFileName(filename);
    IdSMTP1.MailAgent := 'Delphi';
    idSMTP1.Connect(1500);
    try
      idSMTP1.Send(email);
    finally
      idSMTP1.Disconnect();
      email.Free();
      html.Free();
    end;
  end;
end;
Ciao.
gioloi

ok grazie... provo.. io uso d5 o d6
Simo

 nel Contend-ID devo mettere "<Part1>" e non "Part1"
Funziona sia con <> che senza. Lo avevo notato anche io ma non ho mai 
capito il motivo