Foros del Web » Programando para Internet » PHP »

PHPMailer: Utilizar new PHPMailer() 2 o mas veces en mismo script PHP

Estas en el tema de PHPMailer: Utilizar new PHPMailer() 2 o mas veces en mismo script PHP en el foro de PHP en Foros del Web. Hola a todos. Tengo un script PHP único para login, registro y recordatorio de contraseña de usuarios. Y estoy usando la función PHPMailer para enviar ...
  #1 (permalink)  
Antiguo 18/05/2017, 05:24
 
Fecha de Ingreso: julio-2009
Mensajes: 64
Antigüedad: 14 años, 9 meses
Puntos: 0
PHPMailer: Utilizar new PHPMailer() 2 o mas veces en mismo script PHP

Hola a todos.

Tengo un script PHP único para login, registro y recordatorio de contraseña de usuarios. Y estoy usando la función PHPMailer para enviar correos electrónicos cuando un usuario se registra o cambia de contraseña.

Para la sección de recordatorio de contraseña uso:

$mail = new PHPMailer();
.......
$mail->Send();


Y luego para el registro uso:

$mail2 = new PHPMailer();
.......
$mail2->Send();


Pero solo uno de ellos funciona. Parece que no se puede usar 2 o más veces la misma clase en el mismo script.
¿Existe alguna solución?
  #2 (permalink)  
Antiguo 18/05/2017, 06:42
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: PHPMailer: Utilizar new PHPMailer() 2 o mas veces en mismo script PHP

Hola PJ100,

Se puede usar, pero no tiene sentido, una vez has instanciado la clase, solo necesitas cambiar los datos que corresponda.

Por ejemplo, si tú tienes esto y lo quieres usar más de una vez, sería así:

Código PHP:
Ver original
  1. <?php
  2.  
  3.       // primero hay que incluir la clase phpmailer para poder instanciar
  4.       //un objeto de la misma
  5.       require_once "class.phpmailer.php";
  6.  
  7.       //instanciamos un objeto de la clase phpmailer al que llamamos
  8.       //por ejemplo mail
  9.       $mail = new phpmailer();
  10.  
  11.       //Definimos las propiedades y llamamos a los métodos
  12.       //correspondientes del objeto mail
  13.  
  14.       //Con PluginDir le indicamos a la clase phpmailer donde se
  15.       //encuentra la clase smtp que como he comentado al principio de
  16.       //este ejemplo va a estar en el subdirectorio includes
  17.       $mail->PluginDir = "el_que_sea";
  18.  
  19.       //Con la propiedad Mailer le indicamos que vamos a usar un
  20.       //servidor smtp                            
  21.       $mail->Mailer = "smtp";
  22.  
  23.       //Asignamos a Host el nombre de nuestro servidor smtp
  24.       $mail->Host = "localhost";
  25.      
  26.       //Le indicamos que el servidor smtp requiere autenticación
  27.       $mail->SMTPAuth = true;
  28.  
  29.       //Le decimos cual es nuestro nombre de usuario y password
  30.       $mail->Username = $email_de_envio;
  31.       $mail->Password = $clave_email_envio;
  32.      
  33.       //Indicamos cual es nuestra dirección de correo y el nombre que
  34.       //queremos que vea el usuario que lee nuestro correo
  35.       $mail->From = $email_envio;
  36.  
  37.       $mail->FromName = $nombre_envio;
  38.      
  39.       //Le decimos al sistema que es un e-mail en HTML
  40.       $mail->IsHTML(true);
  41.  
  42.       //Activamos condificacción utf-8
  43.       $mail->CharSet = "UTF-8";
  44.  
  45.       //########################################################
  46.       //
  47.       //  Hasta aquí la parte "común" para todos los envíos,
  48.       //  suponiendo que el remitente sea siempre el mismo, claro
  49.       //
  50.       //########################################################
  51.  
  52.  
  53.       //########################################################
  54.       //
  55.       //  A partir de aquí sería para un envío y para hacer otro
  56.       //  repetiríamos lo que viene a continuación
  57.       //
  58.       //########################################################
  59.  
  60.  
  61.  
  62.       //Preparamos el contenido del mensaje en HTML
  63.               $msg = "Aquí iría el mensaje en HTML";
  64.  
  65.  
  66.               $msg_txt = "Aquí iría el mensaje alternativo en texto plano";
  67.  
  68.       //Asignamos asunto y cuerpo del mensaje
  69.       //El cuerpo del mensaje lo ponemos en formato html
  70.       $mail->Subject = "Asunto del e-mail";
  71.       $mail->Body = $msg;
  72.  
  73.       //Definimos AltBody por si el destinatario del correo no admite
  74.       //email con formato html
  75.       $mail->AltBody = $msg_txt;
  76.  
  77.       //el valor por defecto 10 de Timeout es un poco escaso, por tanto lo pongo a 120  
  78.       $mail->Timeout = 120;
  79.  
  80.       //Indicamos cuales son las direcciones de destino del correo y enviamos los mensajes
  81.       $mail->AddAddress($email_de_destino, $nombre_del_destinatario);
  82.       $mail->AddReplyTo($email_para_la_respuesta, $nombre_para_la_respuesta);
  83.  
  84.       //se envia el mensaje, si no ha habido problemas la variable $success
  85.       //tendra el valor true
  86.       $exito = $mail->Send();
  87.      
  88.       //Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas
  89.       //como mucho para intentar enviar el mensaje, cada intento se hara 5 s
  90.       //segundos despues del anterior, para ello se usa la funcion sleep
  91.        $intentos=1;
  92.          while( ( !$exito ) && ( $intentos<5 ) && ( $mail->ErrorInfo != "SMTP Error: Data not accepted" ) ) {
  93.          sleep(5);
  94.            //echo $mail->ErrorInfo;
  95.            $exito = $mail->Send();
  96.            $intentos = $intentos+1;            
  97.          }
  98.      
  99.       //La clase phpmailer tiene un pequeño bug y es que cuando envia un mail con
  100.       //attachment la variable ErrorInfo adquiere el valor Data not accepted, dicho
  101.       //valor no debe confundirnos ya que el mensaje ha sido enviado correctamente
  102.       if ( $mail->ErrorInfo == "SMTP Error: Data not accepted" ) {
  103.          $exito=true;
  104.       }
  105.        
  106.       if( !$exito ) {
  107.          echo "Problemas enviando correo electrónico a " . $email;
  108.          echo "<br>" . $mail->ErrorInfo;   
  109.       } else {
  110.          echo "Correo enviado correctamente a " . $email;
  111.       }
  112.      
  113.       //########################################################
  114.       //
  115.       //  Hasta aquí sería para un envío y para hacer otro
  116.       //  repetiríamos lo que hemos puesto arriba de esto
  117.       //
  118.       //########################################################
  119.  
  120.  
  121.  
  122.  
  123. ?>

