Foros del Web » Programando para Internet » PHP »

craer formulario de comentarios con phpmailer

Estas en el tema de craer formulario de comentarios con phpmailer en el foro de PHP en Foros del Web. buenas tardes amigos, necesito su ayuda para realizar un formulario de comentarios con phpmailer donde esten los siguientes campos: nombre: email: comentario: dicho comentario se ...
  #1 (permalink)  
Antiguo 13/05/2009, 15:10
 
Fecha de Ingreso: mayo-2009
Ubicación: Venezuela
Mensajes: 6
Antigüedad: 14 años, 11 meses
Puntos: 0
craer formulario de comentarios con phpmailer

buenas tardes amigos, necesito su ayuda para realizar un formulario de comentarios con phpmailer donde esten los siguientes campos:

nombre:
email:
comentario:

dicho comentario se enviara a mi direccion de correo GMAIL. la idea de este formulario es sólo para que envien los visitantes del sitio envien sus comentarios a mi correo electronico.

necesito su ayuda lo mas pronto posible ya que no he podido montar todo el sitio por falta de este formulario.
  #2 (permalink)  
Antiguo 13/05/2009, 15:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: craer formulario de comentarios con phpmailer

Hola frederickm,

Te invito a que leas las FAQs del foro, tienes toda la información necesaria para realizar lo que pides.

Si desconoces de PHP, puedes ver en las FAQs links a recursos para aprender, este foro no es un foro donde se haga trabajo gratuito, es de ayuda solamente.

Saludos.
  #3 (permalink)  
Antiguo 14/05/2009, 08:59
 
Fecha de Ingreso: mayo-2009
Ubicación: Venezuela
Mensajes: 6
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: craer formulario de comentarios con phpmailer

buenos dias, ya logré hacer el formulario y el codigo con ayuda de informacion de la web, pero ahora no manda el mensaje, no da error, pero tampoco lo manda quisiera su ayuda por favor.
gracias de antemano.

les mando el codigo (tiene comentarios de la pagina donde descargue el ejemplo):


Código PHP:
<?
   $error
="";
  
   if (
$enviar) {
      if ((!
$email)) {
    
$error.="Debe indicar al menos una dirección de destino";
      }
   }

