首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用phpmailer时发现问题和显示错误

使用phpmailer时发现问题和显示错误
EN

Stack Overflow用户
提问于 2020-01-07 20:56:14
回答 1查看 118关注 0票数 0

我有一个简单的HTML表单,它使用服务器端的PHP文件使用PHPMailer代码发送邮件。一切工作非常顺利,我能够得到所有成功的邮件传输确认。

我遇到的问题是,我只能捕获和重定向成功的邮件传输消息,而不能捕获和重定向失败消息。我所做的是使用PHPMailer推荐的“尝试和捕获”方法捕获错误,然后使用一个条件if语句测试$ mail ->send()值的true和false,以确定邮件是否发送成功,并相应地将页面指向我的错误或成功页面。

应该注意,我正在测试这是一种非ajax备份方法,以防用户在客户端禁用JavaScript。ajax方法运行良好。

我试图通过发送没有互联网连接的表单来模拟邮件发送失败,或者禁用PHP文件中的一些代码,如"$ mail ->Port“或"$mail->Host",甚至是网关密码。我的条件语句总是呈现一个"false“值,从而显示成功消息。

下面是PHP代码的相关部分:

代码语言:javascript
复制
/* Create a new PHPMailer object. Passing TRUE to the constructor enables exceptions. */
$mail = new phpmailer( TRUE );
//
/* Open the try/catch block. */
try {
//
/* Set the mail sender. */
$mail->setFrom( 'mail-sender@gmail.com', 'mail-sender name' );
//
/* Add a recipient. */
//set who is recieving mail
$mail->addAddress( 'receipient@hotmail.com' );
//
/* Set the subject. */
$mail->Subject = 'New Order Request Message';
//
/* Set email to be sent as HTML */
$mail->isHTML( true );
//
/* Set the mail message body. */
$mail->Body = "<h3>New Order Request Message.</h3>
<style>
table, {
border: 1px solid black;
background-color: #f8f9f9 ;
}
}
td {
padding: 5px;
}
</style>
<div>
//
<table>
<tr>
<td>First Name: </td>
<td>$firstName</td> 
</tr>
<tr>
<td>Last Name: </td>
<td>$lastName</td> 
</tr>
<tr>
<td>Email: </td>
<td>$email</td>
</tr>
<tr>
<td>Telephone: </td>
<td>$telephone</td>
</tr>
<tr>
<td>Message: </td>
<td>$message: </td> 
</tr>
</table>
//
</div>";
//
/* SMTP parameters. */
/* Tells PHPMailer to use SMTP. */
$mail->isSMTP();
//
/* SMTP server address. */
$mail->Host = "smtp.gmail.com";
//
/* Use SMTP authentication. */
$mail->SMTPAuth = TRUE;
//
/* Set the encryption system. */
$mail->SMTPSecure = 'ssl';
//
//set who is sending mail
$mail->setFrom( 'myaccount@hotmail.com', 'My Name' );
//
//set login details for gmail account
$mail->Username = 'login-name@gmail.com';
$mail->Password = 'loing-password';
//
/* Set the SMTP port. */
$mail->Port = 465;
//      
/* Finally send the mail. */
$mail->send();
} catch (phpmailerException $e) {
} catch ( Exception $e ) {
} catch ( \Exception $e ) {
}
//
if(!$mail->send()) {
$mail_failure = "Something wrong happened. Mail was not sent."; 
$_SESSION["mail-failure"] = $mail_failure;
header("Location: form-errors.php");
} else {
$mail_success = "Mail sent successfully. Thank you.";   
$_SESSION["mail-success"] = $mail_success;
header("Location: form-success.php");
};
exit;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-07 21:13:32

您要发送两次消息,第二次是在try块之外,因此发生的任何错误都不会被捕获。你也在捕捉不存在的异常。这样做吧:

代码语言:javascript
复制
   $mail->send();
} catch ( Exception | \Exception $e ) {
    $_SESSION["mail-failure"] = "Something went wrong. Mail was not sent: " . $e->getMessage();
    header("Location: form-errors.php");
    exit;
}
$_SESSION["mail-success"] = "Mail sent successfully. Thank you.";
header("Location: form-success.php");
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59635952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档