2016-03-02 2 views
3

Я работаю над проектом, где я бы хотел проверить электронные письма, отправляемые пользователям, но до сих пор мне не удавалось настроить его. Я использую Codeception и запускаю его внутри Vagrant. То, что я пытаюсь сделать сейчас:Отправка электронной почты с помощью swiftmailer с использованием расширения Yii2

return \Yii::$app->mailer->compose() 
->setFrom($from) 
->setTo($to) 
->setSubject('Welcome') 
->send(); 

У меня главное-local.php, который выглядит следующим образом:

'mailer'=> ['class' => 'yii\swiftmailer\Mailer', 
'viewPath' => '@common/mail', 
'transport' => [ 
'class' => 'Swift_SmtpTransport', 
'host' => 'localhost', 
'port' => 1025, 
'useFileTransport' => false, 
], 

На первый я ушел из 'useFileTransport' => false, затем я добавил его до «транспорта» и попытался переместить его внутри «транспорта», как вы можете видеть сейчас, но это то же самое. Файл/электронная почта создается в проекте как .eml-файл, но почта не отправляется. Я попробовал настроить mailcatcher (http://mailcatcher.me/) и фактически получил эту работу, но было бы неплохо, если бы я мог просто изменить конфигурацию, вместо использования другого метода и изменения кода, и почта будет отправлена ​​туда, где я этого хочу. (Я также пробовал с портом 1080, так что это не так.)

Любая помощь будет оценена. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать!

Update: я узнал, что у меня другой конфигурационный файл, где я на самом деле в состоянии использовать 'useFileTransport' => false, и тогда он не будет создавать файл/электронной почты в проекте, но до сих пор не отправлять его , Я скопировал настройки, показанные в главном-local.php в этот конфигурационном файл, переехал 'useFileTransport' => false вверх перед «транспортом», но я все еще ищу способ, чтобы отправить эти письма

ответ

1

Принял меня на несколько дней, но, наконец, нашел проблему!

Так что проблема была в другой конфигурации, упомянутой в разделе обновления. Скрытый внутри codeception/config/config.php не имеет строки

'mailer' => [ 
     'class' => 'yii\swiftmailer\Mailer', 
     'viewPath' => '@common/mail', 
     //For email creation in project 
     //'useFileTransport' => true, 
     'transport' => [ 
      'class' => 'Swift_SmtpTransport', 
      'host' => 'localhost', 
      'port' => 1025, 
      'encryption' => '', 
     ], 
    ], 

Все, что мне нужно, это шифрование, которое просто должно быть пустым. В настоящее время отправляются электронные письма, как они должны, и выглядят хорошо!

Надеюсь, это поможет кому-то там, счастливое тестирование!

2

$useFileTransport является собственностью yii\swiftmailer\Mailer класса, поэтому он не относится к части transport.

Если ваша почтовая программа сконфигурирована как следующий, он будет пытаться доставить почту через SMTP на почтовый сервер работает на вашем локальном хосте порт 1025:

'mailer'=> [ 
    'class' => 'yii\swiftmailer\Mailer', 
    'viewPath' => '@common/mail', 
    'useFileTransport' => false, 
    'transport' => [ 
     'class' => 'Swift_SmtpTransport', 
     'host' => 'localhost', 
     'port' => 1025, 
    ], 
], 

Это звучит как-то необычно для меня, как порт по умолчанию для SMTP - 25.

Убедитесь, что SMTP-сервер фактически запущен на этом порту. Например. используя telnet команду:

telnet localhost 1025 

который должен дать вам что-то вроде этого:

Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
220 your.servername ESMTP Postfix 

Выход на SMTP-сессии, набрав quit и нажмите клавишу ВВОД.

Вы также можете проверить файл журнала почтового сервера, который обычно находится по адресу /var/log/mail.log. Вы можете просматривать сообщения, которые регистрируются с помощью

tail -f /var/log/mail.log 

, пока вы пытаетесь их отправить.

+0

Благодарим вас за ответ! Причина, по которой я использую порт 1025, заключается в том, что я использую mailcatcher, который по умолчанию соответствует порту 1025 :) – AggaMax