Manejo de errores con PHPMailer
Estoy intentando utilizar PHPMailer para un proyecto pequeño, pero estoy un poco confundido acerca del manejo de errores con este software. Esperando que alguien tenga experiencia con eso. Cuando configuro un correo electrónico y uso:
$result = $mail->Send();
if(!$result) {
// There was an error
// Do some error handling things here
} else {
echo "Email successful";
}
Lo cual funciona bien, más o menos. El problema es que cuando hay un error, PHPMailer también parece reflejar el error, por lo que si hay un problema, simplemente envía esa información directamente al navegador, esencialmente interrumpiendo cualquier manejo de errores que esté tratando de hacer.
¿Hay alguna manera de silenciar estos mensajes? No genera una excepción, simplemente imprime el error, que en mi caso de prueba es:
invalid address: @invalid@email You must provide at least one recipient email address.
Se supone que es un error, pero debería residir en $mail->ErrorInfo; el software no hace eco.
PHPMailer utiliza excepciones. Intente adoptar el siguiente código :
require_once '../class.phpmailer.php';
$mail = new PHPMailer(true); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch
try {
$mail->AddReplyTo('[email protected]', 'First Last');
$mail->AddAddress('[email protected]', 'John Doe');
$mail->SetFrom('[email protected]', 'First Last');
$mail->AddReplyTo('[email protected]', 'First Last');
$mail->Subject = 'PHPMailer Test Subject via mail(), advanced';
$mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically
$mail->MsgHTML(file_get_contents('contents.html'));
$mail->AddAttachment('images/phpmailer.gif'); // attachment
$mail->AddAttachment('images/phpmailer_mini.gif'); // attachment
$mail->Send();
echo "Message Sent OK\n";
} catch (phpmailerException $e) {
echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
echo $e->getMessage(); //Boring error messages from anything else!
}
Puede obtener más información sobre el error con el método $mail->ErrorInfo
. Por ejemplo:
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
Esta es una alternativa al modelo de excepción con el que debe activarse new PHPMailer(true)
. Pero si puede usar el modelo de excepción, úselo como respuesta de @Phil Rykoff.
Esto proviene de la página principal de PHPMailer en github https://github.com/PHPMailer/PHPMailer .