URGENT - comment je peux afficher un mail

Résolu
Signaler
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014
-
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014
-
Bonjour,


Je fais un client mail qui permet d’envoyer et de recevoir des messages (via Delphi 7 / Indy), je souhaiterais savoir comment je peux afficher un mail.


Au fait un mail c’est quoi ? Forcement du HTML ? Et que du HTML ?



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Pour l’instant, J’affiche mes corps de texte dans un RichEdit mais comme vous l’imaginez les résultats ne sont pas très probants… En fait ça marche quand le mail n’a que texte !



 




Connaissez-vous une méthode d’affichage de code HTML et un composant plus approprié qu’un RichEdit pour le faire ?



 




Merci de vos réponses.



 




Cordialement.

20 réponses


Ouep j'ai fais un LoadFromFile mais dans ton cas il y a mieux : LoadFromStream(AStream:TStream) ce qui fait que tu n'es pas obligé d'enregistrer ta page sur un fichier.

Merci de valider la réponse au cas ou un autre repose la question
Messages postés
21
Date d'inscription
vendredi 16 janvier 2009
Statut
Membre
Dernière intervention
15 mai 2009
1
Bonjour,
Peut-être avec un TWebBrowser ?
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014

J'ai  essayé en effet avec un un TWebBrowser  mais la page HTML ne s'affiche pas correctement quand même et surtout j'ai un délai de chargerment de la page qui est trés long (presque 5 mn).
A moins que je ne sache pas correctement m'en servir, quelqu'un a t'il pu le tester ? Ou il y a t'il mieux que ce composant ?

Salut,

je t'ai déjà réponsu sur le sujet : il n'existe pas (à ma connaissance) de composants gratuits pour afficher une page html (Par le passé il y avait un compo light mais pas terrible et plutot limité) désolé .

Il te reste plus qu'à faire ton propre composant : Mais à mon avis c'est un sacré travail en perspective .

En même temps il aurait peut etre été bien que tu te poses la question avant de commencer à coder

Comme TWebBrowser = Internet Explorer, ben c'est comme le TMediaPlayer  c'est une grosse daube .
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014

Ok je comprend, connaissez-vous les compsants payants qui permettent de faire ça ?

T'as de la chance pour le compo light maintenant la version pro est gratuite :
Note: The HTML Display Components (including the source code) are now in the public domain.
I regret that I am unable to provide modifications or maintenance in the future. Lien

Bon par contre en terme de recherche, tu n'as pas vraiment été très courageux  : ca m'a pris 30 sec pour le trouver
Messages postés
21
Date d'inscription
vendredi 16 janvier 2009
Statut
Membre
Dernière intervention
15 mai 2009
1
Est-ce  ces composants : ThtmlViewer and TFrameViewer ?
Messages postés
21
Date d'inscription
vendredi 16 janvier 2009
Statut
Membre
Dernière intervention
15 mai 2009
1
Oups , on s'est croisé ...
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014

Merci pour vos liens pour "HTML Display Components" mais le probléme c'est que sur le site on y trouve un fichier Exe que j'ai installé (la version Free), mais aprés l'installation je ne trouve pas l'ombre d'un composant nouveau sur Delphi à utiliser.

Si quelqu'un peux essayer ou à une idée...

VieuxPère avant de te filer le lien j'ai téléchargé, installé et essayé ce composant : il serait temps que tu fasses un effort car là tu te moques vraiment du monde. Il y a un fichier d'aide dans lequel l'installation est expliqué il suffit de lire

Démonstration :

Lancer du set up

Aide qui lance automatiquement après l'installation

Dans le dossier correspondant

Ouverture du dossier package

Merci de faire des efforts
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014

J'ai essayé avec le code suivant :
HTMLViewer1.LoadFromFile('C:\Users\DNT6\Desktop\test.htm'); Et ça marche assez bien.

Francky as-tu fais le même test que moi (via un LoadFromFile), sinon comment ?

En tous cas, avec grande sincerité merci à tous le monde et tout particulierment à Francky.
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014

Ca marche, je dois encore l'améliorer mais j'ai enfin les bons outils.

Voici mon code :
 Var TexteHTML:TStringList;

TexteHTML:=TStringList.create;
TexteHTML.Add(TIdText(IdMessage1.MessageParts.Items[j]).Body.text);
TexteHTML.SaveToFile('MaPage.html');
HTMLViewer1.LoadFromFile('MaPage.html');

Concernant le SaveToStream, j'imagine que ça doit prendre la forme TexteHTML.SaveToStream(à l'interieur je sais pas quoi mettre);

Francky un GRAND merci !!!

Hummmm deux choses :

1) Il y a pas un LoadFromText ? j'ai pas le composant là mais il me semble que c'est le cas.  Donc

LoadFromText(IdMessage1.MessageParts.Items[j]).Body.text);

Si c'est bon il y pas besoin de TStringList

2)Attention : je ne sais pas ce qui se passe avec un simple fichier texte : peut etre que ca plante litéralement.

Dans ce cas (Et oui ton mail peut etre en html mais aussi en texte) le mieux est de faire la chose suivante : Créer un TStringList  y coller le  header suivant

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   </head>
  
     //////////////
  
</html>

Dans la zone rouge tu inseres le corps de ton mail et tu charges le tout dans le THMLLite. Ainsi tu transformes ton texte brut en html. Ca t'évite de créer un mémo. A tester

Sinon de rien
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014

