Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Usando popen para enviar correo

Estas en el tema de Usando popen para enviar correo en el foro de PHP en Foros del Web. Buen dia. Se presenta el siguiente problema, tengo una serie de archivos donde envio correos usando PHPMailer, ahora bien existe una comunicacion entre cada archivo ...
  #1 (permalink)  
Antiguo 20/05/2016, 16:12
Avatar de chulifo  
Fecha de Ingreso: abril-2009
Ubicación: perdido en codigos del PHP, pero aprendo rapido!
Mensajes: 524
Antigüedad: 15 años
Puntos: 18
Usando popen para enviar correo

Buen dia.

Se presenta el siguiente problema, tengo una serie de archivos donde envio correos usando PHPMailer, ahora bien existe una comunicacion entre cada archivo por medio de popen Sucede que en el ultimo archivo es donde se envia el email me devuelve el error Extension missing: openssl. Para que me puedan entender les dejo el codigo.


archivoqueiniciatodo.php
Código PHP:
Ver original
  1. function prepareMail($grupo,$sygo,$type){
  2.         global $Db;
  3.         $hash = $this->dohash();
  4.         if($Db->num_rows("Select * from ssl_emails where id_mail='{$hash}'",__FILE__,__LINE__) == 0){
  5.             $usuarios = $Db->query("Select * from ssl_usuarios where grupo = '{$grupo}'",__FILE__,__LINE__);
  6.             if($usuarios){     
  7.                 while($create_mails = $Db->fetch_array($usuarios,__FILE__,__LINE__)){
  8.                     $Db->query("INSERT INTO ssl_emails (id_mail, para, sygo, type, estado) VALUES ('{$hash}', '{$create_mails['correo']}', '{$sygo}', '{$type}', 'pendiente')",__FILE__,__LINE__);         
  9.                 }
  10.             }
  11.             pclose(popen('start /B C:\wamp\bin\php\php5.3.8\php.exe  C:\wamp\www\tarea.php -f "'.$hash.'"',"r"));
  12.         }else{
  13.             $this->prepareMail($grupo,$sygo,$type);
  14.         }
  15.     }
  16. prepareMail($grupo,$sygo,$type);

tarea.php
Código PHP:
Ver original
  1. $o = getopt("f:");
  2. if(isset($o)){
  3.     $p = $o["f"];
  4.     if(isset($p)){
  5.         if($Db->num_rows("Select * from ssl_emails where id_mail='{$p}'",__FILE__,__LINE__)){
  6.             $query = $Db->query("Select * from ssl_emails where id_mail='{$p}'",__FILE__,__LINE__);
  7.             while($emails = $Db->fetch_array($query,__FILE__,__LINE__)){
  8.                 pclose(popen('start /B C:\wamp\bin\php\php5.3.8\php.exe  C:\wamp\www\mail.php -f "'.$p.'"',"r"));
  9.                 sleep(5);
  10.             }
  11.            
  12.         }
  13.     }
  14. }

mail.php

Código PHP:
Ver original
  1. $o = getopt("f:");
  2. if(isset($o)){
  3.     $p =    trim($o["f"]);
  4.     if(isset($p) && $Db->num_rows("Select * from ssl_emails where id_mail='{$p}' and estado='pendiente'",__FILE__,__LINE__) > 0){
  5.         $mail_data = $Db->fetch("Select * from ssl_emails where id_mail='{$p}' and estado ='pendiente'",__FILE__,__LINE__);
  6.         $tiempo_inicio = microtime(true);
  7.         ob_start();
  8.         echo getPostHTML($mail_data['sygo']);
  9.         $salida1 = ob_get_contents();
  10.         require 'plugins/phpmailer/PHPMailerAutoload.php';
  11.         $mail = new PHPMailer();
  12.  
  13.         $mail->FromName = "SyGO Industrias Anros"; // readable name
  14.         $mail->Subject = "Usted ha sido involucrado en un nuevo SyGO";
  15.         $mail->Body    = $salida1;
  16.         $mail->Host = "ssl://smtp.gmail.com"; // GMail
  17.         $mail->Port = 465;
  18.         $mailer->SMTPSecure = 'ssl';
  19.         $mail->isHTML(true);
  20.         $mail->IsSMTP(); // use SMTP
  21.         $mail->SMTPAuth = true; // turn on SMTP authentication
  22.         $mail->From = $mail->Username;
  23.         $mail->AddAddress($mail->Username);
  24.         $mail->AddBCC($mail_data['para']);
  25.         if( !$mail->Send()){
  26.             $error = "El mensaje no fue enviado: {$mail->ErrorInfo}";
  27.             $Db->query("update ssl_emails set estado = 'error' where id_mail = '{$p}' and id = '{$mail_data['id']}'",__FILE__,__LINE__);
  28.         }else{
  29.             $error = "mensaje fue enviado correctamente";
  30.             $Db->query("update ssl_emails set estado = 'enviado' where id_mail = '{$p}' and id = '{$mail_data['id']}'",__FILE__,__LINE__);
  31.         }
  32.         $tiempo_fin = microtime(true);
  33.         $Gf->logEmail($tiempo_inicio,$tiempo_fin,$mail_data['para'],$error,$salida1);
  34.        
  35.     }else{
  36.         $Gf->logEmail(0,1,"No-paso-nada","no se encontro respuesta",'nada');
  37.     }
  38. }