if (
$enviar && !$error) {

      
//creamos un array que estará formado por las direcciones de destino
      
if ($email1) {
    
$direcciones["direccion1"]=$email1;
      }

//pasamos a enviar el correo

      // primero hay que incluir la clase phpmailer para poder instanciar 
      //un objeto de la misma
      
require "includes/class.phpmailer.php";

      
//instanciamos un objeto de la clase phpmailer al que llamamos 
      //por ejemplo mail
      
$mail = new phpmailer();
      
      
/*Con PluginDir le indicamos a la clase phpmailer donde se 
      encuentra la clase smtp que como he comentado al principio de 
      este ejemplo va a estar en el subdirectorio includes*/
      
$mail->PluginDir "includes/";

      
//Con la propiedad Mailer le indicamos que vamos a usar un 
      //servidor smtp                            
      
$mail->Mailer "smtp";

      
//Asignamos a Host el nombre de nuestro servidor smtp
      
$mail->Host "correo.xxx.edu.ve";
      
      
//Le indicamos que el servidor smtp requiere autenticación
      
$mail->SMTPAuth false;

      
//Le decimos cual es nuestro nombre de usuario y password
      
$mail->Username $_POST['email'];
      
$mail->Password $_POST['contraseña'];
      
      
//Indicamos cual es nuestra dirección de correo y el nombre que 
      //queremos que vea el usuario que lee nuestro correo
      
$mail->From $_POST['email'];

      
$mail->FromName $_POST['nombre'];
    
$mail->to "[email protected]";
    
      
//Asignamos asunto y cuerpo del mensaje
      //El cuerpo del mensaje lo ponemos en formato html, haciendo 
      //que se vea en negrita
      
$mail->Subject $_POST['asunto'];
      
$mail->Body $_POST['comentario'];

      
//Definimos AltBody por si el destinatario del correo no admite 
      //email con formato html
      
$mail->AltBody $_POST['comentario'];

      
//el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar 
      //una cuenta gratuita y voy a usar attachments, por tanto lo pongo a 120  
      
$mail->Timeout=30;


      
//Indicamos cuales son las direcciones de destino del correo y enviamos 
      //los mensajes
      
reset($direcciones);
      while (list(
$clave$valor)=each($direcciones)) {
    
$mail->AddAddress($valor);

    
//se envia el mensaje, si no ha habido problemas la variable $success 
    //tendra el valor true
    
$exito $mail->Send();

    
//Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas 
    //como mucho para intentar enviar el mensaje, cada intento se hara 5 s
    //segundos despues del anterior, para ello se usa la funcion sleep
     
$intentos=1
       while((!
$exito)&&($intentos<5)&&($mail->ErrorInfo!="SMTP Error: Data not accepted")){
       
sleep(5);
            
//echo $mail->ErrorInfo;
            
$exito $mail->Send();
            
$intentos=$intentos+1;                
       }

    
//La clase phpmailer tiene un pequeño bug y es que cuando envia un mail con
    //attachment la variable ErrorInfo adquiere el valor Data not accepted, dicho 
    //valor no debe confundirnos ya que el mensaje ha sido enviado correctamente
    
if ($mail->ErrorInfo=="SMTP Error: Data not accepted") {
       
$exito=true;
        }
        
    if(!
$exito)
    {
       echo 
"Problemas enviando correo electrónico a ".$valor;
       echo 
"<br>".$mail->ErrorInfo;    
    }
    else
    {
       
//Mostramos un mensaje indicando las direccion de 
       //destino y fichero  adjunto enviado en el mensaje    
       
$mensaje="<p>Has enviado un mensaje a:<br>";
       
$mensaje.=$valor." ";

       
$mensaje.="</p>";
            echo 
$mensaje;


    }
    
// Borro las direcciones de destino establecidas anteriormente
        
$mail->ClearAddresses();
    
    }
    echo 
"<a href='$PHP_SELF'> VOLVER AL FORMULARIO</a>";
   }
   else {
   
?>



<HTML>
   <BODY>
   <? If ($error) echo "<font color='red'>$error</font>";?>
   <FORM ENCTYPE="multipart/form-data" METHOD="post" ACTION="<?=$PHP_SELF?>">
   <TABLE BORDER=0 ALIGN="CENTER">
        <TD>Nombre:</TD> 
      <TD><input name="nombre" type="text" id="nombre"></TD>
    </TR>  <tr>
        <TD>Email:</TD>
        <TD><input name="email" type="text" id="email" size="35" maxlength="35"></TD>
      </TR>
      <tr>
        <TD>Contrase&ntilde;a:</TD>
        <TD><input name="contraseña" type="password" id="contraseña"></TD>
      </TR>
      <tr>
        <TD>Asunto:</TD>
        <TD><input name="asunto" type="text" id="asunto"></TD>
      </TR>  
      <tr>
        <TD>Comentario:</TD>
        <TD><textarea name="comentario" cols="30" id="comentario"></textarea></TD>
      </TR>
    <TR>
      <TD COLSPAN="2" ALIGN="CENTER"><INPUT TYPE="submit" VALUE="Enviar" name="enviar"></TD>
    </TR>
    </TABLE>
   </FORM>
   </BODY>
   </HTML>
   <?
   
}
   
?>
  #4 (permalink)  
Antiguo 14/05/2009, 09:11
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: craer formulario de comentarios con phpmailer

1. te falta el puerto (26)
2. supongo que ese $_POST['usuario'] y $_POST['contrasena'] (se puede usar ñ??) pertenecen a los correos del hosting y tambien que debes saber el smtp de correo
__________________
Quitenme la vida pero no la bebida.
  #5 (permalink)  
Antiguo 14/05/2009, 09:19
 
Fecha de Ingreso: mayo-2009
Ubicación: Venezuela
Mensajes: 6
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: craer formulario de comentarios con phpmailer

lo del puerto se puede arreglar.

el usuario y contraseña no son los mios (la idea de este formulario es que los usuarios de la pagina me envien comentarios por e-mail) asi que no se como hacer esto exactamente.

lo acabo de modificar, con el puerto y el servidor smtp:
Código PHP:
<?
   $error
="";
  
   if (
$enviar) {
      if ((!
$email)) {
    
$error.="Debe indicar al menos una dirección de destino";
      }
   }

