URGENT - comment je peux afficher un mail

Résolu
vieuxpere Messages postés 197 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014 - 20 janv. 2009 à 09:41
vieuxpere Messages postés 197 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014 - 22 janv. 2009 à 15:16
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

Utilisateur anonyme
20 janv. 2009 à 16:12
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
3
Ptid0m Messages postés 21 Date d'inscription vendredi 16 janvier 2009 Statut Membre Dernière intervention 15 mai 2009 1
20 janv. 2009 à 10:00
Bonjour,
Peut-être avec un TWebBrowser ?
0
vieuxpere Messages postés 197 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014
20 janv. 2009 à 10:13
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 ?
0
Utilisateur anonyme
20 janv. 2009 à 10:19
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
20 janv. 2009 à 10:23
Comme TWebBrowser = Internet Explorer, ben c'est comme le TMediaPlayer  c'est une grosse daube .
0
vieuxpere Messages postés 197 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014
20 janv. 2009 à 10:35
Ok je comprend, connaissez-vous les compsants payants qui permettent de faire ça ?
0
Utilisateur anonyme
20 janv. 2009 à 10:36
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
0
Ptid0m Messages postés 21 Date d'inscription vendredi 16 janvier 2009 Statut Membre Dernière intervention 15 mai 2009 1
20 janv. 2009 à 10:37
Est-ce  ces composants : ThtmlViewer and TFrameViewer ?
0
Ptid0m Messages postés 21 Date d'inscription vendredi 16 janvier 2009 Statut Membre Dernière intervention 15 mai 2009 1
20 janv. 2009 à 10:38
Oups , on s'est croisé ...
0
vieuxpere Messages postés 197 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014
20 janv. 2009 à 13:41
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...
0
Utilisateur anonyme
20 janv. 2009 à 14:29
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
0
Utilisateur anonyme
20 janv. 2009 à 14:40
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
0
vieuxpere Messages postés 197 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014
20 janv. 2009 à 15:02
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.
0
vieuxpere Messages postés 197 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014
20 janv. 2009 à 17:00
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 !!!
0
Utilisateur anonyme
20 janv. 2009 à 20:37
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
0
vieuxpere Messages postés 197 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014
21 janv. 2009 à 02:11
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...
0
Utilisateur anonyme
21 janv. 2009 à 10:02
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 ?
0
vieuxpere Messages postés 197 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014
21 janv. 2009 à 15:36
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;
0
Utilisateur anonyme
21 janv. 2009 à 19:52
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
0
vieuxpere Messages postés 197 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014
22 janv. 2009 à 15:16
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.
0