Как использовать swiftMailer в Yii2

Я не могу, наконец, понять, как использовать расширение swiftMailer в Yii2. Судя по тому, что на эту тему я не нашел вопросов, задание тривиальное, но до конца понять не смог.

есть примеры, которые не описать более подробно весь цикл отправки письма или я чего-то не понимаю :(

настройка

    return [
    //....
   'components' => [
    ......
    'mail' => [
      'class' => 'yiiswiftmailerMailer',
      'transport' => [
        'class' => 'Swift_SmtpTransport',
        'host' => 'localhost',
        'username' => 'username',
        'password' => 'password',
        'port' => '587',
        'encryption' => 'tls',
      ],
    ],
  ]
];

отправить

Yii::$app->mail->compose()
->setTo($toEmail)
->setFrom([$this->email => $this->name])
->setSubject($this->subject)
->setTextBody($this->body)
->send();

Я хочу получит конкретный рабочий пример. Спасибо.

P.S. Я скорректировал записи домена MX, DKIM, SPF добавил.

UPD (некоторый ответ):

E-mail, который передается в поле "От", по умолчанию проставляется в поле "обратный путь" должен быть существующий адрес. Некоторые провайдеры не разрешить отправку почты с несуществующих адресов электронной почты.

5 ответов


убедитесь,что вы инициализировали приложение в рабочей среде для отправки электронной почты из приложения, иначе оно будет записано в папку mailoutput.Или вручную отредактируйте файл конфигурации следующим образом.

в разделе компонентов вашего common/main-local.в PHP

'mail' => [
        'class' => 'yii\swiftmailer\Mailer',
        'viewPath' => '@backend/mail',
        'useFileTransport' => false,//set this property to false to send mails to real email addresses
        //comment the following array to send mail using php's mail function
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => 'smtp.gmail.com',
            'username' => 'username@gmail.com',
            'password' => 'password',
            'port' => '587',
            'encryption' => 'tls',
            ],
    ],

в контроллере

    \Yii::$app->mail->compose('your_view', ['params' => $params])
    ->setFrom([\Yii::$app->params['supportEmail'] => 'Test Mail'])
    ->setTo('to_email@xx.com')
    ->setSubject('This is a test mail ' )
    ->send();

Это должно работать! Надеюсь, это поможет вам!


вам не нужно использовать SMTP-транспорт с swiftmailer, только удалить 'useFileTransport' => true в файле конфигурации (app/config/web.php в базовом шаблоне) и письма потекут.

посмотрите в документах:

http://www.yiiframework.com/doc-2.0/ext-swiftmailer-index.html


внимание: эта опция больше не доступна, так как Mandrill был куплен Mailchimp

иногда могут быть проблемы с использованием SwiftMailer не зависит от вас. Как когда я использовал mail.ru почтовый сервер. Я нашел решение в сообществе laravel и implemend в Yii2.

вы можете использовать альтернативную службу, как https://mandrillapp.com/ (электронная почта 12к в месяц, 250 в течение часа свободна) и установка как ниже:

сообщество laravel / настройка почты с mandrill

'host' => 'smtp.mandrillapp.com',
'username' => 'user@domain.name',
'password' => 'oDLKswXZIkry8634f1jCDg', // new generated API key by mandrill
'port' => '587',
'encryption' => 'tls',

Если вы используете электронную почту Gmail, вы также можете столкнуться с проблемой безопасности. Вы можете отключить безопасность, разрешив приложению использовать свою учетную запись gmail.

Если вы вошли в систему с помощью Google ссылки ниже:

https://www.google.com/settings/security/lesssecureapps

надеюсь, что это поможет кому-то


Если вы используете базовый шаблон, вам нужно будет добавить

'viewPath' => '@app/mail',

в конфиге


на самом деле, вы должны использовать config key mailer вместо почта.

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

],