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

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

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

Настройка

    return [
    //....
   'components' => [
    ......
    'mail' => [
      'class' => 'yii\swiftmailer\Mailer',
      '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, который передается в поле "От", по умолчанию помещается в поле "Возврат-путь" должен быть существующим адресом. Некоторые провайдеры не разрешить отправку почты с несуществующих адресов электронной почты.

Ответ 1

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

В разделе компонентов вашего общего /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 mail function
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => 'smtp.gmail.com',
            'username' => '[email protected]',
            'password' => 'password',
            'port' => '587',
            'encryption' => 'tls',
            ],
    ],

В вашем контроллере

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

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

Ответ 2

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

Взгляните в документы:

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

Ответ 3

Предупреждение: этот вариант больше недоступен, поскольку Mandrill был куплен Mailchimp

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

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

Сообщество laravel/установочная почта с мандрилем

'host' => 'smtp.mandrillapp.com',
'username' => '[email protected]',
'password' => 'oDLKswXZIkry8634f1jCDg', // new generated API key by mandrill
'port' => '587',
'encryption' => 'tls',

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

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

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

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

Ответ 4

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

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

в конфигурацию

Ответ 5

На самом деле, вы должны использовать конфигурационный ключ почтовой программы вместо почты.

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

Ответ 6

Опция безопасности Google Gmail

https://myaccount.google.com/lesssecureapps

Путь к файлу проекта

config\web.php
'mailer' => [
    'class' => 'yii\swiftmailer\Mailer',
    'useFileTransport' => false,
    'transport' => [
        'class' => 'Swift_SmtpTransport',
        'host' => 'smtp.gmail.com',  
        'username' => '[email protected]',
        'password' => 'email_password',
        'port' => '465',
        'encryption' => 'ssl',
        'streamOptions' => [ 
            'ssl' => [ 
            'allow_self_signed' => true,
            'verify_peer' => false,
            'verify_peer_name' => false,
            ],
        ]
    ]
],

Добавить функцию внутри вашего контроллера

public function actionSend() {
    $send = Yii::$app->mailer->compose()
    ->setFrom('[email protected]')
    ->setTo('[email protected]')
    ->setSubject('Test Message')
    ->setTextBody('Plain text content. YII2 Application')
    ->setHtmlBody('<b>HTML content <i>Ram Pukar</i></b>')
    ->send();
    if($send){
        echo "Send";
    }
}