【发布时间】:2019-12-18 21:52:46
【问题描述】:
我正在使用 Swiftmailer 发送电子邮件,我目前有一个 try/catch 块来查看基于 Swift_RfcComplianceException 的电子邮件地址是否有效。我目前捕捉到错误并在屏幕上输出 $e->getMessage() 错误。在电子邮件的表单提交中,如果电子邮件发送成功,我设置了一个变量来吐出成功消息。
问题:如何根据我的 Swiftmail 文件是否捕获到异常,使用相同的 flash 消息区域输出错误消息。以及如何使这发生在同一页面上?我没有使用 AJAX,而是使用 Page Post Back。现在我得到的只是一个带有文本的白屏,我希望错误消息是提交表单的位置。谢谢。
HTML
<?php if(isset($_SESSION['message'])):?>
<div id="success-alert" class="alert alert-success text-center">
<?php
echo $_SESSION['message'];
unset($_SESSION['message']);
?>
</div>
<?php elseif(isset($_SESSION['email_error'])) :?>
<div id="success-alert" class="alert alert-success text-center">
<?php
echo $_SESSION['email_error'];
unset($_SESSION['email_error']);
?>
</div>
<?php endif; ?>
Swiftmailer
try {
// Create a message
$message = (new Swift_Message($_POST['subject']))
->setFrom('ME@YOU.COM')
->setTo($finalEmailList) //Array of email address
->setBody($_POST['message'], 'text/html')
->setReplyTo('you@me.com');
} catch (Swift_RfcComplianceException $e) {
print($e->getMessage());
}
PHP
if (isset($_POST['submit_email'])) {
require_once 'views/Swiftmail.php';
$_SESSION['message']= "Email Sent Successfully";
$_SESSION['email_error'] = "Invalid Email Address Entered";
}
【问题讨论】:
-
究竟是什么阻止了您以同样的方式设置消息?
-
如果一封电子邮件成功通过,则会出现成功消息,因此它会重定向回同一页面,然后会吐出一条消息。如果电子邮件发送失败,异常会停止表单提交,并且基本上会死在异常捕获块上,只是吐出错误消息,而不继续返回提交表单的同一页面
-
在异常块中回显所需的元素..?
-
@Laif,你的意思是上面的 html div(错误)?
-
"异常停止表单提交" 不,它没有。那时表格已经提交。
catch之后的所有事情仍然会发生(除非你在catch中明确地die或exit,你上面的代码没有显示你在做什么)。所以只需在catch中设置您的错误消息。
标签: php html swiftmailer