Extraire liste de mails

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 : Extraire liste de mails

Re: Extraire liste de mails

par stealth35 » 03 juin 2010, 10:24

GRR tu m'énerves mais je t'aime bien va ;)

MERCI
:love1:

mais bon le regexp du mail c'est plus compliquer d'hab je récupére celui de la [urlhttp://svn.php.net/repository/php/php-src/branches/PHP_5_3/ext/filter/logical_filters.c]source[/url] (ligne 525) de FILTER_VALIDATE_EMAIL, mais ca me fait planter mon serveur depuis un moment (avant ca marchais nickel) va savoir...

Re: Extraire liste de mails

par lacfab » 03 juin 2010, 06:56

GRR tu m'énerves mais je t'aime bien va ;)

MERCI

Re: Extraire liste de mails

par stealth35 » 01 juin 2010, 09:44

c'est par ce que i lest pas bon le regexp, t'as le ^ au début et le $ a la fin, ca veux dire que ca va marcher uniquement si la chaine entière correspond

juste ca ca suffit
$str = "[email protected]; [email protected]; [email protected]; [email protected]; [email protected]; OULALAAAA [email protected]; [email protected]; TURLUTUTU [email protected]; ";
$reg = '/(?:[\w-\.]+)@(?:(?:[\w]+\.)+)(?:[a-zA-Z]{2,})/i';
	
preg_match_all($reg, $str, $matches);
$emails = array_unique($matches[0]);
	
print_r($emails);

Re: Extraire liste de mails

par lacfab » 01 juin 2010, 06:22

oui mais nan en fait ^^