if (
$enviar && !$error) {

      
//creamos un array que estará formado por las direcciones de destino
      
if ($email1) {
    
$direcciones["direccion1"]=$email1;
      }

//pasamos a enviar el correo

      // primero hay que incluir la clase phpmailer para poder instanciar 
      //un objeto de la misma
      
require "includes/class.phpmailer.php";

      
//instanciamos un objeto de la clase phpmailer al que llamamos 
      //por ejemplo mail
      
$mail = new phpmailer();
      
      
/*Con PluginDir le indicamos a la clase phpmailer donde se 
      encuentra la clase smtp que como he comentado al principio de 
      este ejemplo va a estar en el subdirectorio includes*/
      
$mail->PluginDir "includes/";

      
//Con la propiedad Mailer le indicamos que vamos a usar un 
      //servidor smtp                            
      
$mail->Mailer "smtp";
      
$mail->Port "25";

      
//Asignamos a Host el nombre de nuestro servidor smtp
      
$mail->Host "smtp.correo.xxx.edu.ve";
      
      
//Le indicamos que el servidor smtp requiere autenticación
      
$mail->SMTPAuth true;

      
//Le decimos cual es nuestro nombre de usuario y password
      
$mail->Username "[email protected]";
      
$mail->Password "mi password";
      
      
//Indicamos cual es nuestra dirección de correo y el nombre que 
      //queremos que vea el usuario que lee nuestro correo
      
$mail->From $_POST['email'];

      
$mail->FromName $_POST['nombre'];
    
$mail->to "[email protected]";
    
      
//Asignamos asunto y cuerpo del mensaje
      //El cuerpo del mensaje lo ponemos en formato html, haciendo 
      //que se vea en negrita
      
$mail->Subject $_POST['asunto'];
      
$mail->Body $_POST['comentario'];

      
//Definimos AltBody por si el destinatario del correo no admite 
      //email con formato html
      
$mail->AltBody $_POST['comentario'];

      
//el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar 
      //una cuenta gratuita y voy a usar attachments, por tanto lo pongo a 120  
      
$mail->Timeout=30;

      
/*Indicamos el fichero a adjuntar si el usuario seleccionó uno en el formulario
      if ($achivo !="none") {
    $mail->AddAttachment($archivo,$archivo_name);
      }*/

      //Indicamos cuales son las direcciones de destino del correo y enviamos 
      //los mensajes
      
reset($direcciones);
      while (list(
$clave$valor)=each($direcciones)) {
    
$mail->AddAddress($valor);

    
//se envia el mensaje, si no ha habido problemas la variable $success 
    //tendra el valor true
    
$exito $mail->Send();

    
//Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas 
    //como mucho para intentar enviar el mensaje, cada intento se hara 5 s
    //segundos despues del anterior, para ello se usa la funcion sleep
     
$intentos=1
       while((!
$exito)&&($intentos<5)&&($mail->ErrorInfo!="SMTP Error: Data not accepted")){
       
sleep(5);
            
//echo $mail->ErrorInfo;
            
$exito $mail->Send();
            
$intentos=$intentos+1;                
       }

    
//La clase phpmailer tiene un pequeño bug y es que cuando envia un mail con
    //attachment la variable ErrorInfo adquiere el valor Data not accepted, dicho 
    //valor no debe confundirnos ya que el mensaje ha sido enviado correctamente
    
if ($mail->ErrorInfo=="SMTP Error: Data not accepted") {
       
$exito=true;
        }
        
    if(!
$exito)
    {
       echo 
"Problemas enviando correo electrónico a ".$valor;
       echo 
"<br>".$mail->ErrorInfo;    
    }
    else
    {
       
//Mostramos un mensaje indicando las direccion de 
       //destino y fichero  adjunto enviado en el mensaje    
       
$mensaje="<p>Has enviado un mensaje a:<br>";
       
$mensaje.=$valor." ";
       
/*if ($archivo !="none") {
        $mensaje.="Con un fichero adjunto llamado ".$archivo_name;
       }*/
       
$mensaje.="</p>";
            echo 
$mensaje;


    }
    
// Borro las direcciones de destino establecidas anteriormente
        
$mail->ClearAddresses();
    
    }
    echo 
"<a href='$PHP_SELF'> VOLVER AL FORMULARIO</a>";
   }
   else {
   
?>



<HTML>
   <BODY>
   <? If ($error) echo "<font color='red'>$error</font>";?>
   <FORM ENCTYPE="multipart/form-data" METHOD="post" ACTION="<?=$PHP_SELF?>">
   <TABLE BORDER=0 ALIGN="CENTER">
        <TD>Nombre:</TD> 
      <TD><input name="nombre" type="text" id="nombre"></TD>
    </TR>  <tr>
        <TD>Email:</TD>
        <TD><input name="email" type="text" id="email" size="35" maxlength="35"></TD>
      </TR>
      <tr>
        <TD>Asunto:</TD>
        <TD><input name="asunto" type="text" id="asunto"></TD>
      </TR>  
      <tr>
        <TD>Comentario:</TD>
        <TD><textarea name="comentario" cols="30" id="comentario"></textarea></TD>
      </TR>
    <TR>
      <TD COLSPAN="2" ALIGN="CENTER"><INPUT TYPE="submit" VALUE="Enviar" name="enviar"></TD>
    </TR>
    </TABLE>
   </FORM>
   </BODY>
   </HTML>
   <?
   
}
   
