Проблема с swiftmailer в Yii2.0.31 basic

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Шлфк
Сообщения: 12
Зарегистрирован: 2018.04.25, 12:17
Откуда: СССР

Проблема с swiftmailer в Yii2.0.31 basic

Сообщение Шлфк » 2020.01.16, 16:32

Коллеги, приветствую!

Имею такую ситуацию: сервер под CentOs, два пользователя, два сайта. Настройки пользователей одинаковые. Один сайт (под первым пользователем) на Yii2.0.15.1 basic, на нем всё работает прекрасно.
Второй сайт (под вторым пользователем) на Yii2.0.31 basic, на нем есть проблема с отправкой почты через swiftmailer: в каталог /runtime/debug/mail копии писем сохраняются, а вот на почту отправки не происходит. При этом вызов Yii::$app->mailer->compose() ... ->send(); отрабатывает, ошибки не возникает.

В конфиге (web.php) прописано так:

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

'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => false,
        ],
В модели ContactForm.php

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

public function contact($email)
    {
        $subject = 'Письмо с сайта SiteName: '.$this->subject;
        if ($this->validate()) {
            Yii::$app->mailer->compose()
                ->setTo(Yii::$app->params['agentEmail'])
                ->setFrom([$this->email => $this->name])
                ->setSubject($subject)
                ->setTextBody($this->body)
                ->send();
        //  + добавляем отправку копии сообщения админу
            Yii::$app->mailer->compose()
                ->setTo(Yii::$app->params['adminEmail'])
                ->setFrom([$this->email => $this->name])
                ->setSubject($subject)
                ->setTextBody($this->body)
                ->send();
            return true;
        }
        return false;
    }
Лог exim выглядит следующим образом:

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

[root@ispmanager ~]# tail -f /var/log/exim/main.log
...
2020-01-16 15:50:36 U=user F=<email@client.com> rejected RCPT <email@target.com>: relay not permitted
2020-01-16 15:50:36 U=user F=<email@client.com> rejected RCPT <admin@email.ru>: relay not permitted
2020-01-16 16:16:24 U=user F=<email@client.com> rejected RCPT <email@target.com>: relay not permitted
2020-01-16 16:16:24 U=user F=<email@client.com> rejected RCPT <admin@email.ru>: relay not permitted
Где:
user - это пользователь CentOs под которым работает сайт,
email@client.com - адрес, введенный в форме отправки обратной связи и пришедший в функцию contact($email),
email@target.com - адрес из Yii::$app->params['agentEmail'],
admin@email.ru - адрес из Yii::$app->params['adminEmail'].

Помогите, пожалуйста, разобраться, в чем может быть причина?

yiiliveext
Сообщения: 779
Зарегистрирован: 2019.08.13, 01:49

Re: Проблема с swiftmailer в Yii2.0.31 basic

Сообщение yiiliveext » 2020.01.16, 16:36

Вам нужно настроить транспопрт в yii\swiftmailer\Mailer

Аватара пользователя
Шлфк
Сообщения: 12
Зарегистрирован: 2018.04.25, 12:17
Откуда: СССР

Re: Проблема с swiftmailer в Yii2.0.31 basic

Сообщение Шлфк » 2020.01.16, 16:42

yiiliveext писал(а):
2020.01.16, 16:36
Вам нужно настроить транспопрт в yii\swiftmailer\Mailer
Как именно?
И почему для полностью аналогичного (практически - копипаста) сайта но на Yii2.0.15.1 никаких настроек не требуется. почта отправляется без них?

yiiliveext
Сообщения: 779
Зарегистрирован: 2019.08.13, 01:49

Re: Проблема с swiftmailer в Yii2.0.31 basic

Сообщение yiiliveext » 2020.01.16, 16:50

Шлфк писал(а):
2020.01.16, 16:42
yiiliveext писал(а):
2020.01.16, 16:36
Вам нужно настроить транспопрт в yii\swiftmailer\Mailer
Как именно?
И почему для полностью аналогичного (практически - копипаста) сайта но на Yii2.0.15.1 никаких настроек не требуется. почта отправляется без них?
Насколько я помню, в последних версиях swiftmailer не поддерживается sendmail.
Транспорт так

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

