Récupérer des blocs dans un corps de message

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Récupérer des blocs dans un corps de message

Re: Récupérer des blocs dans un corps de message

par TheMarmotte » 22 mai 2012, 12:37

MERCI INFINIMENT, ça marche du tonnerre =D>

@ bientôt
Les expressions régulières ne sont pas obligatoires pour tout :)

Tu as la fonction explode() qui permet de découper une chaine en plusieurs :

$blocs = explode("\r\n\r\n", $corps);

Une fois les blocs obtenus, tu peux récupérer les lignes :

foreach ($blocs as $bloc)
{

$lignes = explode("\r\n", $bloc);

}

Et ensuite, soit tu considères les lignes toujours dans le même ordre, soit tu fais un substr(), soit un explode(':'), soit une expression régulière, etc.

Re: Récupérer des blocs dans un corps de message

par turlutin » 22 mai 2012, 02:05

Les expressions régulières ne sont pas obligatoires pour tout :)

Tu as la fonction explode() qui permet de découper une chaine en plusieurs :

$blocs = explode("\r\n\r\n", $corps);

Une fois les blocs obtenus, tu peux récupérer les lignes :

foreach ($blocs as $bloc)
{

$lignes = explode("\r\n", $bloc);

}

Et ensuite, soit tu considères les lignes toujours dans le même ordre, soit tu fais un substr(), soit un explode(':'), soit une expression régulière, etc.

Récupérer des blocs dans un corps de message

par CW76 » 21 mai 2012, 18:50

Bonjour à tous,

J'aimerais compléter mon appli "Newsletters" avec une gestion des bounces (ces emails qu'on reçoit de notre fournisseur lorsqu'un email qu'on a envoyé n'a pas pu être délivré à son destinataire)
J'ai un hébergement mutualisé (perso) chez ovh, pour lequel j'ai demandé (via mon manager->suivi des emails automatisés) à ce que ces bounces me parviennent par email sur une boîte mail exclusivement créée à cet effet : [email protected].
Ainsi, dans les 24 heures qui suivent l'envoi d'un mailing via mon site (avec la fonction mail de php), je reçois un mail automatique de la part d'ovh, qui récapitule les bounces et qui a invariablement cette forme (dans le body du msg) :

Code : Tout sélectionner

Errors for mondomain.com Date : 2012-04-06 Email : [email protected] Errors : 1 Message : Remote host said: 550 Requested action not taken: mailbox unavailable Giving up on 65.xx.xx.88. Email : [email protected] Errors : 1 Message : Remote host said: 550 5.1.1 Adresse d au moins un destinataire invalide. Invalid recipient. OFR416 416 Giving up on 80.xx.xxx.9. Email : [email protected] Errors : 1 Message : Remote host said: 550 5.1.1 Adresse d au moins un destinataire invalide. Invalid recipient. LPN416 416 Giving up on 193.xxx.xxx.113. Email : [email protected] Errors : 1 Message : Reporting-MTA: dnsBAYx-MCx-Fx.Bayx.hotmail.com Received-From-MTA: dns75.mail-out.ovh.net Arrival-Date: Thu 5 Apr 2012 10:01:09 -0700 Final-Recipient: [email protected] Action: failed Status: 5.2.2 Diagnostic-Code: smtp552 5.2.2 This message is larger than the current system limit or the recipients mailbox is full. Create a shorter message body or remove attachments and try sending it again.
Donc j'ai un "bloc" par destinataire en échec, qui a toujours cette forme : 1ère ligne (Email : ...) + retour ligne + 2ème ligne (Errors : ...) + retour ligne + 3ème ligne (Message : ...)

Chaque "bloc" est séparé par un double retour ligne ou retour chariot ou je ne sais quoi (1 "bloc" = 1 paragraphe, en gros !)

Je récupère le mail d'ovh sur ma boîte [email protected] via les diverses fonctions imap de php, et j 'ai aussi réussi à isoler le body qui m'intéresse (donc cette partie avec tous ces "blocs" les uns à la suite des autres) grâce à la fonction php imap_fetchbody().

J'ai prévu d'isoler chaque adresse email en échec avec son code/motif d'erreur grâce à la recherche d'expressions régulières (pregmatch), et de mettre tout ça dans ma bdd pour pouvoir traiter, dans mon CMS, ces bounces et au besoin nettoyer et donc optimiser ma liste d'abonnés. Mais avant d'isoler ces contenus significatifs de chaque "bloc", je dois d'abord récupérer ces derniers un par un.

Et ce qui m'empêche de continuer actuellement, c'est justement mon incapacité à récupérer tous ces blocs, les uns à la suite des autres, de façon à les isoler et à en stocker le contenu. Vous voyez ce que je veux dire ?

Donc si qqun pouvait me faire profiter de ses lumières ou retour d'expérience, ça sera bien sympa !

Merci bcp @+