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

C++Builder Discussion :

Problème d'instanciation avec Indy / IMAP4


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Par défaut Problème d'instanciation avec Indy / IMAP4
    Malgré des recherches sur la toile, il semble que peu de développeurs utilisent les classes VCL Internet Indy, surtout avec BCB.

    Mais peut être qu'on pourra néanmoins m'aider avec ce qui semble être un problème classique d'instanciation en C++.
    Je ne sais pas quoi indiquer comme paramètres pour les objets ci-dessous. Qui aurait une idée de ce qu'il faut faire ?




    Indy 10 avec BCB XE

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 081
    Par défaut
    Quel est le problème ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TIdMessagePart *PJ = new TIdMessagePart(NULL);
    Si il se montre capricieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TIdMessagePart *PJ = new TIdMessagePart((TPersistent*)NULL);
    Tu dois pourvoir aussi utiliser l'instance de TIdMessage comme Owner, ainsi quand tu le libéreras, cela libérera les Parts (quoi que cela doit même se faire automatiquement puisque c'est une collection)

    En pur théorie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TIdMessageCollection *CollMess = new TIdMessageCollection(_classid(TIdMessageItem));
    Maintenant, tu pourrais utiliser un TIdMailBox
    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 chevronné
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Par défaut
    Merci, ShaiLeTroll, pour cette réponse précieuse que je n'aurais jamais trouvée :
    TIdMessageCollection *ListeMessages = new TIdMessageCollection(__classid(TIdMessageItem));

    Maintenant, j'avais avancé mon affaire en positionnant la propriété IdIMAP41::RetrieveOnSelect à rsHeaders, ce qui occasionnait un temps considérable à lire les dossiers (MailBox) contenant des dizaines de messages (avec SelectMailbox)

    En utilisant, grâce à ton aide, le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TIdMessageCollection *ListeMessages = new TIdMessageCollection(__classid(TIdMessageItem));
    ...
    	if (IdIMAP41->SelectMailBox(ListBox1->Items->Strings[ListBox1->ItemIndex]))
    		if (IdIMAP41->RetrieveAllEnvelopes(ListeMessages)) [ou bien]
    		if (IdIMAP41->RetrieveAllHeaders(ListeMessages))
    int NbMsg = IdIMAP41->MailBox->MessageList->Count;
    avec RetrieveOnSelect positionné à rsDisabled,
    La valeur IdIMAP41->MailBox->MessageList->Count ne contient plus le nombre de messages du dossier comme c'est le cas avec RetrieveOnSelect à rsHeaders.

    Pour me résumer, avec RetrieveOnSelect à rsHeaders, pas besoin de RetrieveAllEnvelopes(ListeMessages) ou de RetrieveAllHeaders(ListeMessages) pour obtenir le nombre de messages du dossier, mais avec RetrieveOnSelect à rsDiasabled, rien à faire.

    Y a-t-il une solution autre pour connaître avec performance juste le nombre de messages dans la MailBox ?

    Merci d'avance.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 081
    Par défaut
    Je ne sais pas si c'est plus performant mais tu as RecentMsgs et TotalMsgs dans TIdMailBox
    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 chevronné
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Par défaut
    Oui, cela fonctionne, merci beaucoup.

    Il me reste à poursuivre mes tests sachant que je me heurte à différents problèmes comme la lecture du seul BODY sans les pièces jointes ainsi qu'à l'affichage propre du BODY (avec le bon codage de caractères).

    Y'a encore de quoi faire

  6. #6
    Membre chevronné
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Par défaut
    J'ai avancé dans mon projet mais je bloque sur la recherche de la taille de chaque pièce jointe.

Discussions similaires

  1. [Lazarus] [Mac OS X] Problème de téléchargement HTTP avec Indy
    Par sinfoni dans le forum Lazarus
    Réponses: 0
    Dernier message: 13/04/2011, 18h34
  2. Problème de download avec Indy
    Par sinfoni dans le forum Web & réseau
    Réponses: 0
    Dernier message: 13/04/2011, 18h33
  3. Problème d'heure avec Indy v10
    Par TsCyrille dans le forum C++Builder
    Réponses: 0
    Dernier message: 20/08/2008, 17h24
  4. Problème d'accents avec Delphi 7 et Indy
    Par julesclaude dans le forum Web & réseau
    Réponses: 0
    Dernier message: 20/07/2008, 16h35
  5. Problème avec Indy sous BSD 2006
    Par merouane_k dans le forum Web & réseau
    Réponses: 1
    Dernier message: 22/03/2008, 21h35

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