Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Composants VCL
Composants VCL Utilisation des différents composants VCL (Visual Component Library)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 10/12/2012, 12h38   #1
coucoucmoi
Membre régulier
 
Didier
Développeur informatique
Inscription : janvier 2003
Messages : 170
Détails du profil
Informations personnelles :
Nom : Didier
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2003
Messages : 170
Points : 70
Points : 70
Par défaut indy pop3 afficher un message dans un TEmbeddedWB

Bonjour a tous,
j'ai un souci pour lire mes message mail en delphi7.
Je peux le lire, je retrouve aussi les piece jointe.
Mais, dans certains message, il y a des images embedded, cad directement dans le corps du message. Hors, j'ai une croix rouge a la place de l'image,
et quand je fais afficher l'image, rien ne se passe.
Comment puis je faire pour intégrer ces images directement ?
Là je sèche complètement.
Mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
procedure TFrmMessagerie2.LireMessage;
Var
  i ,j : integer;
  lIndexRec, lindexCol : Integer;
  AImage : TImage;
begin
 
  ForceDirectories(FDirSave);
  // On se connecte au compte mail si ce n'est pas déjà fait
  if not POP3.connected then
    POP3.connect;
 
  ViewAttach.BeginUpdate;
  while (ViewAttach.DataController.RecordCount>0) do  // On supprime tout
    ViewAttach.DataController.DeleteRecord(0);
 
  EmbeddedWB.LoadFromString('');
 
 
  lindexCol:=ViewAttach.ViewData.GridView.FindItemByName('VColAttach').Index;
 
  // On va boucler du premier au dernier message sur le compte
//  for i := 1 to POP3.CheckMessages do
//  i := lstMsgs.ItemIndex+1;
  i := ViewListeMess.Controller.FocusedRowIndex+1;
 
  begin
    // On récupère le message complet
    idMsg.Clear;
    POP3.Retrieve(i,idMsg);
    FromText.Caption := idMsg.From.Address;
    ToText.Caption := idMsg.Recipients.EMailAddresses;
    try
      CCText.Caption := idMsg.CCList.Items[0].Text;
    except
    end;
    SubjectText.Caption := idMsg.Subject;
    SenderText.Caption := idMsg.From.Name;
    OrganisationText.Caption := idMsg.Organization;
    DateText.Caption := DateToStr(idMsg.date);
 
      // (mpHighest, mpHigh, mpNormal, mpLow, mpLowest);
    If idMsg.Priority = mpHighest then
      PriorityText.Caption := 'Tres haut'
    else If idMsg.Priority = mpHigh then
      PriorityText.Caption := 'Haut'
    else If idMsg.Priority = mpNormal then
      PriorityText.Caption := 'Normal'
    else If idMsg.Priority = mpLow then
      PriorityText.Caption := 'Bas'
    else If idMsg.Priority = mpLowest then
      PriorityText.Caption := 'Très bas';
 
    // Si on a plusieurs parties dans le mail alors on a une pièce jointe
    if idMsg.MessageParts.Count > 0 then
    begin
 
      for j := 0 to idMsg.MessageParts.count -1 do
    //   j := 0;
      begin
        // Est-ce une partie texte du mail ?
        if idMsg.MessageParts.Items[j] is TIdText then
        With TIdText(idMsg.MessageParts.Items[j]) do
        begin
 
           // Load the string
           EmbeddedWB.LoadFromWideString(TIdText(idMsg.MessageParts.Items[j]).Body.text);
 
           // C'est ici que l'image devrait se loader !
 
 
        end;
 
        // Est-ce une pièce jointe ?
        if idMsg.MessageParts.Items[j] is TidAttachment then
          With TIdAttachment(idMsg.MessageParts.Items[j]) do
          begin
 
            if FileExists(FDirSave + FileName) then
               DeleteFile(FDirSave + FileName);
 
                // On sauvegarde le fichier
            SaveTofile(FDirSave + Filename);
 
 
            If Pos('attachment',ContentDisposition)>0 then
            begin
              lIndexRec:=ViewAttach.DataController.AppendRecord;
              ViewAttach.DataController.SetValue(lIndexRec,lindexCol,Filename);
            end
            else // on a une image dans le browser
            begin
           //   ShowMessage(idMsg.MessageParts.Items[j].Headers.Text);
 
            end;
 
          end;
      end; // for j
    end
    else
      EmbeddedWB.LoadFromWideString(idMsg.Body.Text);
 
  end; // for i
 
  ViewAttach.EndUpdate;
 
