Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 10.08.2018 14:47:16

Как правильно сконфигурировать Mailer для отправки почты на VPS?

Добрый день,

Перечисленный ниже ход действий тестировал на локальной машине и на VPS хостинге с настроенный DNS. И там и там без ssl сертификата (only http://)

Во первых - конфигурация Laravel, варианты, которые почередно пробовал:

1) Mail.ru
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mail.ru
MAIL_PORT=465
MAIL_USERNAME=secret_login@mail.ru
MAIL_PASSWORD=secret_pass
MAIL_ENCRYPTION=tls

2) Gmail
#MAIL_DRIVER=smtp
#MAIL_HOST=smtp.gmail.com
#MAIL_PORT=587
#MAIL_USERNAME=secret_login@gmail.com
#MAIL_PASSWORD=secret_pass
#MAIL_ENCRYPTION=ssl

3) Mailtrap
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=secret_login
MAIL_PASSWORD=secret_pass
MAIL_ENCRYPTION=null

Тестировал так - поочередно раскоменчивал каждую секцию и запускал тесты. Например:

class MailRuTest extends TestCase
{
    protected $mailer;

    protected $mail_host = 'smtp.mail.ru';
    protected $mail_port = 465;
    protected $mail_username = '{secret_login}@mail.ru';
    protected $mail_password = '{secret_pass}';
    protected $mail_encryption = 'tls';

    protected $msg_from = 'secret_login@mail.ru';
    protected $msg_author = 'author_name';
    protected $msg_subject = 'Message From  to car sharing system - system_name';

    protected $msg_to = 'customer_name@mail.ru';

    public function setUp()
    {
        parent::setUp();
        $this->mailer = $this->app->make(MailerInterface::class);
    }

    public function testSend()
    {
        $this->assertTrue(true);

        $this->mailer->raw('Hi, welcome user! ' . date('Y-m-d H:s') . ' - mail_service_name', function ($message) {
            $message->to($this->msg_to)
                ->from($this->msg_from, $this->msg_author)
                ->subject($this->msg_subject);
        });
    }

    public function testAuth()
    {
        try{
            $transport = new Swift_SmtpTransport($this->mail_host, $this->mail_port, $this->mail_encryption);
            $transport->setUsername($this->mail_username);
            $transport->setPassword($this->mail_password);
            $mailer = new Swift_Mailer($transport);
            $mailer->getTransport()->start();
            // $this->expectOutputString('Good mailtrap auth');
            $this->assertTrue(true);

        } catch (Swift_TransportException $e) {
            fwrite(STDERR, print_r($this->mail_host. ': '.$e->getMessage() . ' - ' . $this->mail_host, TRUE));
            return $e->getMessage();

        } catch (\Exception $e) {

            fwrite(STDERR, print_r($this->mail_host. ': '.$e->getMessage() . ' - ' . $this->mail_host, TRUE));
            return $e->getMessage();
        }
        $this->assertTrue(true);
    }
}

Во всех трех тестах в protected свойства просто продублировал параметры из .env

Т.е. в файлах GmailTest.php, MailRuTest.php, MailtrapTest.php
производится попытка стукнуться на smtp сервер и отправить сообщение.

В итоге:
Ошибок не получаю (если езменять пароли например, то в Exception честно попадаю), но и письма не отправляются.

Единственное, почему то кабинете у mailtrap.io видно, что исходящие были, но на почте получателя почта неприходит даже в спам. Да и для тестов больше этот mailtrap, как я понял.

Для gmail пробовал след проделать:
1) gmail->Настройки->Пересылка и POP/IMAP->IMAP == on
2) Активировал: Небезопасные приложения разрешены по адресу:
https://myaccount.google.com/lesssecureapps

Для mail.ru - там почта для бизнеса
Настроили MX записи и получил письма:
Настроена подпись DKIM на домене {domen}.{com}
Почта для домена подключена!

Результат одинаков на лоокальной и на VPS. SSl сертификат нигде не установлен, если это важно. Посоветуйте пожалуйста что я делаю не так.

Изменено EVOSandru6 (10.08.2018 14:51:44)

Не в сети

#2 11.08.2018 06:38:48

Re: Как правильно сконфигурировать Mailer для отправки почты на VPS?

Возможно таки зарубается спамофильтрами. Посоветую при тестировании отправлять на ящик на том же провайдере  если с майл.ру то на майл.ру. Может быть тогда получишь письмо и доп. информацию для анализа.

Что у тебя за майл агент на локальной и на ВПС? Эксим настраивал или просто "ничего не трогал"? Я обычно доверяю отправку почты дефолтовому почтовику системы. Один раз настроил чтобы из командной строки письма слались -- получаешь рабочие извещения и из крон, и из веб-приложений -- все через один транспорт.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#3 11.08.2018 10:53:22

Re: Как правильно сконфигурировать Mailer для отправки почты на VPS?

Благодарю,

"Эксим настраивал или просто "ничего не трогал""

если правильно понял - exim - это почтовый сервер. Его не ставил.

Если это важно - то в /etc/nginx/nginx.conf секуия mail закоменчена.

#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateW … ePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}

Если подскажете - куда копать в настройках, чтобы добиться отправки почты из адресной строки буду оч. благодарен.

По поводу агента - не совсем понял, попробовал так сдеать:

apt-file -x search 'bin/mail$'

получил:

phabricator: /usr/share/phabricator/bin/mail

Если это то, что Вы имеете ввиду.

Еще заметил, что config('mail.driver') вместо smtp  возвращает array...

config/mail.php:
...
    'driver' => env('MAIL_DRIVER', 'smtp'),
...

-----------

.env

MAIL_DRIVER=smtp

Изменено EVOSandru6 (11.08.2018 10:56:48)

Не в сети

#4 11.08.2018 11:02:39

Re: Как правильно сконфигурировать Mailer для отправки почты на VPS?

По поводу  config('mail.driver')

Всехорошо, но все равно не отправляется.

Не в сети

Подвал раздела