No se ha podido crear una instancia de la función de correo. Por qué ocurre este error

Cuando bash enviar correo a través de PHPMailer, recibo este mensaje de error. Mi código está abajo:

From = "rajasekar.kcet@gmail.com"; $mail->FromName = "Rajasekar"; $mail->AddAddress("rajasekar.kcet@gmail.com"); // This is the adress to witch the email has to be send. $mail->Subject = "First PHP Email message"; // This is the subject of the email message. $mail->Body = "Hi! \n\n This is my first e-mail sent through PHP."; // This is the actual email message if(!$mail->Send()) // Now we send the email and check if it was send or not. { echo 'Message was not sent.'; echo 'Mailer error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent.'; } ?> 

En Ubuntu (al menos 12.04) parece que sendmail no está instalado por defecto. Tendrás que instalarlo usando el comando sudo apt-get install sendmail-bin

Es posible que también deba configurar los permisos adecuados para ello como se mencionó anteriormente.

Usé esta línea de código

 if($phpMailer->Send()){ echo 'Sent.
'; }else{ echo 'Not sent:
'.print_r(error_get_last(), true).'

'; }

para descubrir cuál era el problema Resulta que, me estaba ejecutando en modo seguro, y en la línea 770 o algo así, un quinto argumento, $params , se le dio a mail() , que no es compatible cuando se ejecuta en modo seguro. Simplemente lo comenté, y voilá, funcionó:

 $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header/*, $params*/); 

Está dentro de la MailSend MailSend de PHPMailer.

Acabo de tener este problema y encontré en mi registro de error de apache que no se había instalado sendmail, ¡después de la instalación todo estaba funcionando como debería!

 root@web1:~$ tail /var/log/apache2/error.log sh: 1: /usr/sbin/sendmail: not found 

Tenía el mismo problema. Acabo de buscar error.log archivo error.log apache2 y dijo exactamente cuál era el problema:

 > sh: /usr/sbin/sendmail: Permission denied 

Entonces, la solución era otorgar los permisos adecuados para el archivo /usr/sbin/sendmail (no se podía acceder desde php).

El comando para hacer esto sería:

 > chmod 777 /usr/sbin/sendmail 

¡asegúrese de que incluso exista!

Asegúrese de incluir también la clase smtp que viene con phpmailer:

 // for mailing require("phpmailer/class.phpmailer.php"); require("phpmailer/class.smtp.php"); 

Intente usar SMTP para enviar correos electrónicos: –

 $mail->IsSMTP(); $mail->Host = "smtp.example.com"; // optional // used only when SMTP requires authentication $mail->SMTPAuth = true; $mail->Username = 'smtp_username'; $mail->Password = 'smtp_password'; 

Para volver a visitar un hilo viejo, mi problema era que una de las direcciones de correo electrónico “AddressTo” no era válida. La eliminación de esa dirección de correo electrónico eliminó el error.

Pruebe con una dirección que no sea gmail. No permiten (hasta donde yo sé) el acceso de smpt para enviar correos. Estaba haciendo un simple progtwig de correo la semana pasada y tampoco usan puertos predeterminados para enviar y requieren que los transporte a través de https

Verifique con su anfitrión para ver si tienen algún límite por hora a los correos electrónicos que se envían.

Esto es un error del sistema

Compruebe el error del sistema con:

 tail /var/log/httpd/error_log 

Puede ser cualquier razón.

Como se señala aquí , “Esto significa que su instalación de PHP no está configurada para llamar correctamente a la función mail () (por ejemplo, sendmail_path no está configurado correctamente en su php.ini), o no tiene un servidor de correo local instalado y configurado”.

En mi caso, tuve que permitir la función mail () (“activar la cola del correo ()”) en la configuración de mi servidor web.

“No se pudo crear una instancia de la función de correo” es la manera en que PHPMailer informa que la llamada al correo () (en la extensión de Correo) falló. (Entonces está usando el progtwig de “correo postal”).

Podría intentar eliminar los @s antes de las llamadas a mail () en PHPMailer :: MailSend y ver qué errores, si los hay, se están descartando silenciosamente.

he resuelto mi problema (por wamp)

  $mail->IsSMTP(); $mail->Host='hote_smtp'; 

de corse cambiar hote_smtp por el valor correcto

Un hilo antiguo, pero puede ayudar a alguien como yo. Resolví el problema al configurar el valor del servidor SMTP en un valor legítimo en PHP.ini

Solo volviendo a visitar el hilo antiguo puede depurar PHPMailer en profundidad agregando:

 print_r(error_get_last()); 

esto imprimirá el error exacto que está causando que se rompa el correo de php () predeterminado.

Espero que ayude a alguien.

Yo tenía el mismo error. La respuesta fue la causa del problema. Lo quité.

 $email->AddReplyTo( $admin_email, $admin_name ); 

En CentOS esto podría ser causado por la política de SELinux. Ejecute el siguiente código para ver si está habilitado.

 getsebool httpd_can_sendmail 

Puede habilitarlo llamando al siguiente comando. El parámetro -P lo hace permanente.

 setsebool -P httpd_can_sendmail 1