前言
本文主要介绍的是关于解决 Yii2 邮件发送返回成功但接收不到邮件问题的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:
刚刚用了一下 yii 邮件发送功能,虽然结果返回成功,但接收不到邮件。
配置文件代码如下:
- 'components' => [
- 'db' => [
- 'class' => 'yii\db\Connection',
- 'dsn' => 'mysql:host=localhost;dbname=yiidemo',
- 'username' => 'root',
- 'password' => 'root',
- 'charset' => 'utf8',
- ],
- 'mailer' => [
- 'class' => 'yii\swiftmailer\Mailer',
- 'viewPath' => '@common/mail',
- // send all mails to a file by default. You have to set
- // 'useFileTransport' to false and configure a transport
- // for the mailer to send real emails.
- 'useFileTransport' => true,
- 'transport' => [
- 'class' => 'Swift_SmtpTransport',
- 'host' => 'smtp.qq.com',
- 'username' => '********@qq.com',
- 'password' => '********',
- 'port' => '465',
- 'encryption' => 'ssl',
- ],
- ],
- ],
控制器代码:
- public $modelClass = 'common\models\User';
- public function actions()
- {
- $actions = parent::actions();
- // 禁用"create" 操作后可用自己在控制器中写的方法
- unset($actions['update'],$actions['create'],$actions['delete']);
- //$actions['index']['prepareDataProvider'] = [$this, 'prepareDataProvider'];
- return $actions;
- }
- public function actionCreate(){
- $request = Yii::$app->request;
- $params = $request->post();
- if($params){
- $fromName = $request->getBodyParam('fromName');
- $fromBady = $request->getBodyParam('fromBady');
- $toName = $request->getBodyParam('toName');
- $body = $request->getBodyParam('body');
- return $this->send($fromName,$fromBady,$toName,$body);
- }
- return false;
- }
- /*
- * Email Send function
- * @param1 $fromName
- * @param1 $toName
- * @param1 $body
- * $return boo1ean
- *
- */
- public function send($fromName,$fromBady,$toName,$body = ''){
- $mail = \Yii::$app->mailer->compose()
- ->setFrom([$fromName=>$fromBady])
- ->setTo($toName)
- ->setSubject('邮件发送配置')
- ->setTextBody($body) //发布纯文字文本
- ->send();
- if($mail){
- return [
- 'name' => [
- 'fromName' => $fromName,
- 'fromBady' => $fromBady,
- 'toName' => $toName,
- 'body' => $body,
- ],
- 'message' => '发生到['.$toName.']的邮件成功!',
- 'code' => 0,
- 'status' => 200,
- ];
- }else{
- return [
- 'name' => 'Error',
- 'message' => '发生到'.$toName.'的邮件失败!',
- 'code' => 0,
- 'status' => 402,
- ];
- }
- }
但是你会发现数据返回是成功的但是你却没收到邮件
解决方法:
这是你应该把
改成
- 'useFileTransport' => true
,
- 'useFileTransport' => false
并且你的邮箱密码是 qq 授权码(到你邮箱中的设置 -> 账户 查看)
通过以上努力你会成功接收邮件!
总结
来源: http://www.92to.com/bangong/2017/05-25/22233083.html