Obviamente lo tienes que analizar y adaptar a tu código y tu proyecto, pero espero que te sirva...
  #3 (permalink)  
Antiguo 18/05/2017, 09:19
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: PHPMailer: Utilizar new PHPMailer() 2 o mas veces en mismo script PHP

Debieras de publicar tu código pareciera que estas pasando por alto algo, posiblemente alguna condición que no se esta cumpliendo
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #4 (permalink)  
Antiguo 18/05/2017, 09:43
 
Fecha de Ingreso: julio-2009
Mensajes: 64
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: PHPMailer: Utilizar new PHPMailer() 2 o mas veces en mismo script PHP

Perfecto! Ya está solucionado. He ajustado un poco el código que ha enviado rbczgz al mío, y funciona perfectamente! Muchas gracias! :)

Lo único que pasa es que he probado los envíos de correo en cuentas de usuario diferentes. y por ejemplo en hotmail y gmail en algunas cuentas llega el correo a SPAM y en otras no. Y en Yahoo parece que siempre llega a la Bandeja de Entrada.

¿A que se debe?
  #5 (permalink)  
Antiguo 18/05/2017, 14:25
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: PHPMailer: Utilizar new PHPMailer() 2 o mas veces en mismo script PHP

Hola PJ100,

Generalmente se debe al servidor desde el que se hacen los envíos, la "fama" que tenga en las listas de SPAM, siempre puedes solicitar al soporte que hagan los trámites para borrarlo de las listas de SPAM.
  #6 (permalink)  
Antiguo 19/05/2017, 02:39
 
Fecha de Ingreso: julio-2009
Mensajes: 64
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: PHPMailer: Utilizar new PHPMailer() 2 o mas veces en mismo script PHP

Vale, llamaré y les preguntaré, muchas gracias! :)

Etiquetas: phpmailer, registro, veces
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 07:08.