Foros del Web » Programando para Internet » PHP »

Clase -> envio mails

Estas en el tema de Clase -> envio mails en el foro de PHP en Foros del Web. Rebuscaba por las FAQ's algunas cosillas cuando vi una clase para enviar mails. Pero estaba a la mitad (no se porqué) y me dije que ...
  #1 (permalink)  
Antiguo 23/02/2003, 07:09
Avatar de zarate  
Fecha de Ingreso: septiembre-2001
Ubicación: Madrid
Mensajes: 164
Antigüedad: 16 años, 3 meses
Puntos: 0
Clase -> envio mails

Rebuscaba por las FAQ's algunas cosillas cuando vi una clase para enviar mails. Pero estaba a la mitad (no se porqué) y me dije que sería una buena forma de empezar a programar mis propias clases.

En ello estoy. En principio la clase ha de ser muy simple. Empezó funcionando (o por lo menos en apariencia), pero cuando quise habilitar el envio de varios mails se cayó al abismo.

Lo que quiero es que al instanciar la clase, con arrays declarar los destinos, remitentes y demás datos que se necesitan para el envío, aquí teneis el código:

Clase:

<?php
class correo{

// declaramos variables
array $asunto;
array $cuerpo;
array $remite;
array $destino;
var $estado;

function enviar(){

for($i=0; $i<count($asunto) $i++){ // recorremos los arrays para el envio

if(@mail($destino[$i],$asunto[$i],$cuerpo[$i],"From: $remite[$i]\nContent-Type: text/html; charset=iso-8859-1")){ // envio ok
$this->estado = "ok";
} else { // envio ko
$this->estado = "ko";
}// end if

} // end for

} // end function

} // end class
?>

En la página:

<?php

include("class.correo.php");

$xuan = new correo();
$xuan->asunto = ("Eres el destinatario", "Eres el remitente"); // aqui da el primer problema
$xuan->cuerpo = ($mensaje, "Cuerpo para el remitente");
$xuan->destino = ("[email protected]", $remite);
$xuan->remite = ($remite, $xuan->destino[0]);
$xuan->enviar();

if ($xuan->estado == "ok"){
print("Como molas!!");
} else {
print("Eres lo puto peor");
}// end if

//print("<br>Asunto -> $xuan->asunto");

} // end if ?>

El trozo de la página es más largo, porque viene de un formulario, las variables llegan correctamente, el caso es que el PHP me da el siguiente error:

Parse error: parse error, unexpected ',' in C:\FoxServ\www\metros\html\comunes\prueba_correo.p hp on line 36

En fín, creo que es un problema de sintaxis, me ayudais?? GRACIAS!!
__________________
Zárate
  #2 (permalink)  
Antiguo 23/02/2003, 08:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En principio los responsables de los códigos o lo que se mencione en alguna FAQ en concreto es responsabilidad del ususario que lo puso .. Te recomendaría que te contactases con el autor de dicha FAQ y le comentases los errores q has detectado.

De paso si es un error de esa FAQ .. que se corrija.

