Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHPMailer error: Could not instantiate mail function

Estas en el tema de PHPMailer error: Could not instantiate mail function en el foro de PHP en Foros del Web. Harto de buscar hilos en google me dispongo a pedir ayuda al foro (Ahorraos porfavor la tipica respuesta de busca en google, ya lo hice). ...
  #1 (permalink)  
Antiguo 12/08/2013, 10:42
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
PHPMailer error: Could not instantiate mail function

Harto de buscar hilos en google me dispongo a pedir ayuda al foro (Ahorraos porfavor la tipica respuesta de busca en google, ya lo hice).

El caso es que con el siguiente código me devuelve el tipico error Could not instantiate mail function y no se por donde tirar ya.

He probado a lanzar la funcion mail() sin phpmailer y envía sin problemas el email a la direccion de destino.

Código PHP:
        
    $mail 
= new PHPMailer(true);
    try {
                
$mail->SetFrom($_REQUEST['email'], $_REQUEST['nombre']);
                
$mail->AddAddress('[email protected]''minombre');
                
$mail->Subject utf8_encode('Presupuesto #'.$n_presupuesto.' | '.$_REQUEST['nombre'].' '.$_REQUEST['apellidos']) . $nombre_empresa;
                
$mail->IsHTML(true);
                
$mail->CharSet 'UTF-8';
                
$mail->MsgHTML($mensaje);
                
$mail->Send();
            } catch (
phpmailerException $e) {
              echo 
$e->errorMessage();
              return 
false;
            } catch (
Exception $e) {
              echo 
$e->getMessage();
              return 
false;
            } 
  #2 (permalink)  
Antiguo 12/08/2013, 10:51
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: PHPMailer error: Could not instantiate mail function

Hola si ya has buscado en Goolge nos podrias ahorrar el tiempo sabiendo QUE PASOS hiciste, sin eso empezamos desde cero porque no sabemos que de tantas posibles soluciones intentaste

Por otro lado:

1. has probado usar smtp?
2. prueba cambiando

$mail->AddAddress('[email protected]', 'minombre');

por

$mail->AddAddress('[email protected]');

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #3 (permalink)  
Antiguo 12/08/2013, 10:51
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: PHPMailer error: Could not instantiate mail function

¿Qué versión de PHP tienes? Haz un phpinfo y muestra lo que te indica.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 12/08/2013, 10:58
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: PHPMailer error: Could not instantiate mail function

He probado a usar SMTP (Probe tanto con los datos de smtp que proporciona 1and1 como con mi cuenta personal de gmail) pero me daba error de conexión, tengo el proyecto alojado en servidores de 1and1 (A petición del cliente).

Cambien habia probado a poner únicamente la dirección de envio sin el nombre, pasa exactamente lo mismo.

PHP Version 5.4.17
  #5 (permalink)  
Antiguo 12/08/2013, 11:05
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: PHPMailer error: Could not instantiate mail function

Ese error es ocasionado cuando mail() regresa false, realiza una prueba sencilla usando mail() directamente y revisa si el problema reincide.

Aunque te adelanto que cuando mail() regresa false es porque el servidor local no aceptó el correo, por lo que tienes que ver que transporte estas usando, ya sea sendmail o SMTP, revisa la configuración de tu php.ini, y si no tienes acceso es mejor que contactes al soporte de tu hosting.

Saludos.
  #6 (permalink)  
Antiguo 12/08/2013, 11:09
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: PHPMailer error: Could not instantiate mail function

Creo que ya dije que habia probado a usar SOLO mail() y funciono correctamente.
  #7 (permalink)  
Antiguo 12/08/2013, 11:13
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: PHPMailer error: Could not instantiate mail function

Pues por alguna razón dentro de phpMailer te devuelve false, ¿que valor te devuelve al usar solo mail()?
  #8 (permalink)  
Antiguo 12/08/2013, 11:16
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: PHPMailer error: Could not instantiate mail function

Concretamente usé este script para la prueba, en la web me pintó Mail sent y me llego el email
Código PHP:
Ver original
  1. if(mail('[email protected]', 'Test email', 'Test email with standard mail() function')) {
  2.   echo 'Mail sent';
  3.  }
  4.   else echo 'Mail sending failed';
  #9 (permalink)  
Antiguo 12/08/2013, 11:28
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: PHPMailer error: Could not instantiate mail function

Muy extraño ¿que versión de phpMailer tienes? Igual puedes ver en la línea 538, y quitar los @ para ver si esta marcando algún error:

https://github.com/Synchro/PHPMailer...ailer.php#L538
  #10 (permalink)  
Antiguo 12/08/2013, 11:31
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: PHPMailer error: Could not instantiate mail function

Software: PHPMailer - PHP email class
Version: 5.2.4