end;
Merci de vos réponse, là je patauge grave
coucoucmoi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 13h48   #2
ShaiLeTroll
Expert Confirmé Sénior
 
Avatar de ShaiLeTroll
 
Homme
Développeur C++\Delphi
Inscription : juillet 2006
Messages : 9 197
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur C++\Delphi
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2006
Messages : 9 197
Points : 13 249
Points : 13 249
C'est confus comme code, tu mélange du Indy Pop3, le TEmbeddedWB et du DevExpress, perso, je n'aime pas qu'une fonction manipule autant d'élément, je préfère créer des évènements pour avoir un code souple et réutilisable, dans différents contexte d'affichage ou même de batch automatisé

TEmbeddedWB n'est pas un composant standard de la VCL, faudra voir la documentation et le forum du fournisseur

Qu'apporte le TEmbeddedWB par rapport au TWebBrowser D7 Pro puisque tous les deux ne sont que des encapsulations IWebBrowser2 fourni par Microsoft via SHDocVw.dll ainsi que tout un tas d'interfaces DOM IHTMLElement de Microsoft ?

Sinon, le HTML fourni venant du corps des mails, tu télécharges explicitement les images (fichiers joints) depuis ton serveur POP3 mais est-ce que les balises IMG du HMTL pointe sur le dossier FDirSave ?

Je ne pense que pas que IWebBrowser2 gère un fichier HTML local ou distant de la même façon que par un remplissage manuel par InnerHTML équivalent à ton LoadFrom... n'ayant pas de répertoire, il ignore où chercher les images

Au lieu de faire un LoadFromWideString, sauvegarde le HTML dans un fichier, utilise la méthode IWebBrowser2.Navigate (je te laisse trouver l'équivalent TEmbeddedWB), ainsi il aura un répertoire de travail et plus de chance de trouver les images

Avec un TWebBrowser lorsque l'on utilise depuis un site HTTP, ce mécansime est automatique lors du parsing de l'HTML qui va télécharger auprès du Serveur Web les ressources JS ou IMG nécessaires
__________________
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !

L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié !
ShaiLeTroll est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 15h20   #3
coucoucmoi
Membre régulier
 
Didier
Développeur informatique
Inscription : janvier 2003
Messages : 170
Détails du profil
Informations personnelles :
Nom : Didier
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2003
Messages : 170
Points : 70
Points : 70
oui, pour le TEmbeddedWB et le TWebBrowser , le fonctionnement est le même. Donc pas de souci, ce n'est pas le souci.

Ensuite, les pièces jointes, je les met dans une grille, donc je sais ou elle sont, pas de soucis.
Mon soucis est que, quand je li le TIdText, il (le TIdMessage) m'importe tout : texte + image, mais il ne me met pas l'image, j'ai une croix rouge sur le browser.
il me manque donc une étape, ou je lis mal cette partie du code.

j'ai essayé de mettre directement le innerhtml, mais là j'ai le code entier (même celui de l'image).

par contre, je la balise img n'est pas bonne, et est du type :
<img width=640 height=480 id="_x0000_i1025" src="cid:1.1605936151@web172302.mail.ir2.yahoo.com">
alors que l'image a le nom : ATT0006611.jpg

c'est un problème de lecture du message que j'ai, donc de l'utilisation du compo indy tidmessage. enfin, c'est ce que je pense, mais je ne maitrise pas tout ...
coucoucmoi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 16h13   #4
ShaiLeTroll
Expert Confirmé Sénior
 
Avatar de ShaiLeTroll
 
Homme
Développeur C++\Delphi
Inscription : juillet 2006
Messages : 9 197
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur C++\Delphi
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2006
Messages : 9 197
Points : 13 249
Points : 13 249
IMG est orienté mail, c'est logique
Le WebBrowser ne doit pas connaître cela, surtout qu'il n'a pas les identifiants Pop pour consulter une image, donc remplace à la volée les SRC=cid:... par SRC=C:\SaveDir\ImageName....

A toi avec les Identifiants fourni par MessageParts de trouver l'association entre un Content-ID et un nom de fichier
__________________
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !

L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié !
ShaiLeTroll est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 16h22   #5
coucoucmoi
Membre régulier
 
Didier
Développeur informatique
Inscription : janvier 2003
Messages : 170
Détails du profil
Informations personnelles :
Nom : Didier
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2003
Messages : 170
Points : 70
Points : 70
voilà, je pense que je vais faire ca, a chercher
Merci de ton aide
coucoucmoi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h14.


 
 
 
 
Partenaires

Hébergement Web