Foros del Web » Programando para Internet » PHP »

PHP OO Clase para mandar mails

Estas en el tema de Clase para mandar mails en el foro de PHP en Foros del Web. Estoy intentando hacer una pequeña clase para mandar correos, estoy atorado :( porque primero debo confirmar que los mails sean validos y cuales no! @import ...
  #1 (permalink)  
Antiguo 06/09/2011, 10:20
Avatar de BaByRoDrI  
Fecha de Ingreso: julio-2009
Ubicación: Mexico
Mensajes: 60
Antigüedad: 15 años, 5 meses
Puntos: 1
Pregunta Clase para mandar mails

Estoy intentando hacer una pequeña clase para mandar correos, estoy atorado :( porque primero debo confirmar que los mails sean validos y cuales no!

Código PHP:
Ver original
  1. <form action="" method="post" >
  2.     <label>Asunto:</label><br />
  3.     <input type="text" name="subject" /><br />
  4.     <label>Mensaje:</label><br />
  5.     <textarea name="msg" cols="50" rows="15"></textarea><br />
  6.     <label>De:</label><br />
  7.     <input type="text" name="from" /><br />
  8.     <label>Lista de correos:</label><br />
  9.     <textarea name="text" cols="50" rows="15"></textarea><br />
  10.     <input type="submit" value="Enviar" />
  11. </form>
  12.  
  13. <?php
  14.  
  15.     $enviar = new mail;
  16.     $enviar->debug($_POST['text']);
  17.  
  18. class mail {
  19.  
  20.     function debug($texto) {
  21.    
  22.         if (!empty($texto)) {
  23.        
  24.             foreach($texto as $mails) {
  25.            
  26.                 if (filter_var_array($mails, FILTER_VALIDATE_EMAIL)) {
  27.                
  28.                     echo $mail." VALIDO";
  29.                     return $mail;
  30.                    
  31.                 } else {
  32.                
  33.                     echo $mail." INVALIDO";
  34.                 }
  35.             }
  36.         }
  37.     }
  38.    
  39.    
  40.     function enviar($texto, $subject, $msg, $from) {
  41.    
  42.         $mails = $this->debug($texto);
  43.        
  44.         foreach(array_unique($mails[0]) as $to) {
  45.        
  46.             if(@mail($to, $subject, $msg, "From: ". $from)) {
  47.                
  48.                 echo $to." OK<br />";
  49.                
  50.             } else {
  51.            
  52.                 echo $to." FAIL<br />";
  53.             }
  54.         }
  55.     }
  56. }
  57.  
  58. ?>
  #2 (permalink)  
Antiguo 06/09/2011, 11:20
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 14 años
Puntos: 51
Respuesta: Clase para mandar mails

Te paso un ejemplo de como validar los emails:

$email = "clifton@example";

if(filter_var($email, FILTER_VALIDATE_EMAIL)){
//valido
}else{
//no valido
}

También podés usar expresiones regulares, aunque creo que esta es la mejor forma.

( Tomado de php.net )

http://php.net/manual/en/filter.filters.validate.php
  #3 (permalink)  
Antiguo 06/09/2011, 11:34
Avatar de BaByRoDrI  
Fecha de Ingreso: julio-2009
Ubicación: Mexico
Mensajes: 60
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Clase para mandar mails

He modificado el script y me quedo así:

Código PHP:
Ver original
  1. <form action="" method="post" >
  2.     <label>Asunto:</label><br />
  3.     <input type="text" name="subject" /><br />
  4.     <label>Mensaje:</label><br />
  5.     <textarea name="msg" cols="50" rows="15"></textarea><br />
  6.     <label>De:</label><br />
  7.     <input type="text" name="from" /><br />
  8.     <label>Lista de correos:</label><br />
  9.     <textarea name="text" cols="50" rows="15"></textarea><br />
  10.     <input type="submit" value="Enviar" />
  11. </form>
  12.  
  13. <?php
  14.  
  15.     $enviar = new mail;
  16.     $enviar->enviar($_POST['text'], $_POST['subject'], $_POST['msg'], $_POST['from']);
  17.  
  18. class mail {
  19.  
  20.    
  21.     function enviar($correos, $asunto, $msg, $from) {
  22.  
  23.         $mails = explode("\n", $correos);
  24.        
  25.         foreach($mails as $mail) {
  26.        
  27.             if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {
  28.            
  29.                 if (mail($mail, $asunto, $msg, $from)) {
  30.                
  31.                     echo $mail." OK<br />";
  32.                
  33.                 } else {
  34.                
  35.                     echo $mail." ERROR<br />";
  36.                    
  37.                 }
  38.             } else {
  39.            
  40.                 echo $mail." INVALIDO<br />";
  41.                
  42.             }
  43.         }
  44.        
  45.     }
  46.    
  47. } ?>

Lamentablemente hago la prueba con los siguientes correos:

Y me da el siguiente resultado:

Código:
[email protected] INVALIDO
[email protected] INVALIDO
[email protected] INVALIDO
rodrigo@invalido INVALIDO
  #4 (permalink)  
Antiguo 06/09/2011, 11:40
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: Clase para mandar mails

tu problema viene desde aquí

$mails = explode("\n", $correos);

revisa esa línea. Saludos
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 06/09/2011, 11:41
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 14 años
Puntos: 51
Respuesta: Clase para mandar mails

Probá modificando esto:

Código PHP:
Ver original
  1. if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {

por esto:

Código PHP:
Ver original
  1. if(filter_var(trim($mail), FILTER_VALIDATE_EMAIL)) {
  #6 (permalink)  
Antiguo 06/09/2011, 11:46
Avatar de BaByRoDrI  
Fecha de Ingreso: julio-2009
Ubicación: Mexico
Mensajes: 60
Antigüedad: 15 años, 5 meses
Puntos: 1
Pregunta Respuesta: Clase para mandar mails

Cita:
Iniciado por walterdevel Ver Mensaje
Probá modificando esto:

Código PHP:
Ver original
  1. if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {

por esto:

Código PHP:
Ver original
  1. if(filter_var(trim($mail), FILTER_VALIDATE_EMAIL)) {
Ha solucionado el problema!! :D muchisimas gracias, solo una duda, ese trim(); hizo que eliminará el \n, según entiendo yo, esto funciona así?
  #7 (permalink)  
Antiguo 06/09/2011, 11:48
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 14 años
Puntos: 51
Respuesta: Clase para mandar mails

No, el trim elimina espacios en blanco. Saludos!
  #8 (permalink)  
Antiguo 06/09/2011, 11:49
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: Clase para mandar mails

Cita:
Iniciado por walterdevel Ver Mensaje
No, el trim elimina espacios en blanco. Saludos!
No sólo espacios

Cita:
trim — Elimina espacio en blanco (u otro tipo de caracteres) del inicio y el final de la cadena

Esta función devuelve una cadena con los espacios en blanco eliminados del inicio y final del str. sin el segundo parámetro, trim() eliminará estos caracteres:

" " (ASCII 32 (0x20)), espacio simple.
"\t" (ASCII 9 (0x09)), tabulación.
"\n" (ASCII 10 (0x0A)), salto de línea.
"\r" (ASCII 13 (0x0D)), retorno de carro.
"\0" (ASCII 0 (0x00)), el byte NUL.
"\x0B" (ASCII 11 (0x0B)), tabulación vertical.
Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #9 (permalink)  
Antiguo 06/09/2011, 11:53
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 14 años
Puntos: 51
Respuesta: Clase para mandar mails

Gracias por la aclaración andres!

Etiquetas: clase, mails, mandar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:15.