?>

Última edición por frederickm; 14/05/2009 a las 09:34
  #6 (permalink)  
Antiguo 14/05/2009, 10:52
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: craer formulario de comentarios con phpmailer

entonces esos usuarios y contraseñas nada tienen que ver con el envio de email... sino que son registros.

Bueno si quieres enviar el correo con phpmailer y quieres usar tu propio smtp debes tener una cuenta de email en tu hosting y usarl el smtp de correo de tu hosting

Osea:

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "mail.misitio.com";
$mail->Port=26;
$mail->CharSet = "utf-8";
$mail->SMTPAuth = true;
$mail->Username = "[email protected]";
$mail->Password = "contrasenadecorreodemisitio";


p.d. nose si tendra algo que ver... pero no uses 'ñ' por si las dudas =P
__________________
Quitenme la vida pero no la bebida.
  #7 (permalink)  
Antiguo 14/05/2009, 13:37
 
Fecha de Ingreso: mayo-2009
Ubicación: Venezuela
Mensajes: 6
Antigüedad: 14 años, 11 meses
Puntos: 0
De acuerdo Respuesta: craer formulario de comentarios con phpmailer

gracias por tu ayuda cesarpunk, ahora si hace el intento de enviar, pero me sale el siguiente error:

Problemas enviando correo electr�nico a [email protected]
SMTP Error: could not connect to SMTP host server(s)

que podria estar ocasionando esto, será el formulario o el SMTP de mi correo??

P.D: Estoy colocando bien el puerto y la direccion de mi correo SMTP.

quisiera por favor me echaras otra ayuda, ya que soy principiante en PHP y tu me has dado la ayuda idónea
  #8 (permalink)  
Antiguo 14/05/2009, 13:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: craer formulario de comentarios con phpmailer

Verifica la direccion de tu servidor SMTP, si te fijas el error te dice que no se pudo conectar.

Saludos.
  #9 (permalink)  
Antiguo 14/05/2009, 14:28
 
Fecha de Ingreso: mayo-2009
Ubicación: Venezuela
Mensajes: 6
Antigüedad: 14 años, 11 meses
Puntos: 0
Sonrisa Respuesta: craer formulario de comentarios con phpmailer

muchas gracias a todos por su ayuda, es muy valiosa para mi, aparentemente ya el problema está arreglado, solo falta esperar que el correo llegue a su destino (mi servidor de correo es un poco lento)

aparte de sus correcciones tenía un error con el usuario (ups!!!...) y tuve que desactivar la Autentificación del SMTP.

gracias de nuevo por toda su ayuda...
cualquier cosa AVISO DE NUEVO...
  #10 (permalink)  
Antiguo 18/05/2009, 07:22
 
Fecha de Ingreso: mayo-2009
Ubicación: Venezuela
Mensajes: 6
Antigüedad: 14 años, 11 meses
Puntos: 0
Sonrisa Respuesta: craer formulario de comentarios con phpmailer

buenos dias amigos otra vez yo con mis preguntas.... ahora el problema que tengo es que el formulario "aparententemente" está funcionando, pero el mensaje no llega a mi correo. quisiera por favor me ayudaran en este problema ya que no encuentro que hacer.

agradezco toda colaboración.
aqui está el codigo:
Código PHP:
<?
   $error
="";
  
   if (
$enviar) {
      if ((!
$email)) {
    
$error.="Debe indicar al menos una dirección de destino";
      }
   }

