Précédent   Forum des professionnels en informatique > PHP > Scripts
Scripts Forum d'entraide sur les scripts PHP téléchargés. Les meilleurs scripts PHP, la FAQ scripts PHP, toutes les FAQ PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/04/2006, 16h19   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 44
Points : 13
Points : 13
Par défaut Récupérer les informations contenus dans un mail

Bonjour ,

j' ai l intention de faire un script en PHP5(utilisation de la POO) qui me permettrait en parcourant un mail(au format mailbox) de récupérer quelques informations clé( nom expediteur, date, subject , .... et le contenu du message).
Mais étant débutant en PHP, je ne vois pas quelle méthode utiliser.
Il y a les expressions régulières ( mais je vois pas comment gérer toutes les valeurs que je veux recuperer).

SI vous connaissez une méthode qui me permettrait de récuperer les différentes informations, ce serait gentil de me la communiquer .


Merci d' avance

acado
acado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2006, 16h22   #2
Membre confirmé
 
Avatar de mLk92
 
Inscription : mars 2006
Messages : 522
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 522
Points : 249
Points : 249
Si c'est pour récupéré depuis un mail déja existant je ne vois pas du tout

Sinon il y a la fonction mail(), avec un formulaire

sinon regarde sur php.net et tape mail dans la recherche tu trouvera peut etre ton bonheur
mLk92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2006, 16h45   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 44
Points : 13
Points : 13
il n y a pas de formulaire, je dois lire toutes les infos dans un fichier mail au format mailbox.
acado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2006, 16h50   #4
Membre régulier
 
Inscription : juillet 2004
Messages : 393
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 393
Points : 80
Points : 80
Citation:
Envoyé par acado
il n y a pas de formulaire, je dois lire toutes les infos dans un fichier mail au format mailbox.
Je sais pas à quoi ressemble le format mailbox, mais je pense qu'il faudra créer une fonction de hashage.
Tu peux nous montrer à quoi ressemble un mail 'mailbox' ?
shadeoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2006, 16h53   #5
Candidat au titre de Membre du Club
 
Inscription : avril 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 44
Points : 13
Points : 13
c est le format classique définit par la RFC2822 :

Code :
1
2
3
4
5
6
7
8
From: John Doe <jdoe@machine.example>
			To: Mary Smith <mary@example.net>
			Subject: Saying Hello
			Date: Fri, 21 Nov 1997 09:55:06 -0600
			Message-ID: <1234@local.machine.example>
 
			This is a message just to say hello.
			So, "Hello".
acado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2006, 16h59   #6
Membre régulier
 
Inscription : juillet 2004
Messages : 393
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 393
Points : 80
Points : 80
Citation:
Envoyé par acado
c est le format classique définit par la RFC2822 :

Code :
1
2
3
4
5
6
7
8
From: John Doe <jdoe@machine.example>
			To: Mary Smith <mary@example.net>
			Subject: Saying Hello
			Date: Fri, 21 Nov 1997 09:55:06 -0600
			Message-ID: <1234@local.machine.example>
 
			This is a message just to say hello.
			So, "Hello".
Tu as déjà 5 mots clefs qui ne bougeront pas, ainsi tu peux déduire que entre 'from :' et 'To:' tu auras l'expéditeurs, ensuite dans l'expéditeur tu peux déduire qu'entre '<' et '>' tu as l'email, etc...
shadeoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2006, 09h18   #7
Candidat au titre de Membre du Club
 
Inscription : avril 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 44
Points : 13
Points : 13
merci je vais regarder ca, mais je viens de regarder plus précisément et le format est en fait maildir, je regarde ce que cela donne mais ca ne dois pas etre beaucoup plus différent.

je vous tiens au courant
acado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2006, 14h59   #8
Candidat au titre de Membre du Club
 
Inscription : avril 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 44
Points : 13
Points : 13
alors c bon , j arrive a récupérer toutes les infos que je veux à part le contenu du message :


apparement il y a une ligne vierge entre les dernieres informations et le début du message en lui même.

Comment pourrais je recuperer ce contenu???


merci d avance
acado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2006, 15h58   #9
Membre régulier
 
Inscription : juillet 2004
Messages : 393
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 393
Points : 80
Points : 80
Citation:
Envoyé par acado
alors c bon , j arrive a récupérer toutes les infos que je veux à part le contenu du message :


apparement il y a une ligne vierge entre les dernieres informations et le début du message en lui même.

Comment pourrais je recuperer ce contenu???