A chaque fois page vierge ... pourtant ça me paraît bon ! Je n'ai jamais eu de résultat, bien qu'en testant plusieurs regexp (comme /^(([^<>()[\]\\.,;:\s@"\']+(\.[^<>()[\]\\.,;:\s@"\']+)*)|("[^"\']+"))@((\[\d' .
'{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])|(([a-zA-Z\d\-]+\.)+[a-zA-Z]{2,}))$/ )
function extraire($machaine) {
            if(false !== preg_match_all('`^[[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])+\.([a-z]{2,4})$`', $machaine, $liste)) {
                if(is_array($liste[1]) && !empty($liste[1])) {
                    return array_unique($liste[1]);
	        	}
            }
            return null;
        }
		
		$mmm = "[email protected]; [email protected]; [email protected]; [email protected]; [email protected]; OULALAAAA [email protected]; [email protected]; TURLUTUTU [email protected]; ";
		
        $laliste = extraire($mmm);
		
        //$laliste = extraire($_POST['listedemails']);
		
		echo '<pre>';
        print_r($laliste);
        echo'</pre>';
		
		for ($i = 0; $i < $total; $i++){
   echo '<br>'. $liste[$i];
}

Re: Extraire liste de mails

par stealth35 » 31 mai 2010, 10:12

Argh je n'y arrive pas ... soit il affiche rien, soit il me fait n'importe quoi snif.
trouve le regexp (partout sur google) du mail, après ca va allé vite :wink:

Re: Extraire liste de mails

par lacfab » 28 mai 2010, 06:42

Argh je n'y arrive pas ... soit il affiche rien, soit il me fait n'importe quoi snif.

Re: Extraire liste de mails

par lacfab » 22 mai 2010, 07:41

Petit UP !

Pour un autre site je dois lister des mails encore une fois à la différence que ces mails ne sont plus triés dans un rapport mais en vrac complet. J'essaie de faire une expression régulière qui me sortirait une liste (un mail par ligne) en faisant une recherche sur @ mais je n'y parviens pas. Après des recherches en ligne je ne trouve pas de portions de script capable de m'aider (pourtant je pensais que ça serait facilement trouvable).

Exemple de liste :
[email protected]; BOZO LEclown ([email protected]); [email protected];
Pour en faire :
[email protected]
[email protected]
[email protected]
Le but étant après de générer une liste, ou encore lancer une requête SQL en boucle ....

Un tuyau ?

Re: Extraire liste de mails

par lacfab » 26 janv. 2010, 17:51

Merci beaucoup :)

Re: Extraire liste de mails

par stealth35 » 26 janv. 2010, 17:49

if(is_array($liste[1]) && !empty($liste[1])) {
        return array_unique($liste[1]);
}

Re: Extraire liste de mails

par lacfab » 26 janv. 2010, 17:26

Super !
par contre le résultat affiche "Email : XXX" comment faire pour qu'il ne me l'affiche pas ?

Code : Tout sélectionner

<?php function extraire($machaine) { if(false !== preg_match_all('/Email : (.*)/', $machaine, $liste)) { if(is_array($liste[0]) && sizeof($liste[0])>0) { return array_unique($liste[0]); } } return null; } $machaine = 'Date : 2010-01-24 Email : [email protected] Errors : 1 Message : Remote host said: 550 Requested action not taken: mailbox unavailable Giving up on 65.55.92.184. Email : [email protected] Errors : 1 Message : Remote host said: 550 5.2.1 This mailbox has been blocked due to inactivity Giving up on 212.27.48.7. Email : [email protected] Errors : 1 Message : Remote host said: 550 5.2.2 user quota exceeded Giving up on 212.27.48.6. Email : [email protected] Errors : 1 Message : Remote host said: 550 5.2.1 This mailbox has been blocked due to inactivity Giving up on 212.27.48.7. Email : [email protected] Errors : 1 Message : Remote host said: 550 5.1.1 <[email protected]>: Recipient address rejected: aol.com Giving up on 205.188.59.194. Email : [email protected] Errors : 1 Message : Remote host said: 550 5.1.1 <[email protected]>: Recipient address rejected: aol.com Giving up on 205.188.146.194. Email : [email protected] Errors : 1 Message : Remote host said: 550 5.1.1 <[email protected]>: Recipient address rejected: User unknown Giving up on 80.12.242.15.'; $liste = extraire($machaine); echo '<pre>'; print_r($liste); echo'</pre>'; $total = sizeof($liste); echo 'nombre de résultats : '.$total; for ($i = 0; $i < $total; $i++){ echo '<br>'. $liste[$i]; } ?>

RESULTAT :
Array
(
    [0] => Email : [email protected]
    [1] => Email : [email protected]
    [2] => Email : [email protected]
    [3] => Email : [email protected]
    [4] => Email : [email protected]
    [5] => Email : [email protected]
    [6] => Email : [email protected]
)

nombre de résultats : 7
Email : [email protected]
Email : [email protected]
Email : [email protected]
Email : [email protected]
Email : [email protected]
Email : [email protected]
Email : [email protected]

Re: Extraire liste de mails

par stealth35 » 26 janv. 2010, 17:04

preg_match_all('/Email : (.*)/', $file, $matches);	
print_r(array_unique($matches[1]));
pourquoi : /Email : (.*)/

parce que le regexp d'un mail étant beaucoup plus compliquer

Re: Extraire liste de mails

par lacfab » 26 janv. 2010, 16:39

ça marche po ... je fais quoi de pas bien ?
Il m'affiche "cool : Array" à chaque ligne.

Code : Tout sélectionner

$total = sizeof($liste); echo 'nombre de résultats : '.$total; for ($i = 1; $i <= $total; $i++){ echo '<br>cool :'. array($i); }

Re: Extraire liste de mails

par lacfab » 26 janv. 2010, 15:58

J'arrive à sortir les éléments de ma chaine, il ne me reste plus qu'à générer une requête par résultat (avec un for ?)

EDIT : code et résultat supprimé car faut ... voir plus bas

Re: Extraire liste de mails

par Ryle » 25 janv. 2010, 22:28

Il te faut parcourir ton rapport à la recherche des adresses mails. Tu peux faire cela assez facilement grace à la fonction preg_match_all() et une expression régulière (vu ton rapport, elle ne devrait pas être très compliqué à écrire).

Cela te permettra de générer un tableau contenant tes adresses mail en erreur. Tu peux ensuite utiliser array_unique() pour supprimer les doublons.

Enfin, il ne te restera plus qu'à parcourir ton tableau de mail pour les supprimer directement en base ou pour générer tes requêtes en fonction de ton besoin :)

Extraire liste de mails

par lacfab » 25 janv. 2010, 10:06

Salutations :)

Voilà lorsque j'envoie une newsletter de mon site, je reçois un rapport d'erreur pour tous les mails pas bons. Je voudrais faire un script qui me ressort ces adresses mails pour en créer une liste de requete SQL pour supprimer ces emails de ma liste.
J'aurais donc un textarea ou je copierai mon rapport complet, et après valdiation il m'afficherait une liste DELETE FROM table WHERE email="blabla";

Voici un exemple de message d'erreur :
Date : 2010-01-24

Email : [email protected]
Errors : 1
Message : Remote host said: 550 Requested action not taken: mailbox unavailable Giving up on 65.55.92.184.

Email : [email protected]
Errors : 1
Message : Remote host said: 550 5.2.1 This mailbox has been blocked due to inactivity Giving up on 212.27.48.7.

Email : [email protected]
Errors : 1
Message : Remote host said: 550 5.2.2 user quota exceeded Giving up on 212.27.48.6.

Email : [email protected]
Errors : 1
Message : Remote host said: 550 5.2.1 This mailbox has been blocked due to inactivity Giving up on 212.27.48.7.

Email : [email protected]
Errors : 1
Message : Remote host said: 550 5.1.1 <[email protected]>: Recipient address rejected: aol.com Giving up on 205.188.59.194.

Email : [email protected]
Errors : 1
Message : Remote host said: 550 5.1.1 <[email protected]>: Recipient address rejected: aol.com Giving up on 205.188.146.194.

Email : [email protected]
Errors : 1
Message : Remote host said: 550 5.1.1 <[email protected]>: Recipient address rejected: User unknown Giving up on 80.12.242.15.

etc
En option si le script peut ne pas mettre deux fois le même mail ça serait top car parfois le mail est repris dans le message d'erreur comme à la fin de mon exemple.

Comment puis-je procéder ?
Merci