if (
$enviar && !$error) {

      
//creamos un array que estará formado por las direcciones de destino
      
if ($email) {
    
$direcciones["direccion1"]=$email;
      }

//pasamos a enviar el correo

      // primero hay que incluir la clase phpmailer para poder instanciar 
      //un objeto de la misma
      
require "includes/class.phpmailer.php";

      
//instanciamos un objeto de la clase phpmailer al que llamamos 
      //por ejemplo mail
      
$mail = new phpmailer();
      
      
/*Con PluginDir le indicamos a la clase phpmailer donde se 
      encuentra la clase smtp que como he comentado al principio de 
      este ejemplo va a estar en el subdirectorio includes*/
      
$mail->PluginDir "includes/";

      
//Con la propiedad Mailer le indicamos que vamos a usar un 
      //servidor smtp                            
      
$mail->IsSMTP();
      
$mail->Port "25";


      
//Asignamos a Host el nombre de nuestro servidor smtp
      
$mail->Host "correo.udo.edu.ve";
      
$mail->CharSet "utf-8";
      
      
//Le indicamos que el servidor smtp requiere autenticación
      
$mail->SMTPAuth false;

      
//Le decimos cual es nuestro nombre de usuario y password
      
$mail->Username "xxxcxxxx";
      
$mail->Password "xxxxxxx";
      
      
//Indicamos cual es nuestra dirección de correo y el nombre que 
      //queremos que vea el usuario que lee nuestro correo
      
$mail->From $_POST['email'];

      
$mail->FromName $_POST['nombre'];
    
$mail->to "xxxxxx@cccccc";
    
      
//Asignamos asunto y cuerpo del mensaje
      //El cuerpo del mensaje lo ponemos en formato html, haciendo 
      //que se vea en negrita
      
$mail->Subject $_POST['asunto'];
      
$mail->Body $_POST['comentario'];

      
//Definimos AltBody por si el destinatario del correo no admite 
      //email con formato html
      
$mail->AltBody $_POST['comentario'];

      
//el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar 
      //una cuenta gratuita y voy a usar attachments, por tanto lo pongo a 120  
      
$mail->Timeout=30;

      
/*Indicamos el fichero a adjuntar si el usuario seleccionó uno en el formulario
      if ($achivo !="none") {
    $mail->AddAttachment($archivo,$archivo_name);
      }*/

      //Indicamos cuales son las direcciones de destino del correo y enviamos 
      //los mensajes
      
reset($direcciones);
      while (list(
$clave$valor)=each($direcciones)) {
    
$mail->AddAddress($valor);

    
//se envia el mensaje, si no ha habido problemas la variable $success 
    //tendra el valor true
    
$exito $mail->Send();

    
//Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas 
    //como mucho para intentar enviar el mensaje, cada intento se hara 5 s
    //segundos despues del anterior, para ello se usa la funcion sleep
     
$intentos=1
       while((!
$exito)&&($intentos<5)&&($mail->ErrorInfo!="SMTP Error: Data not accepted")){
       
sleep(5);
            
//echo $mail->ErrorInfo;
            
$exito $mail->Send();
            
$intentos=$intentos+1;                
       }

    
//La clase phpmailer tiene un pequeño bug y es que cuando envia un mail con
    //attachment la variable ErrorInfo adquiere el valor Data not accepted, dicho 
    //valor no debe confundirnos ya que el mensaje ha sido enviado correctamente
    
if ($mail->ErrorInfo=="SMTP Error: Data not accepted") {
       
$exito=true;
        }
        
    if(!
$exito)
    {
       echo 
"Problemas enviando correo electrónico al soporte ";
       echo 
"<br>".$mail->ErrorInfo;    
    }
    else
    {
      
       
$mensaje="<p>Has enviado un mensaje al soporte<br>";
       
$mensaje.="</p>";
            echo 
$mensaje;


    }
    
// Borro las direcciones de destino establecidas anteriormente
        
$mail->ClearAddresses();
    
    }
    echo 
"<a href='$PHP_SELF'> VOLVER AL FORMULARIO</a>";
   }
   else {
   
?>



<HTML>
   <BODY>
   <? If ($error) echo "<font color='red'>$error</font>";?>
   <FORM ENCTYPE="multipart/form-data" METHOD="post" ACTION="<?=$PHP_SELF?>">
   <TABLE BORDER=0 ALIGN="CENTER">
        <TD>Nombre:</TD> 
      <TD><input name="nombre" type="text" id="nombre"></TD>
    </TR>  <tr>
        <TD>Email:</TD>
        <TD><input name="email" type="text" id="email" size="35" maxlength="35"></TD>
      </TR>
      <tr>
        <TD>Asunto:</TD>
        <TD><input name="asunto" type="text" id="asunto"></TD>
      </TR>  
      <tr>
        <TD>Comentario:</TD>
        <TD><textarea name="comentario" cols="30" id="comentario"></textarea></TD>
      </TR>
    <TR>
      <TD COLSPAN="2" ALIGN="CENTER"><INPUT TYPE="submit" VALUE="Enviar" name="enviar"></TD>
    </TR>
    </TABLE>
   </FORM>
   </BODY>
   </HTML>
   <?
   
}
   
?>
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 10:35.