merci d avance
Tu récupères quoi exactement le contenu avec la ligne vierge ou juste la ligne vierge ?
Si c'est le premier cas tu fais trim($ton message) pour virer la ligne vierge avant ton message
shadeoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2006, 16h25   #10
Candidat au titre de Membre du Club
 
Inscription : avril 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 44
Points : 13
Points : 13
merci de ta réponse mais ca me renvoi tout le texte et moi en fait je voudrais pouvoir récuperer que cela :
Code :
1
2
This is a message just to say hello.
         So, "Hello".


je pourrais le faire avec eregi() , si le texte commencait toujours apres la même balise or ce n est pas le cas . Apres le Message-ID: <1234@local.machine.example>, il peux y avoir d autres champs comme
Code :
1
2
In-Reply-To: <3456@example.net>
References: <1234@local.machine.example> <3456@example.net>
par exemple , et ca dépends du cheminement du mail....
acado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2006, 07h32   #11
Candidat au titre de Membre du Club
 
Inscription : avril 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 44
Points : 13
Points : 13
personne n a d idée?
acado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2006, 11h55   #12
Candidat au titre de Membre du Club
 
Inscription : avril 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 44
Points : 13
Points : 13
up
acado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2006, 14h55   #13
Candidat au titre de Membre du Club
 
Inscription : avril 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 44
Points : 13
Points : 13
j ai peut etre une idée,

ca serait de récupérer le numéro de ligne de la première ligne vierge rencontrée , et ensuite de prendre tout ce qu' il y a par la suite et le stocker dans un objet $contenu


mais comment puis detecter une ligne vide? et en récupérer son numéro?
acado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2006, 16h51   #14
Membre à l'essai
 
Inscription : avril 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 25
Points : 24
Points : 24
ouais, mais imagine que le petit malin commence son mail avec un saut de ligne, type \n, comment gérer la double ligne vide...?
idée > voici un script pour choper chaque numéro de ligne vide, et par conséquent la premièr ligne vide :
Code :
1
2
3
4
5
6
7
8
9
10
 
<?
$fic = file("mail.txt");
$nb_lignes = count($fic);
for($i=0;$i<$nb_lignes;$i++)
{
   $ligne = $fic[$i];
   if(strlen(trim($ligne))==0) echo "ligne vide : ".($i+1);
}
?>
wyniwyg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2006, 16h55   #15
Membre à l'essai
 
Inscription : avril 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 25
Points : 24
Points : 24
et en rajoutant un bit pour savoir quand on a trouvé le message :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<?
$fic = file("mail.txt");
$nb_lignes = count($fic);
$debut_msg=0;
for($i=0;$i<$nb_lignes;$i++)
{
   $ligne = $fic[$i];
   if($debut_msg==1) echo $ligne."<br>";
   if(strlen(trim($ligne))==0)
   {
      $debut_msg=1;
   }
}
?>
après, on peut toujours placer chaque ligne lue dans un tableau, comme ça on se retrouve avec un tableau contenant uniquement le message et on peut ensuite le traiter comme on veut 8)
wyniwyg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2006, 16h59   #16
Membre à l'essai
 
Inscription : avril 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 25
Points : 24
Points : 24
et voilà enfin le boulot, avec message dans un tableau :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
<?
$fic = file("mail.txt");
$nb_lignes = count($fic);
$debut_msg=0;
$msg=array();
$j=0;
for($i=0;$i<$nb_lignes;$i++)
{
   $ligne = $fic[$i];
   if($debut_msg==1) { $msg[$j]=$ligne; $j++; }
   if(strlen(trim($ligne))==0)
   {
      $debut_msg=1;
   }
}
for($k=0;$k<sizeof($msg);$k++) echo $msg[$k]."<br>";
?>
bon week-end @ tous
wyniwyg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2006, 14h27   #17
Candidat au titre de Membre du Club
 
Inscription : avril 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 44
Points : 13
Points : 13
ah merci bien pour cette aide.

j avais une autre solution mais qui marchait pas convenablement.

Par contre j ai un petit probleme, c pour récuperer la date :s

Code :
Date: Fri, 21 Nov 1997 09:55:06 -0600
, ca n a pas l air de passer dans mon expression régulière

Code :
eregi($headers_array[$head].": ([^:]*)$",$file_array[$i],$recup)
$headers_array est un tableau contenant les differents header que je veux recupérer et $head est un indice du parcours de ce tableau.

Quand on arrive a la ligne qui commence par date, ca me renvoi rien :s
acado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2006, 14h48   #18
Candidat au titre de Membre du Club
 
Inscription : avril 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 44
Points : 13
Points : 13
Résolu de moi même
acado est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h03.


 
 
 
 
Partenaires

Hébergement Web