A veces nos encontramos con listas de correos bastantes extensas, pero ese no es el problema, sino el gran desorden de éstas; algunas tienen correos repetidos, otras correos inválidos, inclusive hasta espacios en blanco.
Para eso -y creo que para la comodidad de muchos- he creado un script en PHP el cual se encarga de organizar dichas listas de manera rápida, personalizada y sencilla.
Esta herramienta está aún en fase BETA por lo que algunos manejos de errores no están en el script; alguno de ellos puede ser, por ejemplo, que si metes datos que no son correos electrónicos, tál vez te “parsee” bien la información, pero el resto del procesamiento no será adecuado. Por el momento consta de 5 opciones:
Remover repetidos:
Elimina los correos inválidos, mal escritos o repetidos.
Partir:
Parte en listas la lista príncipal de correos; en caso de ser “Sí”, en “Núm. de listas” elegir el número de listas a crear.
Mostrar resultado:
Muestra el resultado en dos opciones:
Todos: Muestra los correos ordenados alfabéticamente.
Por Dominio: Muestra los correos ordenados alfabéticamente y por dominio de correo (hotmail, yahoo, etc).
El script se puede mejorar bastante, pero es funcional:
[php]< !DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Mail Parser V1 – http://xt3mp.mx</title>
< ?php
class mailParserv1
{
var $mails;
var $realMails;
var $nonparsedMails;
var $correctMails;
var $wrongMails;
var $domainMails;
public function __construct($mails)
{
$this->mails = $mails;
$this->nonparsedMails = You are not allowed to view links. Register or Login();
$this->correctMails = You are not allowed to view links. Register or Login();
$this->wrongMails = You are not allowed to view links. Register or Login();
$this->domainMails = You are not allowed to view links. Register or Login();
}
public function parseMails()
{
$eachMail = You are not allowed to view links. Register or Login("\r\n", $this->mails);
foreach($eachMail as $mail)
{
if(!You are not allowed to view links. Register or Login($mail))
$this->nonparsedMails[] = You are not allowed to view links. Register or Login(You are not allowed to view links. Register or Login($mail));
}
}
public function removeRepeatmails()
{
foreach($this->nonparsedMails as $mail)
{
if(!You are not allowed to view links. Register or Login($mail, $this->correctMails) && !You are not allowed to view links. Register or Login($mail) && !You are not allowed to view links. Register or Login($mail, FILTER_VALIDATE_EMAIL))
{
$this->correctMails[] = $mail;
}
else
{
$this->wrongMails[] = $mail;
}
}
return true;
}
public function checkMails()
{
$realMails = (You are not allowed to view links. Register or Login($this->nonparsedMails)) ? $this->correctMails : $this->nonparsedMails;
if(You are not allowed to view links. Register or Login($realMails))
return false;
else
return true;
}
private function domainMails()
{
$realMails = (You are not allowed to view links. Register or Login($this->nonparsedMails)) ? $this->correctMails : $this->nonparsedMails;
foreach($realMails as $mail)
{
$eachMail = You are not allowed to view links. Register or Login(‚@‘, $mail);
$this->domainMails[$eachMail[1]][] = $mail;
}
}
private function makeWrongMailsFile()
{
if(!You are not allowed to view links. Register or Login($this->wrongMails))
{
foreach($this->wrongMails as $mail)
{
$wrongMailsc .= $mail."\r\n";
}
$file = @You are not allowed to view links. Register or Login(‚xt3mp_badMailList.txt‘, ‚w+‘);
@You are not allowed to view links. Register or Login($file, $wrongMailsc);
@You are not allowed to view links. Register or Login($file);
}
}
public function checkConfig($list, $result)
{
if($list == ’no‘ && $result == ’no‘)
return false;
else
return true;
}
public function splitMails($parts)
{
$realMails = (You are not allowed to view links. Register or Login($this->nonparsedMails)) ? $this->correctMails : $this->nonparsedMails;
$totalMails = You are not allowed to view links. Register or Login($realMails);
$totalParts = You are not allowed to view links. Register or Login($totalMails / $parts);
for($i = 1; $i < = $parts; $i++)
{
$next = $i * $totalParts;
$prev = ($i – 1) * $totalParts;
for($x = $prev; $x < $next; $x++)
{
$newMailList .= $realMails[$x]."\r\n";
}
$file = @You are not allowed to view links. Register or Login(‚Xt3mP_mailList_‘.$i.‘.txt‘, ‚w+‘);
if($file)
{
@You are not allowed to view links. Register or Login($file, $newMailList);
@You are not allowed to view links. Register or Login($file);
You are not allowed to view links. Register or Login($newMailList);
$status = true;
}
else
$status = false;
}
$this->makeWrongMailsFile();
return $status;
}
public function printMails($type)
{
$this->domainMails();
if($type == ‚all‘)
{
$realMails = (You are not allowed to view links. Register or Login($this->nonparsedMails)) ? $this->correctMails : $this->nonparsedMails;
You are not allowed to view links. Register or Login($realMails);
$textArea = ‚<textarea rows="10" cols="50" class="result">‘;
foreach($realMails as $mail)
{
$textArea .= You are not allowed to view links. Register or Login($mail)."\r\n";
}
$textArea .= ‚</textarea>‘;
echo $textArea;
}
else
{
foreach($this->domainMails as $te => $domain)
{
You are not allowed to view links. Register or Login($domain);
$textArea .= ‚<textarea rows="10" cols="50" class="result">‘;
foreach($domain as $mail)
{
$textArea .= You are not allowed to view links. Register or Login($mail)."\r\n";
}
$textArea .= ‚</textarea>‘;
}
echo $textArea;
}
return true;
}
}
?>
<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script>
$(function(){
$("#result").change(function(){
val = $(this).val();
if(val == "yes"){
$(".result").fadeIn("slow");
}else{
$(".result").fadeOut("slow");
}
})
$("#list").change(function(){
val = $(this).val();
if(val == "yes"){
$(".list").fadeIn("slow");
}else{
$(".list").fadeOut("slow");
}
})
})
</script>
<style type="text/css">
body{
background-color: #2b2b2b;
}
div#container{
height: auto;
font-family: arial, ‚lucida console‘, sans-serif;
font-size: 12px;
margin: 0 auto;
text-shadow: 1px 1px 1px #000;
width: 500px;
}
div#container fieldset{
background-color: #444;
border: double #000;
color: #FFF;
padding: 5px;
}
div#container legend{
background-color: #222;
border: double #000;
color: #FFF;
padding: 5px;
}
div#container input, div#container select, div#container textarea{
background-color: #222;
border: 1px solid #000;
color: #FFF;
padding: 5px;
width: 74%;
}
div#container input, div#container textarea{width: 72%;}
div#container input[type=submit]{width: 100px;}
div#container input[type=submit]:hover{
cursor: pointer;
background-color: #444;
}
div#container textarea.result
{
width: 98%;
}
div#container label{
float: left;
height: 20px;
text-align: right;
margin: 6px 1px 0 0;
width: 25%;
}
div#status .error, div#status .success{
background-color: #FF7373;
border: 1px dashed #FF0000;
margin-top: 5px;
padding: 5px;
}
div#status .success{
background-color: #49A349;
border: 1px dashed #002E00;
}
</style>
</head>
<body>
<div id="container">
<form action="" method="POST">
<fieldset>
<legend>Mail Parser v1.0 | http://xt3mp.mx > [email protected]</legend>
<label>Remover repetidos:</label><select name="remove"><option value="yes">Sí</option><option value="no">No</option></select>
<label>Partir:</label><select id="list" name="list"><option value="yes">Sí</option><option value="no">No</option></select>
<div class="list">
<label>Núm. de listas:</label><input type="text" name="parts" value="0" size="5" />
</div>
<label>Mostrar resultado:</label><select id="result" name="result"><option value="no">No</option><option value="yes">Sí</option></select>
<div class="result" style="display: none;">
<label>Formato:</label><select name="format"><option value="all">Todos</option><option value="domain">Por dominio</option></select>
</div>
<label>Lista:</label><textarea name="mailList" rows="10" cols="50"></textarea><br />
<label> </label><input type="submit" name="mailParserv1" value="Parse Mails" />
<div id="status">
< ?php
$class = ‚error‘;
if(You are not allowed to view links. Register or Login($_POST[‚mailParserv1‘]))
{
$mailParser = new mailParserv1($_POST[‚mailList‘]);
$mailParser->parseMails();
if(!$mailParser->checkConfig($_POST[‚list‘], $_POST[‚result‘]))
{
echo ‚<div class="‘.$class.’">Error: 0x01 > Bad config</div>‘;
}
elseif($_POST[‚remove‘] == ‚yes‘ && !$mailParser->removeRepeatmails())
{
echo ‚<div class="‘.$class.’">Error: 0x02 > Can\’t remove repeated mails</div>‘;
}
elseif($_POST[‚result‘] == ‚yes‘ && $_POST[‚format‘] == ‚all‘ && !$mailParser->checkMails())
{
echo ‚<div class="‘.$class.’">Error: 0x03 > Empty var: correct mails</div>‘;
}
elseif($_POST[‚list‘] == ‚yes‘ && ($_POST[‚parts‘] == 0 or !You are not allowed to view links. Register or Login($_POST[‚parts‘]) or !$mailParser->splitMails($_POST[‚parts‘])))
{
echo ‚<div class="‘.$class.’">Error: 0x04 > Can\’t make lists</div>‘;
}
else{
$class = ’success‘;
$next = true;
echo ‚<div class="‘.$class.’">Success: 0x01 > Parsed Mails Successful</div>‘;
}
if($next)
{
$class = ‚error‘;
if($_POST[‚result‘] == ‚yes‘ && $_POST[‚format‘] == ‚all‘ && !$mailParser->printMails(‚all‘))
{
echo ‚<div class="‘.$class.’">Error: 0x05 > Can\’t show mails > Format: All</div>‘;
}
elseif($_POST[‚result‘] == ‚yes‘ && $_POST[‚format‘] == ‚domain‘ && !$mailParser->printMails(‚domains‘))
{
echo ‚<div class="‘.$class.’">Error: 0x05 > Can\’t show mails > Format: Domains</div>‘;
}
elseif($_POST[‚result‘] == ‚yes‘)
{
$class = ’success‘;
echo ‚<div class="‘.$class.’">Success: 0x02 > Mails Showed Successful</div>‘;
}
}
}
?>
</div>
</fieldset></form>
</div>
</body>
</html>[/php]
Algunas de las cosas que omití al agregarle son: mostrar el número de correos ingresados (basta con hacer un echo count($eachMail) en la función parseMails() de la clase), mostrar cantidad de correos por lista (en caso de que se decidan crear), etc.
Los errores que maneje son los siguientes:
Errors
0×01: No se puede elegir NO partir y NO mostrar resultados; al menos una de las dos debe ser sí, si no no tendría caso usar el script.
0×02: Error interno al intentar remover y validar los correos ingresados (en caso de opción).
0×03:Error interno al intentar recuperar los correos ingresados.
0×04:Error interno al intentar crear las listas (en caso de opción).
0×05: Error interno al intentar mostrar los correos (en caso de opción).
Success
0×01: Correos procesados correctamente.
0×02: Correos mostrados correctamente (en caso de opción).