Tout est ok, par contre en ce qui concerne :

          // Contruction du mail recus en page HTML (dans le cas où le mail recu ne soit que du texte
          TexteHTML:=TStringList.create;
          TexteHTML.Add('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">');
          TexteHTML.Add('<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >');
          TexteHTML.Add(' <head>');
          TexteHTML.Add('    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />');
          TexteHTML.Add('  </head>');
          TexteHTML.Add('   ');
          TexteHTML.Add(TIdText(IdMessage1.MessageParts.Items[j]).Body.text);
          TexteHTML.Add('');
          TexteHTML.Add('</html>');
          // Enregistre le corps du message
          TexteHTML.SaveToFile(Form2.Edit53.Text+'\'+Form2.Edit55.Text+'\'+IntToStr(i)+'\Message\Corps.html');

Ca semble pas fonctionner, quand j'ai un message de type texte qui m'arrive, je ne genere pas de fichiers HTML en dépit du code ci-dessus.

Si vous avez une idée...

Je viens de faire un test :

procedure TForm1.Button1Click(Sender: TObject);
Var
  TexteHTML:TStringList;
begin
  TexteHTML:=TStringList.create;
  TexteHTML.Add('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">');
  TexteHTML.Add('<html xmlns="sur http://www.w3.org/1999/xhtml [ Lien ]" xml:lang="fr" >');
  TexteHTML.Add('<head>');
  TexteHTML.Add('<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />');
  TexteHTML.Add('</head>');
  TexteHTML.Add('');
  TexteHTML.Add('MON CORPS');
  TexteHTML.Add('');
  TexteHTML.Add('</html>');
  TexteHTML.SaveToFile('C:\test.html');
  TexteHTML.Free;
end;

J'obtients bien un fichier html dont voici le code

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="sur http://www.w3.org/1999/xhtml [ Lien ]" xml:lang="fr" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
MON CORPS
</body>
</html>

Es tu sur que le dossier que tu utilises existe ?
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014

Bonjour,

Aprés avoir vérifier il ne me créé pas en effet de fichier, je pense que ça tiens à mes conditions qui ne doivent pas permettre podans le cas d'un mail en texte simple de créer le fichier HTML correspondant (voir code ci-dessous).

Enfin, j'ai un dernier probleme, je n'arrive pas à afficher dans le HtmlViewer les images qui font partie intégrante du mail, j'ai le cadrre de l'image mais pas l'image (un point d'interrogation à la place), sinon tous le reste s'affiche assez correctement.  Ces images faisant partie intégrante du mail sont semblent-t'ils considérées comme piéce jointe.
 
Je pense que c'est ma variable qui me sert pour alimenter le HTMLViewer qui ne doit pas l'integrer.

Voici mon code :

//On récupère le nombre de messages
NbrMsgs := idPOP31.CheckMessages;


// Boucle des messages
for i := 1 to NbrMsgs do
begin


//On récupère l'entête du Ième message
IdPOP31.Retrieve(i, IdMessage1);


// Si on a plusieurs parties dans le mail alors on a une pièce jointe
if IdMessage1.MessageParts.Count > 0 then
// Boucle des differentes parties de chaque message (texte et pieces jointes)
for j := 0 to IdMessage1.MessageParts.count -1 do
      begin


      // Est-ce une partie texte du mail ?
      if IdMessage1.MessageParts.Items[j] is TIdText  then
          begin
           // Contruction du mail recus en page HTML (dans le cas où le mail recu ne soit que du texte
          TexteHTML:=TStringList.create;
          TexteHTML.Add('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">');
          TexteHTML.Add('<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >');
          TexteHTML.Add(' <head>');
          TexteHTML.Add('    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />');
          TexteHTML.Add('  </head>');
          TexteHTML.Add('   ');
          TexteHTML.Add(TIdText(IdMessage1.MessageParts.Items[j]).Body.text);
          TexteHTML.Add('');
          TexteHTML.Add('</html>');
          // Enregistre le corps du message
          TexteHTML.SaveToFile(Form2.Edit53.Text+'\'+Form2.Edit55.Text+'\'+IntToStr(i)+'\Message\Corps.html');
          End;


       // Est-ce une partie piéce jointe ?
        if IdMessage1.MessageParts.Items[j] is TIdAttachment then With TIdAttachment (IdMessage1.MessageParts.Items[j]) do
           Begin
            SaveTofile(Form2.Edit53.Text+'\'+Form2.Edit55.Text+'\'+IntToStr(i)+'\'+Filename);
            End;

      end;

Re,

Question number One : Normal que ca plante

for j := 0 to IdMessage1.MessageParts.count -1 do
begin
  if IdMessage1.MessageParts.Items[j] is TIdText  then
  begin
    TexteHTML:=TStringList.create;
    With TexteHTML Do
    Begin
      Add('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">');
      Add('<html xmlns="sur http://www.w3.org/1999/xhtml [ Lien ]" xml:lang="fr" >');
      Add(' <head>');
      Add('    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />');
      Add('  </head>');
      Add('   ');
      Add(TIdText(IdMessage1.MessageParts.Items[j]).Body.text);
      Add('');
      Add('</html>');
      SaveToFile(Form2.Edit53.Text+'\'+Form2.Edit55.Text+'\'+IntToStr(i)+'\Message\Corps.html');
    End;
  end;
End;

Ton fichier Corps.html ne peut pas se créer dans la mesure ou son dossier (Form2.Edit53.Text+'\'+Form2.Edit55.Text+'\'+IntToStr(i)+'\Message')  n'existe pas. Remplace cette ligne en rouge par SaveToFile('C:\Corps.html');
 
Qurstion number two : normal aussi. Si des images sont linkées il faut aussi les télécharger et en plus changer les liens dans le code html en fonction du répertoire ou tu auras stocké ces images.

C'est la cata grave ton histoire : je te souhaite bien du courage
Messages postés
197
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
17 décembre 2014

Bonjour,

Merci il va m'en falloir en effet, mais le gros est resolu.

En tous je te remercie encore Franky.

J'ai quelques petites questions encore mais je pense que je vais les poser dans un nouveau message.