mail library framework ejemplo addattachment php email phpmailer

library - phpmailer pop3



Error de phpmailer "No se pudo crear una instancia de la función de correo" (15)

Debe asegurarse de que su dirección de origen sea una configuración válida de cuenta de correo electrónico en ese servidor.

Estoy usando el ejemplo básico de mail() modificado ligeramente para mi ID de usuario y obtengo el error "Error de correo: no se pudo crear una instancia de la función de correo"

si uso la función de correo -

mail($to, $subject, $message, $headers);

funciona bien, aunque tengo problemas para enviar html, por lo que estoy probando PHPMailer.

este es el código:

<?php require_once(''../class.phpmailer.php''); $mail = new PHPMailer(); // defaults to using php "mail()" $body = file_get_contents(''contents.html''); $body = eregi_replace("[/]",'''',$body); print ($body ); // to verify that I got the html $mail->AddReplyTo("[email protected]","my name"); $mail->SetFrom(''[email protected]'', ''my name''); $address = "[email protected]"; $mail->AddAddress($address, "her name"); $mail->Subject = "PHPMailer Test Subject via mail(), basic"; $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; $mail->MsgHTML($body); $mail->AddAttachment("images/phpmailer.gif"); // attachment $mail->AddAttachment("images/phpmailer_mini.gif"); // attachment if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message sent!"; } ?>


Estaba teniendo este problema al enviar archivos con caracteres regionales en sus nombres como: VęryRęgióńął file - name.pdf .

La solución fue borrar el nombre del archivo antes de adjuntarlo al correo electrónico.


Esto funcionó para mí

$mail->SetFrom("[email protected]","my name", 0); //notice the third parameter


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'';


Los documentos de ayuda de PHPMailer sobre github.com/PHPMailer/PHPMailer/wiki/… ayudaron a ponerme en el camino correcto.

Lo que encontramos es que php.ini no tenía definido el sendmail_path, así que lo agregué con sendmail_path = /usr/sbin/sendmail -t -i;


Necesitamos cambiar los valores de ''SMTP'' en el archivo php.ini El archivo php.ini está ubicado en

EasyPHP-DevServer-14.1VC11/binaries/php/php_runningversion/php.ini


Parece que en mi caso solo fue RECHAZO DEL SERVIDOR. Verifique la accesibilidad de su conexión de servidor de correo / smtp.


Por lo que vale, tuve este problema y tuve que entrar en cPanel donde vi el mensaje de error

"¡Atención! Registre sus ID de correo electrónico en correos que no sean smtp mediante el complemento cpanel. No se permitirán ID de correo electrónico no registrados en correos electrónicos no smtp enviados a través de scripts. Vaya a la sección Correo y encuentre el complemento" ID de correo registrado "en el tema paper_lantern. "

El registro de los correos electrónicos en cPanel (Register Mail IDs) y la espera de 10 minutos hicieron que el mío funcionara.

Espero que ayude a alguien.


Tuve este problema también. Mi solución fue desactivar Selinux. Intenté permitir 2 configuraciones de http diferentes en Selinux (algo así como httpd_allow_email y http_can_connect) y eso no funcionó, así que simplemente lo deshabilité por completo y comenzó a funcionar.


Tuve este problema, y ​​después de hacer algunas depuraciones y buscar me di cuenta de que el SERVIDOR (GoDaddy) puede tener problemas.

Te recomiendo que te pongas en contacto con tu proveedor de alojamiento web y hables con ellos acerca de las Quota Restrictions en la función de correo (Lo hacen para evitar que las personas hagan bots de correo no deseado o correo electrónico masivo (spam)).

Es posible que puedan informarle sobre sus límites y si los está excediendo. También puede posiblemente actualizar el límite yendo a un servidor privado.

Después de hablar con GoDaddy durante 15 minutos, el soporte técnico pudo resolverlo en 20 minutos.

Esto me ayudó mucho, y quería compartirlo, así que si alguien más se entera de esto, pueden probar este método si todo falla, o antes de intentar cualquier otra cosa.


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


Verifique si sendmail está habilitado, principalmente si su servidor es provisto por otra compañía.


su código se ve bien, ¿no olvidó instalar PostFix en su servidor?

sudo apt-get install postfix

funcionó para mí;)

Animar


Si está enviando archivos adjuntos y su código funciona para archivos adjuntos pequeños pero falla para archivos adjuntos de gran tamaño:

Si obtiene el error "No se pudo crear una instancia de la función de correo" cuando intenta enviar correos electrónicos grandes y su registro de errores de PHP contiene el mensaje "No se puede enviar el mensaje: Demasiado grande", entonces su agente de transferencia de correo (sendmail, postfix, exim, etc.) se niega a entregar estos correos electrónicos.

La solución es configurar el MTA para permitir archivos adjuntos más grandes. Pero esto no siempre es posible. La solución alternativa es usar SMTP . Necesitará acceso a un servidor SMTP (y credenciales de inicio de sesión si su servidor SMTP requiere autenticación):

$mail = new PHPMailer(); $mail->IsSMTP(); // telling the class to use SMTP $mail->SMTPAuth = true; // enable SMTP authentication $mail->Host = "mail.yourdomain.com"; // set the SMTP server $mail->Port = 26; // set the SMTP port $mail->Username = "yourname@yourdomain"; // SMTP account username $mail->Password = "yourpassword"; // SMTP account password

PHPMailer utiliza de forma predeterminada el uso de la función PHP mail() que usa la configuración de php.ini que normalmente usa de forma predeterminada sendmail (o algo similar). En el ejemplo anterior, reemplazamos el comportamiento predeterminado.


$mail->AddAddress($address, "her name");

debe cambiarse a

$mail->AddAddress($address);

Esto funcionó para mi caso ...