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 :

Trier des adresses e-mail


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 115
    Points : 70
    Points
    70
    Par défaut Trier des adresses e-mail
    Bonjour, voila une paire d'heure que je bloque sur cette simple fonction qui me donne du soucis.

    Afin d'optimiser un envoie de mail, j'avais pour objectif de trier les adresses avec un petit outil.
    Je créé donc une fonction qui s'occupe du sale boulot.

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    function VerifierAdresseMail($adresse) 
    { 
       if(filter_var($adresse, FILTER_VALIDATE_EMAIL))
        {
    		//On récupere le nom de domaine
    		$domaine = explode("@",$adresse);
    		//Si il n'est pas vide
    		if ((!empty($domaine[0])) and (!empty($domaine[1])))
    			{
    				if (Filtre_Nbr($domaine[0]) < 4)
    				{
    					if (Filtre_Nbr($domaine[1]) < 4)
    					{
    						if (strlen($domaine[0]) >= 3)
    						{
    							if (strlen($domaine[1]) >= 4)
    							{
    								if (($domaine[0]{0} != '.') and ($domaine[0]{0} != '-') and ($domaine[0]{0} != '_') and ($domaine[0]{strlen($domaine[0])} != '.') and ($domaine[0]{strlen($domaine[0])} != '-') and ($domaine[0]{strlen($domaine[0])} != '_'))
    								{
    									//On ouvre le fichier, si cela échoue, on affiche une erreur
    									if (!$fp2 = fopen('Memoire/domain_whitelist.txt',"r")) {
    										$_POST['logarea'] .= "Echec de l'ouverture du fichier";
    									} else {
    									//Sinon, on parcourt le fichier white list
    										$alpha = 'notmatch';
    										while(!feof($fp2)) 
    										{
    											// On récupère une ligne
    											$Ligne2 = fgets($fp2,255);
    											//On compare chaque ligne à chaque domaine
    											if (trim($domaine[1]) == trim($Ligne2))
    											{
    												//Si elles correspondent, on tague le domaine comme ok
    												$alpha = 'match';
    											}
    										}
    										fclose($fp2); // On ferme le fichier
    										//Si le domaine n'était pas dans la white liste, on ouvre la black list
    										if ($alpha == 'notmatch')
    										{
    											if (!$fp3 = fopen('Memoire/domain_blacklist.txt',"r")) {
    												$_POST['logarea'] .= "Echec de l'ouverture du fichier";
    											} else {
    												//On marque une variable no comme repere
    												$bl = 'no';
    												while(!feof($fp3)) 
    												{
    													// On récupère une ligne
    													$Ligne3 = fgets($fp3,255);
    													if (trim($domaine[1]) == trim($Ligne3))
    													{
    														//Si on rencontre le domaine dans la black list on change le tag à yes
    														$bl = 'yes';
    													}
    												}
    												//Si le tag est à yes alors on a une mauvaise adresse
    											fclose($fp3); // On ferme le fichier
    											if ($bl == 'yes')
    												{
    													$alpha = 'notmatch';
    												} else
    												{
    													//Si il vaut no c'est que le domaine n'a encore jamais été rencontré, on va devoir le vérifier
     													if(checkdnsrr(strtolower(trim($domaine[1])),'A'))
    														{
    															//Si il est ok
    															$fichier1=fopen('Memoire/domain_whitelist.txt', 'a+');
    															fwrite($fichier1,trim($domaine[1])." \n");
    															fclose ($fichier1);
    															$alpha = 'match';
    															$fichier3=fopen('Memoire/temoins.txt', 'a+');
    															fwrite($fichier3,trim($domaine[0]).' @ '.trim($domaine[1])." DNS validé \n");
    															fclose ($fichier3);
    															usleep(1500000);
    														} else {
    															//Sinon on note que c'est une erreur
    															$fichier2=fopen('Memoire/domain_blacklist.txt', 'a+');
    															fwrite($fichier2,trim($domaine[1])." \n");
    															fclose ($fichier2);
    															$alpha = 'notmatch';
    															$fichier3=fopen('Memoire/temoins.txt', 'a+');
    															fwrite($fichier3,trim($domaine[0]).' @ '.trim($domaine[1])." DNS invalidé \n");
    															fclose ($fichier3);
    															usleep(1500000);
    														} 													
    												}
     
    											}											
    										} else {
    										$alpha = 'match';
    										}
    									}
    								} else 
    								{
    								$alpha = 'notmatch';
    								}
    							} else 
    							{
    							$alpha = 'notmatch';
    							}								
    						} else 
    						{
    						$alpha = 'notmatch';
    						}
    					} else 
    					{
    					$alpha = 'notmatch';
    					}
    				} else 
    				{
    				$alpha = 'notmatch';
    				} 
    			} else 
    			{
    			$alpha = 'notmatch';
    			}	
    	}
        else 
        {
    	$alpha = 'notmatch';
     	}
    return $alpha;
    }
    Ma fonction fait diverses vérifications simple sur la syntaxe, la longueur des chaines, ensuite elle vérifie le domaine, en le comparant aux domaines déja rencontrés, ou en testant avec checkdnsrr si ce n'est pas le cas, et en enregistrant le résultat.

    Si la fonction retourne match, l'adresse a passé le test avec succès, si elle retourne nomatch, l'adresse part à la poubelle.


    J'ai testé mon bazar, ça à l'air de fonctionner correctement, mais sans prévenir, mon script s'arrête soudainement, sans message d'erreur, sans afficher le reste de la page...

    Quelque chose vous saute aux yeux?

    Cordialement

  2. #2
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Je ne sais pas si tu as résolu le problême... Entre temps, je me suis intéressé à cette fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $domaine[0]{0}
    // Je ne savais pas que nous pouvions faire comme ça...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $_POST['logarea'] .= "...";
    // La concaténation est-elle vraiment necessaire ?
    Que fait la fonction Filtre_Nbr exactemment ?

    Sinon, comme tu dis, ça fonctionne correctemment.

    Pourrais-tu tester avec ce 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
    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
    72
     
    function VerifierAdresseMail($adresse){
    	$dirname=dirname(__FILE__).DIRECTORY_SEPARATOR.'Memoire'.DIRECTORY_SEPARATOR;
    	$alpha='notmatch';
    	$adresse=trim($adresse);
    	if(filter_var($adresse,FILTER_VALIDATE_EMAIL)){
    		$tab=explode('@',$adresse);
    		list($compte,$domaine)=$tab;
    		$compte=trim($compte);		// On récupère le compte
    		$domaine=trim($domaine);	// On récupere le domaine
    		if((!empty($compte))and(!empty($domaine))){
    			if((Filtre_Nbr($compte)<4)and(Filtre_Nbr($domaine)<4)){
    				if((strlen($compte)>=3)and(strlen($domaine)>=4)and(!@preg_match('/^[._-]|[._-]$/',$compte))){
    					if($fichier=@fopen($dirname.'domain_whitelist.txt','r')){
    						// On parcourt le fichier white list
    						while(!feof($fichier)){
    							$Ligne=fgets($fichier,255);
    							if($domaine==trim($Ligne)){
    								$alpha='match'; // Si elles correspondent, on tague le domaine comme ok
    								break;
    							}
    						}
    						fclose($fichier);
    						if($alpha=='notmatch'){
    							// Si le domaine n'était pas dans la white liste, on ouvre la black list
    							if($fichier=@fopen($dirname.'domain_blacklist.txt','r')){
    								$bl='no'; // On marque une variable no comme repere
    								while(!feof($fichier)){
    									$Ligne=fgets($fichier,255);
    									if($domaine==trim($Ligne)){
    										$bl='yes'; //Si on rencontre le domaine dans la black list on change le tag à yes
    										break;
    									}
    								}
    								fclose($fichier);
    								//Si le tag est à yes alors on passe, sinon...
    								if($bl=='no'){
    									// Domaine jamais rencontré, on vérifie
    									$f=(checkdnsrr(strtolower($domaine),'A'));
    									if($f){
    										// Domaine Ok
    										$fichier=fopen($dirname.'domain_whitelist.txt','a+');
    										$alpha='match';
    									}else {
    										// Domaine Ko
    										$fichier=fopen($dirname.'domain_blacklist.txt','a+');
    									}
    									fwrite($fichier,$domaine."\n");
    									fclose($fichier);
    									$fichier=fopen($dirname.'temoins.txt', 'a+');
    									if($f)
    										fwrite($fichier,$compte.' @ '.$domaine." DNS validé\n");
    									else
    										fwrite($fichier,$compte.' @ '.$domaine." DNS invalidé\n");
    									fclose($fichier);
    									usleep(1500000);
    								}
    							}
    							else {
    								$_POST['logarea'] .= "Echec de l'ouverture du fichier"; // blacklist (lecture)
    							}
    						}
    					}
    					else {
    						$_POST['logarea'] .= "Echec de l'ouverture du fichier"; // whitelist (lecture)
    					}
    				}
    			}
    		}
    	}
    	return $alpha;
    }

Discussions similaires

  1. Comparer et trier des adresses Internet
    Par rambc dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 15/03/2009, 18h44
  2. [Mail] Validation des adresses e-mail
    Par orphen dans le forum Langage
    Réponses: 1
    Dernier message: 09/02/2008, 15h08
  3. Trier des adresses IP
    Par blacksnake dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 16/06/2007, 11h54
  4. comment supprimer des adresses e-mail?
    Par eleanario55 dans le forum Dépannage et Assistance
    Réponses: 3
    Dernier message: 08/09/2006, 16h13

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