IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

indy pop3 afficher un message dans un TEmbeddedWB


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 188
    Points : 113
    Points
    113
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    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

  3. #3
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 188
    Points : 113
    Points
    113
    Par défaut
    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 ...

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    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

  5. #5
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 188
    Points : 113
    Points
    113
    Par défaut
    voilà, je pense que je vais faire ca, a chercher
    Merci de ton aide

Discussions similaires

  1. Afficher un message dans un panel
    Par caro_caro dans le forum Wicket
    Réponses: 2
    Dernier message: 04/05/2009, 15h43
  2. Réponses: 1
    Dernier message: 08/10/2008, 20h33
  3. Réponses: 2
    Dernier message: 22/01/2007, 18h59
  4. Réponses: 5
    Dernier message: 07/06/2006, 12h11
  5. [débutant]Affiché un message dans l'émulateur.
    Par rvfranck dans le forum Java ME
    Réponses: 3
    Dernier message: 02/04/2005, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo