Страница 1 из 1

Проблема с 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'].

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

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

Добавлено: 2020.01.16, 16:36
yiiliveext
Вам нужно настроить транспопрт в yii\swiftmailer\Mailer

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

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

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

Добавлено: 2020.01.16, 16:50
yiiliveext
Шлфк писал(а):
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,
                    ],

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 использовать нельзя "по политическим соображениям" :)

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

Добавлено: 2020.01.17, 13:17
yiiliveext
Да, посмотрел, поддерживается, это я с 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',
                ],
               
            ]
        ],

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

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

Добавлено: 2020.01.17, 14:24
yiiliveext
Шлфк писал(а):
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

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 не то. Или ошибка (что маловероятно, наверное), либо (что наиболее вероятно) я не так или не все настройки прописал.

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

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

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

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

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

Добавлено: 2020.01.17, 15:56
yiiliveext
Шлфк писал(а):
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',
                ],
               
            ]
        ],

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

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

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

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

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 и посмотрите будет ли уходить почта.
Убедился. Сорри, был не прав. Буду копать конфиг.