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

WinDev Discussion :

Identifier les nouveaux emails lors de la réception par POP et/ou IMAP


Sujet :

WinDev

  1. #1
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut Identifier les nouveaux emails lors de la réception par POP et/ou IMAP
    Bonjour,

    J'ai placé ce topic dans la catégorie Windev mais le problème que je rencontre est plus "général", il concerne plus une généralité quant à l'utilisation des protocoles POP et IMAP.

    Je suis en train de créer un mini client de messagerie qui va servir à recevoir les mails de plusieurs adresses mail.

    J'utilise donc les fonctions disponibles en WLangage comme indiquée dans le projet exemple "WDMAIL".

    Voici en résumé à quoi ressemble ma fonction à l'heure actuelle :

    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
     
    LOCAL
    	oEmailRecu 		est un clEmail dynamique
    	oSessionIMAP 	est un EmailSessionIMAP
    	oSessionPOP  	est un EmailSessionPOP3
    	tstEmailNonLus 	est un tableau de Emails
     
    oSessionPOP.Nom            = "User@Ndd.fr"
    oSessionPOP.MotDePasse     = "Password"
    oSessionPOP.AdresseServeur = "pop.Ndd.fr"
    oSessionPOP.Port           = 110
     
    oSessionIMAP.Nom            = "User@Ndd.fr"
    oSessionIMAP.MotDePasse     = "Password"
    oSessionIMAP.AdresseServeur = "imap.Ndd.fr"
    oSessionIMAP.Port           = 993
    oSessionIMAP.Option = optionSSL
     
    EmailChangeTimeOut(15)
    SI EmailOuvreSession(oSessionPOP) = Faux ALORS
    	RENVOYER(Faux)
    FIN
    EmailChangeTimeOut(10*60)
     
    bMailDejaRecu est un booléen = Faux
    EmailLitDernier(oSessionPOP)
    TANTQUE bMailDejaRecu = Faux _ET_ Email.EnDehors = Faux
    	Si :EstLeDernierMessageRecu() ALORS
    		bMailDejaRecu = Vrai
    	SINON
    		oEmailRecu 							= allouer un clEmail()
    		oEmailRecu:p_stEmail.Expediteur 	= Email.Expéditeur
    		... // Traitement lié à la réception d'un email
    		EmailLitPrécédent(oSessionPOP)
    	FIN
    FIN
     
    EmailFermeSession(oSessionPOP)
     
     
    EmailChangeTimeOut(15)
    SI EmailOuvreSession(oSessionIMAP) = Faux ALORS
    	RENVOYER(Faux)
    FIN
    EmailChangeTimeOut(10*60)
     
    tstEmailNonLus = EmailRécupèreTout(oSessionIMAP,ertNonLus)
    POUR TOUT objEmail DE tstEmailNonLus
    	oEmailRecu 							= allouer un clEmail()
    	oEmailRecu:p_stEmail.Sujet 			= objEmail.Sujet
    	... // Traitement lié à la réception d'un email
    FIN
    EmailFermeSession(oSessionIMAP)
    Explications simplifiées :

    En POP : Je lis le dernier email de la boite de réception et le compare avec le dernier email que j'ai recu (email stocké en HF). Si c'est le même cela veut dire que j'ai fini de traiter tous les mails recus entre mes deux synchronisation.

    En Imap : Je traite les emails considérés comme non-lus sur la boite de réception.


    En testant l'application, je me suis rendu compte de plusieurs problèmes :

    - En POP, si le mail que j'ai stocké a été supprimé du serveur, ma boucle va remonté jusqu'au premier mail de la boite de réception en espérant retrouver le mail enregistré....

    - En IMAP : Si un nouveau mail arrive et est lu par une autre application (webmail par exemple), celui-ci n'est plus considéré comme non-lu. Il ne ressort donc pas à l'appel de tous les emails non-lus de Windev. Cet email ne sera donc jamais réceptionné par mon application.


    Pour faire simple, j'ai un gros problème à trouvé la bonne technique pour détecter les nouveaux mails de la boite de réception.

    Mes contraintes :
    - Je ne dois pas supprimer systématiquement les emails du serveur après les avoir reçus.
    - Synchroniser tous les emails de la boite de réception. J'ai essayé d'utiliser la date et l'heure de ma dernière synchronisation pour traiter uniquement les emails reçus après cette date/heure. Mon problème est que le client final doit pouvoir déplacer un email d'un perso-dossier vers la boite de réception pour que l'application le traite. En me basant sur la date/heure, l'email déplacé n'est pas pris en compte s'il est plus ancien que ma date/heure...
    - J'ai essayé d'enregistrer l'identifiant de chaque mail reçu. A chaque synchronisation, je traitais tous les emails de la boite de réception pour les comparer à ma liste : si l'email n'était pas dans ma liste, c'est que c'était un nouveau ! Le principe est OK mais le temps de traitement est vraiment trop long !

    Bref je ne sais plus où chercher !

    Est-ce que quelqu'un a une piste sur le bon algorithme à mettre en place pour une bonne détection des nouveaux mails déjà rencontré mon problème?
    Google est ton ami !

  2. #2
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 615
    Points : 841
    Points
    841
    Par défaut
    Bonjour
    Il n'y a que la boite de réception que tu dois synchroniser ?
    pourquoi ne pas tout récupérer ? auquel cas, la date est une bonne chose
    Tu ne peux pas non plus les déplacer dans un dossier synchronisation ?

    Dans tous les cas, si tu n'utilises pas la date, il faut que tu passes toute la liste des mails de ton dossier

    Gancau

  3. #3
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Bonjour,

    A ma connaissance, le protocole POP ne permet que de récupérer les courriers se trouvant dans le dossier INBOX (du moins je n'ai pas trouvé comment accéder aux autres dossiers )

    Et dans l'idéal, oui j'aimerai ne synchroniser que la boite de réception pour laisser la possibilité à l'utilisateur de créer des règles de réception afin de déplacer automatiquement des mails dans un dossier (email personnel par exemple).

    J'essaie actuellement d'utiliser l'assemblage Mailbee .net qui permet de ne récupérer que les ID des messages sans récupérer toute l'entête du mail comme le fait les fonctions de Windev. Je vous dirais ce que cela donne niveau rapidité...
    Google est ton ami !

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/07/2013, 02h46
  2. [SMF] Lors des inscriptions, je souhaite cacher les adresses email
    Par paterson dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 17/02/2009, 03h07
  3. Réponses: 4
    Dernier message: 25/06/2008, 14h59
  4. Réponses: 6
    Dernier message: 12/12/2006, 11h27

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