+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre régulier
    Profil pro Didier
    Développeur informatique
    Inscrit en
    janvier 2003
    Messages
    177
    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 : 177
    Points : 74
    Points
    74

    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

  2. #2
    Expert Confirmé Sénior Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    10 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

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

    Informations forums :
    Inscription : juillet 2006
    Messages : 10 080
    Points : 14 312
    Points
    14 312

    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 Didier
    Développeur informatique
    Inscrit en
    janvier 2003
    Messages
    177
    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 : 177
    Points : 74
    Points
    74

    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 Confirmé Sénior Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    10 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

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

    Informations forums :
    Inscription : juillet 2006
    Messages : 10 080
    Points : 14 312
    Points
    14 312

    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 Didier
    Développeur informatique
    Inscrit en
    janvier 2003
    Messages
    177
    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 : 177
    Points : 74
    Points
    74

    Par défaut

    voilà, je pense que je vais faire ca, a chercher
    Merci de ton aide

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •