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 :

[Mail] Parser un mail


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Mogwaï
    Inscrit en
    Mai 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2004
    Messages : 247
    Par défaut [Mail] Parser un mail
    Bonjour,

    Je souhaite trouver un moyen de parser un email brut enregistré sur le serveur (ou dans une variable).

    J'ai trouvé ceci :
    http://www.phpclasses.org/browse/package/3169.html
    qui aurait pu être parfait, mais qui ne permet pas de recuperer le contenu des pièces jointes. A moins que la façon de le faire m'ait échapé...

    PS : n'y a t-il pas des classes natives dans php qui permettent de le faire mais SANS devoir se connecter à un compte mail ?

    En vous remerciant...

  2. #2
    Membre expérimenté Avatar de Mogwaï
    Inscrit en
    Mai 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2004
    Messages : 247
    Par défaut
    Personne n'a d'idée ?

  3. #3
    Membre confirmé Avatar de pymouse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 137
    Par défaut
    Moi je fait ça,

    Les fonctions :
    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
     
    function open_mailbox($servername, $userlogin, $userpassword) {
       $imaphost = "{".$servername.":143"."}"."INBOX";
    //   $imaphost = "{".$servername.":143"."}"."INBOX";
       $imapmsgbox = imap_open($imaphost, $userlogin, $userpassword);
       return $imapmsgbox;
    }
     
     
    function status_mailbox($mbox,$servername)
    {
    $host = "{".$servername.":143"."}"."INBOX";
    $status = imap_status($mbox, $host, SA_ALL);
    if(!$status) {
          echo "imap_status a échoué : " . imap_last_error() . "\n";
    }
    return $status;
    }
     
     
    function decode_mail($mbox, $msg){
    	$obj = imap_fetchstructure($mbox, $msg, FT_UID); $moet_werken=true; $id=1;
    	while($moet_werken){
    	 $attachments = Check_Part($obj, $id);
    	 $moet_werken=false;
    	}
    	return $attachments;
    }
     
     
    function Check_Part($part,$id){
     
    	 switch($part->type){
    	   case 1: if((strtolower($part->subtype) == "mixed")
    				   or (strtolower($part->subtype)  == "alternative")
    				   or (strtolower($part->subtype) == "related")) break;
     
    	   default: $an = sizeof($attachments);
    			   if($part->ifdparameters){
    				   $dpara = $part->dparameters;
    				   for ($v=0;$v<sizeof($dpara);$v++){
    					 if (eregi("filename", $dpara[$v]->attribute))
    						 $fname = $dpara[$v]->value;}
    			   }
    			   if($part->ifparameters){
    				   if(empty($fname)){
    					 $para = $part->parameters;
    					 for ($v=0;$v<sizeof($para);$v++){
    						 if (eregi("name", $para[$v]->attribute)) $fname = $para[$v]->value;
    					 }
    				   }
    			   }
    			   if(empty($fname))$fname = "(no name)";
     
    			 $attachments[$an]->id = ($an+1);
    			 $attachments[$an]->part = $id;
    		     $attachments[$an]->filename = $fname;
    			 $attachments[$an]->type = $part->type;
    			 $attachments[$an]->subtype = $part->subtype;
    			 $attachments[$an]->dispos = $dispos;
    			 $attachments[$an]->size = $part->bytes;
    			 $attachments[$an]->encod = $part->encoding;
     
    			 break;
    	 }
     
    	for($x = 0; $x < count($part->parts); $x++){
    	 $attachments = Check_Part($part->parts[$x], $id.".".($x+1));
    	}
    	return $attachments;
    }
    Le 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
    $mbox = open_mailbox($server, $login, $pass);
    $statut = status_mailbox($mbox,$server);
    $mailnumber = $statut->messages;
    $overview = imap_fetch_overview($mbox,"1:$mailnumber",0);
     
    if(is_array($overview))
    {
       $nbm = sizeof($overview);
       for($i= $nbm-1; $i >= 0; $i--)
       {
         $val = $overview[$i];
         $nb = $val->msgno;
     
         $attachments = decode_mail($mbox,$nb);
     
    	# Récupération du corps et des pieces jointes #
    	for($x = 0; $x < sizeof($attachments); $x++)
    	{
    		if($x == 0)
    		{	# corp du mail$ #
    			$body = imap_fetchbody($mbox,$nb, $attachments[$x]->id);
    			$body_type = $attachments[$x]->subtype;
    			if($attachments[$x]->encod == 1) $db_body = imap_8bit($db_body);
    			if($attachments[$x]->encod == 2) $db_body = imap_binary($db_body);
    			if($attachments[$x]->encod == 3) $db_body = imap_base64($db_body);
    			if($attachments[$x]->encod == 4) $db_body = imap_qprint($db_body);
    			$type_mess = $attachments[$x]->type;
    			}
    		else
    		{   # piece jointe #
    		$return_content = imap_fetchbody($mbox,$nb, $attachments[$x]->id);
    		if($attachments[$x]->encod == 1) $return_content = imap_8bit($return_content);
    		if($attachments[$x]->encod == 2) $return_content = imap_binary($return_content);
    		if($attachments[$x]->encod == 3) $return_content = imap_base64($return_content);
    		if($attachments[$x]->encod == 4) $return_content = imap_qprint($return_content);
    		$nom_fichier = $attachments[$x]->filename;			
    		$type_fichier = $attachments[$x]->type;
                   }
            }
    }
    Dans $val tu as toutes les données du mail, sender, date, size etc...(voir la doc sur imap_fetch_overview) Le message du mails est dans $body et le corps de la piece jointe dans $return_content. Tu peut toi meme recréer la piece jointe et la stocker dans un dossier, via fopen,fwrite etc ou alors tu peut aussi la faire un lien pour la telecharger en regardant du coté de : header();

    Voila j'espere que ça peut t'aider

Discussions similaires

  1. parser de mail
    Par Papy214 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 27/03/2009, 11h31
  2. [serveur de mail] Partager des mails sur un réseau
    Par FFF dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 03/10/2005, 12h39
  3. [Mail] Détection de mail
    Par JeanMi66 dans le forum Langage
    Réponses: 3
    Dernier message: 08/09/2005, 00h07
  4. [Mail] Envoi de mail en Plain Text
    Par Boeing dans le forum Langage
    Réponses: 4
    Dernier message: 06/09/2005, 18h07
  5. [Mail] dispatching de mail ??
    Par sami_c dans le forum Langage
    Réponses: 6
    Dernier message: 28/03/2005, 11h53

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