@EVOSandru6

Как правильно сконфигурировать 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 сертификат нигде не установлен, если это важно. Посоветуйте пожалуйста что я делаю не так.
  • Вопрос задан
  • 776 просмотров
Решения вопроса 1
dlnsk
@dlnsk
ПК Партнер 01.01 -> ПК Поиск -> IBM PC
У меня работает так:
MAIL_DRIVER=mail
и убедитесь что $msg_from = 'secret_login@mail.ru'; - существующий ящик.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы