Почта

Различные вопросы по установке и настройке фреймворка, конфигурции веб-сервера и IDE.
Ответить
Александр Гавриленко
Сообщения: 70
Зарегистрирован: 2017.02.05, 07:46

Почта

Сообщение Александр Гавриленко » 2017.07.10, 14:12

Здравствуйте!!!
Возникает периодически проблема с отправкой почты. Не могу понять логику происходящего.
Почта с хостинга, то отправляется, то не отправляется. На локалке все нормально: отправляется постоянно.
Часть кода модели:

Код: Выделить всё

public $toEmail = ['agavrilenko@belstekloprom.com', 'bspgomel@gmail.com']; //на какую почту будут приходить письма

public function sendEmail()
    {
        if ($this->validate()) {
            Yii::$app->mailer->compose()
                ->setTo($this->toEmail)
                ->setFrom([$this->email => $this->name])
                ->setReplyTo([$this->email => $this->name])
                ->setSubject($this->subject)
                ->setTextBody($this->body)
                ->send();

            return true;
        } else {
            return false;
        }

    }
Часть кода контроллера:

Код: Выделить всё

$model = new ContactForm();
        if ($model->load(Yii::$app->request->post())) {
            if ($model->sendEmail()){
                Yii::$app->session->setFlash('success', 'Спасибо за Ваше письмо. Мы постараемся как можно быстрее Вам ответить!');
                return $this->refresh();
            } else {
                Yii::$app->session->setFlash('error', 'Внимание! Ваше письмо по каким-то причинам не отправлено!!!');
            }
        }
Часть кода настройки конфига:

Код: Выделить всё

'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'useFileTransport' => false,
            /*'transport' => [
	            'class' => 'Swift_SmtpTransport',
	            'host' => 'smtp.mail.ru',
	            'username' => 'goric0312@mail.ru',
	            'password' => '*********************',
	            'port' => '465',
	            'encryption' => 'ssl',
	        ],*/
        ],
Обязательно ли в main.php - конфигурационном файле указывать метод 'transport'?
Если я его включаю, то почта вообще не приходит и выдает ошибку.
А без него, то приходит, то не приходит почта. Не пойму.
Сообщение об отправленной почте высвечивается, а сама почта, то приходит, то не приходит.
Спасибо.

WalpeR
Сообщения: 64
Зарегистрирован: 2016.08.29, 17:21

Re: Почта

Сообщение WalpeR » 2017.07.10, 14:38

Если в setTo() массив, письма придут на оба все адреса. Метод send возвращает boolean
@return bool whether this message is sent successfully.
Можно по нему проверить

->setFrom([$this->email => $this->name]) Тут goric0312@mail.ru или иной?
Последний раз редактировалось WalpeR 2017.07.10, 15:27, всего редактировалось 1 раз.

Аватара пользователя
girmate
Сообщения: 1533
Зарегистрирован: 2015.10.27, 12:52

Re: Почта

Сообщение girmate » 2017.07.10, 15:02

У меня на хостинге была проблема с отправкой пока я не завел почтовый ящик, с которого должны были отправляться письма. На яндекс уходили на mail.ru - нет. Хостер посмотрел свои логи и посоветовал создать почтовый ящик. С тех пор все работало как часы.
Осторожно! Вы общаетесь с новичком ;)

Nerf
Сообщения: 780
Зарегистрирован: 2015.01.29, 00:37

Re: Почта

Сообщение Nerf » 2017.07.10, 15:15

transport НЕ обязательно указывать, в таком случае будет использоваться mail() со всеми вытекающими (на сервере должна быть настроена отправка писем).

Александр Гавриленко
Сообщения: 70
Зарегистрирован: 2017.02.05, 07:46

Re: Почта

Сообщение Александр Гавриленко » 2017.07.11, 14:22

Вроде бы разобрался сам.
Может кому поможет.
В модели в методе setFrom() должен быть прописан тот же email, что и в конфигурационном файле main.php т.е.
Модель:

Код: Выделить всё

public $toEmail = ['agavrilenko@belstekloprom.com', 'bspgomel@gmail.com']; //на какую почту будут приходить письма

public function sendEmail()
    {
        if ($this->validate()) {
            Yii::$app->mailer->compose()
                ->setTo($this->toEmail)
                ->setFrom(['goric0312@mail.ru' => $this->name])
                ->setReplyTo([$this->email => $this->name])
                ->setSubject($this->subject)
                ->setTextBody($this->body)
                ->send();

            return true;
        } else {
            return false;
        }

    }
Конфигурационный файл:

Код: Выделить всё

'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'useFileTransport' => false,
            /*'transport' => [
	            'class' => 'Swift_SmtpTransport',
	            'host' => 'smtp.mail.ru',
	            'username' => 'goric0312@mail.ru',
	            'password' => '*********************',
	            'port' => '465',
	            'encryption' => 'ssl',
	        ],*/
        ],
Тогда все отправляется по smtp через mail.ru
Пробовал настроить через gmail.com, возникают некоторые сложности: надо Предоставить доступ к аккаунту Google https://accounts.google.com/DisplayUnlockCaptcha и еще разрешить из своего аккаунта доступ Неизвестным устройствам.
Вроде бы должно работать, но выскакивает сообщение, что письмо не отправлено. Надо, думаю, что-то дополнительно прописывать в модели, какой-то добавлять метод. Если кто знает пишите!

Ответить