2019-07-23 14:38:53 4924次浏览 2条回答 0 悬赏 10 金钱

注册填写不存在的邮箱(例如 666@qq.com )报错。

报错信息:预期的响应代码354,但得到代码“503”,消息“503错误:需要RCPT命令”

怎么破?

补充于 2019-07-25 11:18

你说得对,不是yii2的语法错误,的确是因为发送给不存在的邮箱就会这样报错,但是用户万一不小心把自己的邮箱多填或少填一个字符,而这个错误的邮箱地址压根就不存在,用户一提交,就会报错,报错是正常的,但是能不能像QQ邮箱那样报错啊,而不是yii2常见的出现一大堆乱码,我们程序员看还好,不懂技术的人一看,什么鬼!马上就把我辛辛苦苦做的网站关掉。我的意思是说:能不能把报错页面显示得优雅一些,看下面两张图:
这是yii2注册时填一个不存在的邮箱地址666@qq.com的报错信息页面:
QQ截图20190725111519.png
这是QQ邮箱给666@qq.com发信时的提示:
QQ截图20190725110545.png

补充于 2019-07-26 16:08

解决办法如下:
1.关闭入口文件的调试模式:把index.php文件的YII_DEBUG设置成false 。
2.在error.php文件内做判断,全部代码如下:
<?php

use yii\helpers\Html;

$this->title = $name;

?>

<h1><?= Html::encode($this->title) ?></h1>

<div class="alert alert-danger">
    <?php if(strpos($exception,'Expected response code 354 but got code "503"')){ ?>
        <?php echo '此邮箱不存在!请检查。';?>
    <?php }else{ ?>
        <?php echo nl2br(Html::encode($exception)) ?>
    <?php } ?>
</div>

<p>
    Web服务器处理您的请求时发生上述错误。
</p>
<p>
    如果您认为这是服务器错误,请联系我们。谢谢您。
</p>
<a href="<?= Yii::$app->request->referrer ?>">返回上一页</a><!-- 这个是我加上去的 -->


效果如下:
QQ截图20190725155502.png
  • 回答于 2019-07-25 07:22 举报

    注册过程会向邮件地址发邮件,可是邮件地址从语法上虽然是合法的,但是实际也许不存在。
    这个命令RCPT(其实就是receipt缩写)是填写收件人地址。
    第一:你可以试一下一个存在的邮箱,看是否能够发送成功;如果存在的可以发送成功,另一个不存在的邮箱发送报这个错,那么这应该就是不存在邮箱的正确报错了,应该提示注册用户更换为真正自己的邮箱;
    第二:你可以用邮件客户端(网页版或者电脑客户端,不是php的发邮件库代码)直接向666@qq.com发送一封邮件,看看啥响应。
    区别是业务错误还是语法错误。

  • 回答于 2019-07-25 15:09 举报
    • 关闭debug模式
    • 捕获发送短信异常
    3 条回复
    回复于 2019-07-25 15:59 回复

    你搞错了,不是发送短信,是发送邮件哦。关闭debug模式的话报错页面倒是不会很难看了,显示503内部服务器错误,不会出现一堆乱码了。不过我还是觉得好像有更好的解决办法,只不过我没想到。

    回复于 2019-07-25 16:17 回复

    捕获异常之后自己处理,无论是弹窗提示用户还是记录日志都行

    回复于 2019-07-25 21:42 回复

    线上产品应该关闭 debug 模式,按照这位 回答做就好了,那个报错就是个异常啊,把这个异常捕获出来,然后再提示一下前台说邮箱不存在就行了

您需要登录后才可以回答。登录 | 立即注册
王玉坛
职场新人

王玉坛 广州市

注册时间:2017-11-04
最后登录:2020-04-30
在线时长:4小时57分
  • 粉丝1
  • 金钱15
  • 威望0
  • 积分55

热门问题