Ahora bien, todo el proceso funciona "muy bien" solo que me da error que ya mencione antes; ahora bien cuando cargo el archivo mail.php desde el navegador los correos se envían perfectamente.
__________________
Solo soy un simple fanático que mata el tiempo de la mejor manera.
  #2 (permalink)  
Antiguo 20/05/2016, 18:07
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Usando popen para enviar correo

Debes de activar el SMTP en tu cuenta de Gmail para poder utilizarlo, no recuerdo donde está la opción exactamente pero busca en la configuración de Gmail.

Asegúrate también que tu servidor no tenga capado el puerto que utilizas.

Tu error no tiene que ver nada en principio con popen, es más bien un error de comunicación.

Cita:
Ahora bien, todo el proceso funciona "muy bien" solo que me da error que ya mencione antes; ahora bien cuando cargo el archivo mail.php desde el navegador los correos se envían perfectamente.
De todas formas no dejas claro, cuando te falla y cuando funciona bien, este parrafo me despista.
__________________
Unset($vida['malRollo']);
  #3 (permalink)  
Antiguo 25/05/2016, 12:55
Avatar de chulifo  
Fecha de Ingreso: abril-2009
Ubicación: perdido en codigos del PHP, pero aprendo rapido!
Mensajes: 524
Antigüedad: 15 años
Puntos: 18
Respuesta: Usando popen para enviar correo

Como comentaba. si abro el link

localhost/archivoqueiniciatodo.php

se cumplen todos los paramentos pero al llegar al punto de enviar el email me da el errer Extension missing: openssl.

Si embargo cuando abro el archivo
localhost/mail.php

se envian los correos correctamente.
__________________
Solo soy un simple fanático que mata el tiempo de la mejor manera.
  #4 (permalink)  
Antiguo 25/05/2016, 13:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Usando popen para enviar correo

Te recuerdo que la versión CLI no es idéntica a la versión CGI, y en muy pocas ocasiones comparten la misma configuración.

Primero deberías revisar que tengas exactamente la misma configuración y extensiones en ambos entornos, de otra forma es imposible.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 14/06/2016, 06:40
Avatar de chulifo  
Fecha de Ingreso: abril-2009
Ubicación: perdido en codigos del PHP, pero aprendo rapido!
Mensajes: 524
Antigüedad: 15 años
Puntos: 18
Respuesta: Usando popen para enviar correo

Cita:
Iniciado por pateketrueke Ver Mensaje
Te recuerdo que la versión CLI no es idéntica a la versión CGI, y en muy pocas ocasiones comparten la misma configuración.

Primero deberías revisar que tengas exactamente la misma configuración y extensiones en ambos entornos, de otra forma es imposible.
Gracias por respuesta, sabiamente me guio a la solucion.

Encontré que, (estoy usando wamp server) cuando activaba la extensión openssl solo se modificada en la configuracion php.ini del php pero no en php.ini del apache.

Resumen, garantizar que ambos ficheros tengan los mismo valores.
__________________
Solo soy un simple fanático que mata el tiempo de la mejor manera.

Etiquetas: correo, html, select, usando, usuarios
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 16:38.