2015-04-12 2 views
1

Я хочу отправить электронную почту через мою учетную запись gmail.Yii2 SwiftMailer, отправляющий электронную почту через удаленный smtp-сервер (gmail)

Моя почтовая программа конфигурации:

[ 
'class' => 'yii\swiftmailer\Mailer', 
'useFileTransport' => false,//set this property to false to send mails to real email addresses 
'transport' => [ 
    'class' => 'Swift_SmtpTransport', 
    'host' => 'smtp.gmail.com', 
    'username' => '[email protected]', 
    'password' => 'pass', 
    'port' => '587', 
    'encryption' => 'tls', 
    ], 
] 

Я написал команду MailController:

<?php 

namespace app\commands; 

use yii\console\Controller; 
use Yii; 

/** 
* Sanding mail 
* Class MailController 
* @package app\commands 
*/ 
class MailController extends Controller 
{ 
    private $from = '[email protected]'; 
    private $to = '[email protected]'; 

    public function actionIndex($type = 'test', $data = null) 
    { 
     Yii::$app->mailer->compose($type, ['data' => $data]) 
      ->setFrom($this->from) 
      ->setTo($this->to) 
      ->setSubject($this->subjects[$type]) 
      ->send(); 
    } 
} 

Когда я пытаюсь запустить: php yii mail

я получаю: sh: 1: /usr/sbin/sendmail: not found

Но почему он требует sendmail, если я хочу только SMTP-подключение к smtp.gmail .com?

+0

Вы уверены, что этот компонент электронной почты конфигурации для ключа «почтовик»? В соответствии с этой конфигурацией даже не предполагается отправлять электронную почту как «useFileTransport» => true »означает, что она сохраняет сообщение только в файл. –

ответ

6

Я думаю, что вы неправильно настроили почтовую программу. Потому что он по-прежнему использует почтовую функцию по умолчанию. С documentation конфигурация должна быть как показано ниже. Почта должна быть внутри components.

'components' => [ 
    ... 
    'mailer' => [ 
     'class' => 'yii\swiftmailer\Mailer', 
     'transport' => [ 
      'class' => 'Swift_SmtpTransport', 
      'host' => 'smtp.gmail.com', 
      'username' => 'username', 
      'password' => 'password', 
      'port' => '587', 
      'encryption' => 'tls', 
     ], 
    ], 
    ... 
], 

Еще одно предложение заключается в использовании порта «465» и шифрование как «SSL» вместо порта «587», «шифрования TLS».

+0

Ooops. Я забыл, что у команд есть собственный файл конфигурации, а не web.php. Теперь почта работает нормально. – ZeiZ

+2

@zeiz Если вы нашли решение, разместите его как ответ и примите его. Так что это будет полезно для других. –

2

Yii2 Имеет разные конфигурационные файлы для работы в Интернете и в консоли. Поэтому вам нужно настроить оба из них. Что касается этого вопроса, я должен был сделать почтовый конфигурационный файл (например mailer.php) и включить его в обоих файлах конфигурации (web.php & console.php) как:

'components' => [ 
    ... 
    'mailer' => require(__DIR__ . '/mailer.php'), 
    ... 
], 
Смежные вопросы