Por cierto.. que FAQ es? (buscala en el indice de FAQ's para q la veamos .. no la encuentro )


Así por encima se observa:

for($i=0; $i<count($asunto) $i++){

le falta el ; antes de $i++ ...

Código PHP:
for($i=0$i<count($asunto); $i++){ 
Un saludo,

pd: Si fué ese el error .. please indica q FAQ's es para modificarla e informar al autor.

Y cuando pongas código PHP .. intenta usar el boton PHP a la hora de redactar el mensaje .. se verá mas claro (y coloreado) el código q pongas ..

Última edición por Cluster; 23/02/2003 a las 08:57
  #3 (permalink)  
Antiguo 23/02/2003, 09:19
Avatar de zarate  
Fecha de Ingreso: septiembre-2001
Ubicación: Madrid
Mensajes: 164
Antigüedad: 16 años, 3 meses
Puntos: 0
Este es el post:

http://www.forosdelweb.com/showthrea...777#post317777

Pero no es que tenga un fallo, simplemente que no está completa.... ya lo avisa: "Contactar con el autor para más info...", supongo que querrá llevar un control de quien la utiliza.

Simplemente me llevó a pensar que era hora de programar mis propias clases.

En cuanto al error, no es ese (que también lo era), creo que hay problema en la definición de los arrays en la clase... no me pasaba lo mismo al utilizar sólo variables simples.

P.D.: Traté de poner el código pinchando PHP, pero no me dejba pegar...
__________________
Zárate
  #4 (permalink)  
Antiguo 23/02/2003, 09:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok, si, ya se a cual te refieres ...

Yo mismo insistí al usuario que por favor incluyera el código de ese tal include() q hace por ahí .. hasta la fecha no he obtenido respuesta .. Lo intentaré una 2º vez y si no obtengo respuesta por parte del autor tendré que eliminar dicha "FAQ" incompleta hasta q se aclare el asunto y no de mas problemas a los usuarios.

Mientras tanto .. si quieres probar esta classe de envio de e-mail muyyyyy completa:

http://phpmailer.sourceforge.net

(de lo mejorcito q he visto hasta la fecha ... )

Un saludo,

pd: (la frase de "aviso" la puse yo .. en espera de q el autor se diera por aludido ..)

Lo del boton "PHP" .. pega tu código en el foro .. lo seleccionas y le das al boton "PHP" .. eso te meterá los tag [ PHP ]tucodigo[ /PHP ] .. si no lo consigues ponlo a mano .. (sin espacios entre [] ..

Última edición por Cluster; 23/02/2003 a las 09:37
  #5 (permalink)  
Antiguo 23/02/2003, 09:38
Avatar de zarate  
Fecha de Ingreso: septiembre-2001
Ubicación: Madrid
Mensajes: 164
Antigüedad: 16 años, 3 meses
Puntos: 0
Justamente estaba mirando la clase que me comentas....espectacular.

Y esto me lleva a hacerme una pregunta que a lo mejor nos desvía del post, pero ¿invierto esfuerzo y tiempo en desarrollar mis clases cuando alguien ya ha hecho algo para lo que necesito y, a priori, mejor?

El tema está en que YO QUIERO aprender de verdad, y para eso hay que empezar desde muy abajo... Si por cualquier cosa necesito cambiar una coma de una clase semejante.... es que no voy a saber, prefiero desarrollar la mia, que estará mucho más limitada, pero hará exactamente lo que necesito, ni más ni menos...

Bueno, es mi opinión. Al final me quedé como estaba, sigo haciendo pruebas pero no consigo que funcione....

PD Si la termino la publico entera
__________________
Zárate
  #6 (permalink)  
Antiguo 23/02/2003, 10:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Para este caso concreto creo q no merece la pena reinventar la rueda .. Como mucho si quieres unete a ese proyecto (es GNU) y colabora con tus mejoras o métodos nuevos.

Eso no quita que no has de aprender (en el caso de "classes" como te habras dado cuenta es programación Orientada a Objetos OOP ...)

Puedes si quieres prácticar el tema haciendote tu propia classe para tal efecto .. Es gratificatne usar lo q uno hace .. pero hay casos q ha q plantearse si vale la pena invertir tiempo en eso (partiendo de que sabes como funciona ese código por ejemplo no solo a usarlo sino a nivel de programación).

De todas formas .. usar este tipo de classes "basicas" para envio de e-mail .. de capas de abstracción de Base de datos .. de "templates" (plantillas) y algunas mas te dejan tiempo para q te centres en tu aplicación y en lo que ha de hacer y no como decia antes en "reinventar la rueda" constantemente.

Yo uso varias classes (objetos) PHP que no los he desarrollado yo .. uno de ellos es esa de mail .. tambien uso de Templates y de capas de abstraccion de BD .. Me centro en mi aplicación .. pero si llega el caso .. se donde "tocar" en la classe q uso para modificarla. Lo que no uso son aplicaciones "completas" .. si he de hacer algo me "armo" de los objetos que me hagan cierta taréa "base" q necesito ..

Por ejemplo .. en cuanto a una clase de e-mail .. hay muchasss cosas q no son realmente "PHP" .. hay mucho del tema MIME (formatos) .. de cabeceras HTTP y otros detalles q si quieres obtener el máximo rendimiento y q funcione correctamten has de estar leyendo sus protocoolos correspondientes (en sus RFC's por ejemplo). Como veras .. en este caso "sé" la teoria que conllevaría hacer una classe de este estilo .. pero por mi parte .. ahí me quedo .. se como funciona por encima y sabría donde buscar por si algo he de modificar.

Si deseas aprender .. ves prácticando haciendo tus propias cosas .. tal vez cuando tengas claro como enfrentar un proyecto de cierta envergadura y tengas claro lo que hay q hacer .. te lo vas a pensar en hacerlo tu si tienes tiempo o en usar algo bueno q exista.

De eso se trata .. cuanto mas sepas tu mejor seleccionaras las "classes" q vas a usar .. Yo he visto muchas q no me han gustado (de varios tipos) .. y no porque no cumplieran mis requisitos de uso .. sino por como estaban programadas.

Si deseas mas classes (objetos) puedes recurrir a:
http://pear.php.net
http://www.phpclasses.org

Un saludo,
  #7 (permalink)  
Antiguo 23/02/2003, 11:06
Avatar de zarate  
Fecha de Ingreso: septiembre-2001
Ubicación: Madrid
Mensajes: 164
Antigüedad: 16 años, 3 meses
Puntos: 0
Bueno, estoy bastante de acuerdo contigo en esa filosofía.... sólo que yo todavía no me veo para nada al nivel requerido de PHP, me faltan muchas horas, conceptos y sintaxis... porque llevo 2 horas y todavía no encuentro la correcta:

Código PHP:
<?php 
class correo // empieza el cachondeo

    // declaramos variables
    
var $estado;
    
    
$asunto = array("Uno""Dos");
    
$cuerpo = array("Tres""Cuatro");
    
$destino = array("[email protected]""[email protected]");
    
$remite = array("[email protected]""[email protected]");

    function 
enviar(){
        
        for(
$i=0$i<count($asunto); $i++){ // recorremos los arrays para el envio
        
            
if(@mail($destino[$i],$asunto[$i],$cuerpo[$i],"From: $remite[$i]\nContent-Type: text/html; charset=iso-8859-1")){
                
$this->estado "ok";
            } else { 
// envio ko
                
$this->estado "ko";
            }
// end if

        
// end for

    
// end function
 
// end class
?>
Ya ni siquiera trato de pasarle los valores, pero es que esto YA ME DA ERROR:


Cita:
Parse error: parse error, unexpected T_VARIABLE, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /h2/cineytele.com/home/html/test/class.correo.php on line 7

Fatal error: Cannot instantiate non-existent class: correo in /h2/cineytele.com/home/html/test/prueba_correo.php on line 35
¿Que le pasa?
__________________
Zárate
  #8 (permalink)  
Antiguo 23/02/2003, 11:39
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
a ver......... yo tambien estoy empezando con OOP en PHP (classes y objeto) y como dice cluster estoy reinventando la rueda pero me gusta hacerme mis propias cositas, ya que no me gusta usar las de otros, aunque reconosco que e usado classes de otros (pero solo clases ya que no tenia idea de como hacerlas)


Sobre tu codigo yo veo lo siguiente
pones un var $asunto y luego defines variables deberias hacerlo asi (por lo que yo se y hago)

Código PHP:
<?php 
class correo // empieza el cachondeo

    // declaramos variables
    
var $estado;
    
    var 
$asunto = array("Uno""Dos");
    var 
$cuerpo = array("Tres""Cuatro");
    var 
$destino = array("[email protected]""[email protected]");
    var 
$remite = array("[email protected]""[email protected]");

    function 
enviar(){
        
        for(
$i=0$i<count($this->asunto); $i++){ // recorremos los arrays para el envio
        
            
if(@mail($this->destino[$i],$this->asunto[$i],$this->cuerpo[$i],"From: $this->remite[$i]\nContent-Type: text/html; charset=iso-8859-1")){
                
$this->estado "ok";
            } else { 
// envio ko
                
$this->estado "ko";
            }
// end if

        
// end for

    
// end function
 
// end class
?>
Para eso es la clase.

Defines las variables en un principio por medio de var y luego las llamas con $this->variable eso es todo.

Por ahora te veo ese error.

Si no es asi corrijanme.


PD: La clase que estoy hacien la puedes ver en este post
http://www.forosdelweb.com/showthrea...5&pagenumber=2

Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #9 (permalink)  
Antiguo 23/02/2003, 12:50
Avatar de zarate  
Fecha de Ingreso: septiembre-2001
Ubicación: Madrid
Mensajes: 164
Antigüedad: 16 años, 3 meses
Puntos: 0
Bueno, ya dí con la solución... espero que ayude a alguien:

La clase ->

Código PHP:

<?php 
class correo // empezamos

    /************************************
    
    El propósito de esta clase es bien sencillo: enviar mails con formato HTML
    Funcionamiento: Cuenta el número de destinos que se han introducido y envía ese número de correos,
        el mail 1 tiene el asunto 1, el destino 1, el remite 1, etc, etc...
        Al final recuenta si ha habido fallos en la variable fallo_envios que por defecto es 0.
    
    Esta clase NO:
        - Comprueba que la sintaxis de los mails sea correcta,
        - Puede aduntar archivos de ninguna clase,
        - Cambiar las cabeceras,
        - Mandar mensajes con CC, CCO, etc, etc...,
        - Mil cosas más que se podrán hacer.
        
    Una clase seria de envio de mails: [url]http://phpmailer.sourceforge.net[/url]
    
    Espero que ayude a alguien aunque sea como inspiración para hacer una fashion de la muerte ;)
    Mejorar lo que creais oportuno y me mandais una copia a: Zárate, [email][email protected][/email]. GRACIAS A TODOS.
    
    ************************************/

    // declaramos variables
    
var $asunto;
    var 
$cuerpo;
    var 
$destino;
    var 
$remite;
    var 
$estado;
    var 
$comprobar_mails;
    var 
$fallo_envios 0;

    function 
enviar(){ // realiza el envio de los mails
        
for($i=0$i<count($this->destino); $i++){ // recorremos los arrays para el envio
            
if(mail($this->destino[$i],$this->asunto[$i],$this->cuerpo[$i],"From: ".$this->remite[$i]."\nContent-Type: text/html; charset=iso-8859-1")){ // envio ok
                
$this->estado[$i] = "ok";
            } else { 
// envio ko
                
$this->estado[$i] = "ko";
            }
// end if
        
// end for
        
$this->verificar(); // verificamos si ha habido errores en el envio
    
// end function enviar
    
    
function verificar(){ // comprueba si ha habido envios fallidos y cuantos
        
for($i=0$i<count($this->estado); $i++){ // recorremos el array del estado de los mails para verificar que no hay ko's
            
if ($this->estado[$i] != "ok"){ // ha encontrado un ko
                
$this->fallo_envios++;
            } 
// end if
        
// end for
    
// end function verificar
 
// end class correo

?>
Una página de ejemplo ->

Código PHP:

<html>
<head>
<title>Prueba clase correo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
    
    
// podemos mandar el cuerpo con formato HTML

    
$cuerpo_HTML "
        
        <table bgcolor='#000000'>
            <tr>
                <td><font color='#FFFFFF'>Feo</font></td>
            </tr>
        </table>
    
    "
;
    
    
$cuerpo_HMTL2 "
        
        <table bgcolor='#000000'>
            <tr>
                <td><font color='#FFFFFF'>Feo que te veo</font></td>
            </tr>
        </table>
    
    "
;    

    include(
"class.correo.php"); // incluimos la clase
    
$xuan = new correo(); // creamos el objeto
    
    // definimos las variables que necesitamos
    
$xuan->asunto = array("Asunto mail 1""Asunto mail 2");
    
$xuan->cuerpo = array($cuerpo_HMTL$cuerpo_HMTL2);
    
$xuan->destino = array("[email protected]""[email protected]");
    
$xuan->remite = array("[email protected]""[email protected]");
    
$xuan->enviar();
    
    if (
$xuan->fallo_envios == 0){
        print(
"Envios correctos");
    } else {
        print(
"Error en los envios");
    }
// end if

    
print("<br>Fallos -> ".$xuan->fallo_envios."");

?>

</body>
</html>
Saludos
__________________
Zárate
  #10 (permalink)  
Antiguo 23/02/2003, 13:11
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
jeejejejej veo que lo lograste
xD


genial.

Con tu idea me incitaste a crearme una yo mismo (mas que nas}da por aburrido que estaba)


es algo simple, osea para mi pero si la quieren ver pronto se las posteo.


Sabes algo en ves de la funcion enviar podrias hacer un constructor de la clase donde recibieras los paramentros de envio y enviaras, asi se instanciaria mas facil con un simple
$p=new correo("","","","");

lalal bueno


Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
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 17:25.