我希望通过控制台使用Swift_SmtpTransport发送电子邮件。
相同的传输设置在common / config / main-local.php中工作,在console / config / main-local.php中不起作用。
在config / main-local.php的控制台中我有:
<?php
return [
'components' => [
'mail' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
'htmlLayout' => '@common/mail/layouts/html',
'textLayout' => '@common/mail/layouts/text', // custome layout
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'gator.hostgator.com',
'username' => 'test@pix.com',
'password' => '*******',
'port' => '465',
'encryption' => 'ssl',
],
],
],
];
使用此配置(并且通常设置相同且有效)我按命令加载脚本,没有电子邮件发送,也没有错误。
这个(我删除传输设置)我按命令运行相同的脚本,电子邮件发送确定:
<?php
return [
'components' => [
'mail' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
'htmlLayout' => '@common/mail/layouts/html',
'textLayout' => '@common/mail/layouts/text', // custome layout
],
],
];
在console / controllers / CronController中我有这个:
<?php
namespace console\controllers;
use yii\console\Controller;
use backend\models\Definicoes;
use common\models\Acordo;
use Yii;
/**
* Cron controller
*/
class CronController extends Controller {
public function actionIndex() {
$data_hoje = date('Y-m-d');
$model_definicoes = Definicoes::find()->one();
Yii::$app->mail->compose('@common/mail/cron_acordo', ['model_definicoes' => $model_definicoes])
->setFrom([Yii::$app->params['adminEmail'] => Yii::$app->params['nome']])
->setSubject('Alert')
->setTo('ideinto@gmail.com')
->send();
}
}
为什么会这样?我不能在控制台中使用传输?
谢谢!
答案 0 :(得分:2)
另一种检查传输设置是否正确的方法 你可以直接在CronController.php中设置传输
\Yii::$app->mail->setTransport( [
'class' => 'Swift_SmtpTransport',
'host' => 'gator.hostgator.com',
'username' => 'test@pix.com',
'password' => '*******',
'port' => '465',
'encryption' => 'ssl',
]);
在此行之前
Yii :: $ app-&gt; mail-&gt;撰写(&#39; @ common / mail / cron_acordo&#39;,[&#39; model_definicoes&#39; =&gt; $ model_definicoes])
答案 1 :(得分:0)
这是因为common/main.php
中的yii合并配置与您console/main.php
的合并配置。
重置您的配置以直接发送:
'mailer' => [
'useFileTransport' => false,
//other configs
]
请参阅文件:yii\mail\BaseMailer.php
,在第77-78
行注释:
/**
* @var boolean whether to save email messages as files under [[fileTransportPath]] instead of sending them
* to the actual recipients. This is usually used during development for debugging purpose.
* @see fileTransportPath
*/
public $useFileTransport = false;
答案 2 :(得分:0)
您应该确保console.php
中的配置正确,确保已配置密钥邮件程序。
祝你好运!
答案 3 :(得分:0)
所以,当我在寻找一个问题的答案时,我遇到了这个问题。我通过启用SwiftMailer的日志记录找到了我的问题的答案,最终发现&#34;发件人地址被拒绝:中继收件人表中的用户未知。&#34;基本上,我在&#34;来自&#34;中使用的邮件。控制台部分的地址与前端部分的地址不同,这就是问题,它甚至与配置无关。
我只能通过查看日志记录来解决这个问题,以便在您的Yii配置中启用日志记录,以及邮件&#39;组件(或您正在调用的任何组件)添加key =&gt;值对&#39; enableSwiftMailerLogging&#39; =&GT; true(此问题的位置示例:Config mailer parameters from model - Yii2)。然后,在您的日志组件配置中,在&#39; targets&#39;你需要添加
[
'class' => 'yii\log\FileTarget',
'categories' => ['yii\swiftmailer\Logger::add'],
]
这里略有记录:http://www.yiiframework.com/doc-2.0/yii-swiftmailer-logger.html
通过这样做,我能够查看日志(console / runtime / app.log),并找出它为什么不能从控制台正确发送,而是来自我的应用程序的其他区域