vieuxpere
Messages postés195Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention17 décembre 2014
-
20 janv. 2009 à 09:41
vieuxpere
Messages postés195Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention17 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 ?
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
vieuxpere
Messages postés195Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention17 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 ?
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
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
vieuxpere
Messages postés195Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention17 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.
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
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
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
vieuxpere
Messages postés195Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention17 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.
vieuxpere
Messages postés195Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention17 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;
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