'transport' => [
                        'class' => 'Swift_SmtpTransport',
                        'host' => $smtpHost,
                        'username' => $smtpUsername,
                        'password' => $smtpPassword,
                        'port' => $smtpPort,
                    ],

Аватара пользователя
Шлфк
Сообщения: 12
Зарегистрирован: 2018.04.25, 12:17
Откуда: СССР

Re: Проблема с swiftmailer в Yii2.0.31 basic

Сообщение Шлфк » 2020.01.17, 12:47

yiiliveext писал(а):
2020.01.16, 16:50
Насколько я помню, в последних версиях swiftmailer не поддерживается sendmail.
Поддерживается, но нужно правильно указать транспорт.

Я пробовал вот так:

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

'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => false,
            'transport' => [
                'class' => 'Swift_SendmailTransport',
                'command' => '/usr/sbin/exim -bs',
            ]
        ],
не заработало.

В общем, продолжаю искать...

P.S. SMTP использовать нельзя "по политическим соображениям" :)

yiiliveext
Сообщения: 779
Зарегистрирован: 2019.08.13, 01:49

Re: Проблема с swiftmailer в Yii2.0.31 basic

Сообщение yiiliveext » 2020.01.17, 13:17

Да, посмотрел, поддерживается, это я с Swift_MailTransport перепутал.
Попробуйте так

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

'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => false,
            'transport' => [
                'class' => 'Swift_SendmailTransport',
                'constructArgs' => [
                     'command' => '/usr/sbin/exim -bs',
                ],
               
            ]
        ],

Аватара пользователя
Шлфк
Сообщения: 12
Зарегистрирован: 2018.04.25, 12:17
Откуда: СССР

Re: Проблема с swiftmailer в Yii2.0.31 basic

Сообщение Шлфк » 2020.01.17, 13:45

Не помогло, к сожалению... Все равно в логе exim'а
2020-01-17 13:42:01 U=user F=<email@client.com> rejected RCPT <email@target.com>: relay not permitted
2020-01-17 13:42:01 U=user F=<email@client.com> rejected RCPT <admin@email.ru>: relay not permitted

yiiliveext
Сообщения: 779
Зарегистрирован: 2019.08.13, 01:49

Re: Проблема с swiftmailer в Yii2.0.31 basic

Сообщение yiiliveext » 2020.01.17, 14:24

Шлфк писал(а):
2020.01.17, 13:45
Не помогло, к сожалению... Все равно в логе exim'а
2020-01-17 13:42:01 U=user F=<email@client.com> rejected RCPT <email@target.com>: relay not permitted
2020-01-17 13:42:01 U=user F=<email@client.com> rejected RCPT <admin@email.ru>: relay not permitted
Из консоли на сервере отправить попробуйте, это скорее проблема в настройках exim.
https://www.opennet.ru/openforum/vsluhf ... =dawnshade

Аватара пользователя
Шлфк
Сообщения: 12
Зарегистрирован: 2018.04.25, 12:17
Откуда: СССР

Re: Проблема с swiftmailer в Yii2.0.31 basic

Сообщение Шлфк » 2020.01.17, 14:39

yiiliveext писал(а):
2020.01.17, 14:24
Из консоли на сервере отправить попробуйте, это скорее проблема в настройках exim.
https://www.opennet.ru/openforum/vsluhf ... =dawnshade
В том-то и дело, что нет! Уже проверяли, неоднократно. Во первых, как я уже писал, на том же сервере, под другим пользователем, с такими же настройками, но с более ранней версией Yii2 (и, соответственно, swiftmailer) всё отрабатывает. Во вторых, пробовал из консоли - письмо уходит, всё в порядке. В третьих, если вместо Yii::$app->mailer->compose()-send() использовать старый добрый PHP-шный mail(), то тоже всё отправляется и приходит, всё в порядке.

Т.е. явно что-то с swiftmailer не то. Или ошибка (что маловероятно, наверное), либо (что наиболее вероятно) я не так или не все настройки прописал.

yiiliveext
Сообщения: 779
Зарегистрирован: 2019.08.13, 01:49

