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

Langage PHP Discussion :

Séparer une chaîne avec fichier joint ET base64


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 153
    Points : 48
    Points
    48
    Par défaut Séparer une chaîne avec fichier joint ET base64
    Bonjour à tous,

    Je reçois AUTOMATIQUEMENT par les services d'Hotmail, dans un dossier, des mails de plainte que je dois traiter pour supprimer les utilisateurs de ma base de données.

    Ces e-mails arrivent sous la forme d'une en-tête + un fichier joint (qui inclut le mail que MOI j'ai envoyé à l'origine, et donc l'e-mail du destinataire). Pour compliquer la tâche, ce fichier joint semble codé.

    Ce que je souhaite faire est de récupérer, dans le fichier joint, l'adresse e-mail concernée pour la supprimer de ma base de données.

    Je procède donc comme suit :

    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
    if ($handle = opendir('/home/vpopmail/domains/domain.com/postmaster/Maildir/cur/'))
    { 
      while (false !== ($file = readdir($handle)))
      {
     
     
        $page = file_get_contents("/home/vpopmail/domains/domain.com/postmaster/Maildir/cur/$file" );
    	if ( preg_match("#complaint about#i", $page) == true){
    		echo "ok";
     
    		list($avant, $apres) = explode("aznet.fr>", $page);
     
    		$page = base64_decode($apres);
     
    	echo $page;
     
        $titre = preg_match("/X-HmXmrOriginalRecipient: (.+)/", $page, $regs); 
        echo "".$regs[1]."<br>"; 
     
    if ($titre>0){ $r1=mysql_query("UPDATE base SET ok=0 WHERE mail='".$regs[1]."'");
    unlink("/home/vpopmail/domains/domain.com/postmaster/Maildir/cur/$file");	 }else{ echo "Mail non reconnu<br>"; }
     
      }}
     
      closedir($handle); 
    }
    1- Je prends les mails du dossier les uns après les autres.
    2- Je ne sélectionne QUE les mails qui m'intéressent (ceux qui contiennent "complaint") => Ca ça marche, aucun souci.
    3- J'ouvre les mails concernés les uns après les autres.
    4- J'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list($avant, $apres) = explode("aznet.fr>", $page);
    pour séparer mon mail en deux (aznet.fr> étant la FIN de l'en-tête, et donc le début de la pièce jointe. Je récupère donc la pièce jointe seule dans $apres.
    5- Je décode la pièce jointe ($apres).
    6- Je récupère l'e-mail, situé juste après X-HmXmrOriginalRecipient: et puis je le traite.

    Je BLOQUE à l'étape 4 je pense... Car j'ai bien les ECHO "ok" mais les ECHO "$page" ne donnent RIEN. Et j'obtiens "mail non reconnu".

    Merci par avance de votre aide.
    Antoine

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 84
    Points
    84
    Par défaut
    C'est peut être parce que $apres n'est pas encodé avec base64_encode et $page = false apres la ligne : $page = base64_decode($apres); ?

    base64_decode
    http://fr2.php.net/manual/en/function.base64-decode.php

    Return Values

    Returns the original data or FALSE on failure. The returned data may be binary.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 153
    Points : 48
    Points
    48
    Par défaut
    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo base64_decode($apres);
    Ca n'affiche rien. Même pas FALSE.

    Je suis un peu perdu j'avoue...


    Quant à la pièce jointe elle semble encodée en base64 :

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    dy5tZWRpZXZhbC13YXIuY29tLzEtQ29tbXVuaWNhdGlvbi9uZXdzbGV0dGVyUHJvbW9f
    MDMucG5nKTsnPjxpbWcgc3JjPSdodHRwOi8vd3d3Lm1lZGlldmFsLXdhci5jb20vMS1Db21tdW5p
    Y2F0aW9uL25ld3NsZXR0ZXJQcm9tb18wMy5wbmcnPjxpbWcgc3JjPSdodHRwOi8vd3d3Lm1lZGll
    dmFsLXdhci5jb20vMS1Db21tdW5pY2F0aW9uL25ld3NsZXR0ZXJQcm9tb18wMy5wbmcnPjwvdGQ+
    Cgo8L3RyPgoKPC90Ym9keT4KCjwvdGFibGU+Cgo8L3RkPgoKPC90cj4KCjx0cj4KCjx0ZD48YSBo
    cmVmPSdodHRwOi8vd3d3Lm1lZGlldmFsLXdhci5jb20vc2lnbnVwLnBocD9tYWlsPWJldHR5OTEw
    QGhvdG1haWwuZnInIGNsYXNzPSdtZW51NCc+PGltZyBzcmM9J2h0dHA6Ly93d3cubWVkaWV2YWwt
    d2FyLmNvbS8xLUNvbW11bmljYXRpb24vbmV3c2xldHRlclByb21vXzA0LnBuZycgYWx0PSdNZWRp
    ZXZhbCBXYXInIGJvcmRlcj0nMCcvPjwvYT48L3RkPgoKPC90cj4KCjwvdGJvZHk+Cgo8L3RhYmxl
    PgoKPC9kaXY+Cgo8L2NlbnRlcj48YnI+PGJyPgoKCQkJPC9ib2R5PgoKCQkJPC9odG1sPgoKCjxi
    cj4KCgpTaSB2b3VzIHNvdWhhaXRleiB2b3VzIGQmZWFjdXRlO3NhYm9ubmVyIGRlIGxhIG5ld3Ns
    ZXR0ZXIgRm94Qm9uZCwgPGEgdGl0bGU9J2Rlc2Fib25uZW1lbnQnIGhyZWY9J2h0dHA6Ly93d3cu
    dGhlY2hpZW4uY29tL21haWxlcmFzZS5waHA/bWFpbD1iZXR0eTkxMEBob3RtYWlsLmZyJz5jbGlx
    dWV6IGljaTwvYT48L2ZvbnQ+CgoKPC90ZD4KCgo8L3RyPgoKCjwvdGFibGU+CgoKPC9ib2R5PgoK

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 153
    Points : 48
    Points
    48
    Par défaut
    Résolu !! L'explode n'était pas situé au bon endroit. Merci bc.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 29/05/2012, 15h27
  2. [RegEx] Tester une chaîne avec ereg()
    Par Anduriel dans le forum Langage
    Réponses: 4
    Dernier message: 30/04/2006, 11h36
  3. envoi mail avec fichier joint
    Par dietrich dans le forum API standards et tierces
    Réponses: 14
    Dernier message: 28/02/2006, 14h42
  4. [RegEx] Remplacer une chaîne avec preg_replace
    Par GregPeck dans le forum Langage
    Réponses: 3
    Dernier message: 08/12/2005, 12h21
  5. [c#] Envoi d'un mail avec fichier joint
    Par macfred dans le forum ASP.NET
    Réponses: 8
    Dernier message: 05/12/2005, 11h15

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