Quitados los @, pinta todo igual, Could not instantiate mail function.

He probado a copiarme ese documento el de la version 5.2.6 y lo mismo.

Última edición por bNd170; 12/08/2013 a las 11:36
  #11 (permalink)  
Antiguo 12/08/2013, 11:48
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: PHPMailer error: Could not instantiate mail function

Es que si ves el código, si mail() devuelve false, lanza la excepción, así que tienes que hacer debug, para ver en que parte el código te devuelve el false que es lo que hace que lance la excepción...
  #12 (permalink)  
Antiguo 12/08/2013, 12:05
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: PHPMailer error: Could not instantiate mail function

Parece que reside en mail()

Código PHP:
  private function mail_passthru($to$subject$body$header$params) {
      echo (
mail($to$this->EncodeHeader($this->SecureHeader($subject)), $body$header$params)) ? '1' '0'// Pinta 0
    
if ( ini_get('safe_mode') || !($this->UseSendmailOptions) ) {
        
$rt mail($to$this->EncodeHeader($this->SecureHeader($subject)), $body$header);
    } else {
        
$rt mail($to$this->EncodeHeader($this->SecureHeader($subject)), $body$header$params);
    }
    return 
$rt;
  } 
Sigo haciendo avances.

He probado a usar mail sin los dos ultimos parametros, es decir, $header, $params y lo envia.


Esto es lo que contiene $header:

Date: Mon, 12 Aug 2013 20:12:38 +0200 Return-Path: From: Borja Message-ID: <[email protected]> X-Priority: 3 X-Mailer: PHPMailer 5.2.6 (https://github.com/PHPMailer/PHPMailer/) MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_9414c660a56152857fe6b09b010c1806" Content-Transfer-Encoding: 8bit
  #13 (permalink)  
Antiguo 12/08/2013, 12:28
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: PHPMailer error: Could not instantiate mail function

Creo que el problema es en el encode header prueba usando la funcion mb_encode_mimeheader
cambia esto:
Código PHP:
Ver original
  1. @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header);

por esto:
Código PHP:
Ver original
  1. @mail($val, mb_encode_mimeheader($this->Subject,$this->CharSet, 'B', ''), $body, $header);

Seria lo mismo para las dos llamadas a mail()
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #14 (permalink)  
Antiguo 12/08/2013, 12:29
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: PHPMailer error: Could not instantiate mail function

Realiza un phpinfo() y verifica que directiva tiene mail, a lo mejor si estas usando sendmail, alguno de los parámetros que esta enviando phpMailer no le gusta...
  #15 (permalink)  
Antiguo 12/08/2013, 12:35
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: PHPMailer error: Could not instantiate mail function

hhs, he probado eso que me has sujerido (Creo haberlo visto tambien en otro foro combinando phpmailer con prestashop y no me dio resultado)

Gato, podrías decirme en concreto que parte de phpinfo te da esa información?
  #16 (permalink)  
Antiguo 12/08/2013, 12: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: PHPMailer error: Could not instantiate mail function

La directiva se llama mail directamente, también revisa que valores tiene $params en tu código, solo pusiste $headers.

Saludos.
  #17 (permalink)  
Antiguo 12/08/2013, 13:40
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: PHPMailer error: Could not instantiate mail function

Los unicos 3 parametros con la palabra mail son estos en el phpinfo()



Params me devuelve [email protected]
  #18 (permalink)  
Antiguo 12/08/2013, 14:18
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años
Puntos: 47
Respuesta: PHPMailer error: Could not instantiate mail function

mira has incluido la libreria de phpmailer??
Estas creando la instancia correctamente??
  #19 (permalink)  
Antiguo 12/08/2013, 14:24
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: PHPMailer error: Could not instantiate mail function

Estas son las cabeceras que me devuelve la funcion antes de ser enviadas.

Código Cabeceras:
Ver original
  1. Date: Mon, 12 Aug 2013 22:26:20 +0200
  2. Return-Path:
  3. From: Borja
  4. Message-ID: <[email protected]>
  5. X-Priority: 3
  6. X-Mailer: PHPMailer 5.2.6
  7. MIME-Version: 1.0
  8. Content-Type: multipart/alternative;
  9. boundary="b1_624a55fa488fd7fb827a9ec4c9bee155"
  10. Content-Transfer-Encoding: 8bit

Alguna no se la esta tragando la funcion mail() y por eso no funciona.

Solucionado, era problema de la cabecera de From.
Al estar haciendo pruebas me inventé el email de cliente y debe ser que al poner [email protected] (O cosas similares) la funcion de mail no traga y no funciona.

Gracias a todos, en especial a Gatorv que me ha orientado muy bien.

Última edición por bNd170; 12/08/2013 a las 14:38

Etiquetas: function, html, mail, phpmailer
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 19:29.