Re: Проблема с swiftmailer в Yii2.0.31 basic

Сообщение yiiliveext » 2020.01.17, 14:48

Шлфк писал(а):
2020.01.17, 14:39
yiiliveext писал(а):
2020.01.17, 14:24
Из консоли на сервере отправить попробуйте, это скорее проблема в настройках exim.
https://www.opennet.ru/openforum/vsluhf ... =dawnshade
Уже проверяли, неоднократно. Во первых, как я уже писал, на том же сервере, под другим пользователем, с такими же настройками, но с более ранней версией Yii2 (и, соответственно, swiftmailer) всё отрабатывает.
Значит у этого пользователя/домена отправителя нет прав на relay, а у другого есть.
Конфиг exim смотреть надо. Ищите там domains и смотрите что туда подключается.

Аватара пользователя
Шлфк
Сообщения: 12
Зарегистрирован: 2018.04.25, 12:17
Откуда: СССР

Re: Проблема с swiftmailer в Yii2.0.31 basic

Сообщение Шлфк » 2020.01.17, 15:07

yiiliveext писал(а):
2020.01.17, 14:48
Значит у этого пользователя/домена отправителя нет прав на relay, а у другого есть.
Конфиг exim смотреть надо. Ищите там domains и смотрите что туда подключается.
Тогда бы из консоли под этим пользователем тоже не отправлялось бы письмо. И mail() бы не отрабатывала. Но отрабатывает. И в логе exim'а пишется, что отправка произведена.

yiiliveext
Сообщения: 779
Зарегистрирован: 2019.08.13, 01:49

Re: Проблема с swiftmailer в Yii2.0.31 basic

Сообщение yiiliveext » 2020.01.17, 15:56

Шлфк писал(а):
2020.01.17, 15:07
Тогда бы из консоли под этим пользователем тоже не отправлялось бы письмо. И mail() бы не отрабатывала. Но отрабатывает. И в логе exim'а пишется, что отправка произведена.
Начиная с версии 2.1.0 транспорт по умолчанию стал Swift_SendmailTransport, а до этого был Swift_MailTransport, который есть оберткой над php mail(). Так что в более ранней версии у вас просто swiftmailer отправляет через mail(). А проблема все же в конфиге exim.
Если хотите в этом убедиться, поменяйте конфиг мейлера на сайте со старой версией yii, на отправку через sendmail и посмотрите будет ли уходить почта.
То есть, замените

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

'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'useFileTransport' => false,
        ],
на

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

'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'useFileTransport' => false,
            'transport' => [
                'class' => 'Swift_SendmailTransport',
                'constructArgs' => [
                     'command' => '/usr/sbin/exim -bs',
                ],
               
            ]
        ],

yiiliveext
Сообщения: 779
Зарегистрирован: 2019.08.13, 01:49

Re: Проблема с swiftmailer в Yii2.0.31 basic

Сообщение yiiliveext » 2020.01.17, 16:06

Или, как быстрый вариант решения вашей проблемы, используйте старый swiftmailer.
В composer.json пропишите "yiisoft/yii2-swiftmailer": "2.0.7", тогда ставите такой конфиг

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

'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'useFileTransport' => false,
        ],

Аватара пользователя
Шлфк
Сообщения: 12
Зарегистрирован: 2018.04.25, 12:17
Откуда: СССР

Re: Проблема с swiftmailer в Yii2.0.31 basic

Сообщение Шлфк » 2020.01.17, 16:28

yiiliveext писал(а):
2020.01.17, 15:56
Начиная с версии 2.1.0 транспорт по умолчанию стал Swift_SendmailTransport, а до этого был Swift_MailTransport, который есть оберткой над php mail(). Так что в более ранней версии у вас просто swiftmailer отправляет через mail().
А вот это весьма печально. И, как я посмотрел, класса Swift_MailTransport теперь вообще нет...
yiiliveext писал(а):
2020.01.17, 15:56
А проблема все же в конфиге exim.
Если хотите в этом убедиться, поменяйте конфиг мейлера на сайте со старой версией yii, на отправку через sendmail и посмотрите будет ли уходить почта.
Убедился. Сорри, был не прав. Буду копать конфиг.

Ответить