Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
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 17/05/2011, 15h27   #1
Futur Membre du Club
 
Inscription : novembre 2007
Messages : 148
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 148
Points : 18
Points : 18
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 :
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 :
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
ingeniomatique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 16h35   #2
Membre régulier
 
Inscription : 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 : 82
Points : 82
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.
kodeya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 16h44   #3
Futur Membre du Club
 
Inscription : novembre 2007
Messages : 148
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 148
Points : 18
Points : 18
Si je fais :
Code :
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 :
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
ingeniomatique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 20h44   #4
Futur Membre du Club
 
Inscription : novembre 2007
Messages : 148
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 148
Points : 18
Points : 18
Résolu !! L'explode n'était pas situé au bon endroit. Merci bc.
ingeniomatique 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 13h47.


 
 
 
 
Partenaires

Hébergement Web