Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Добрый день,
Перечисленный ниже ход действий тестировал на локальной машине и на 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)
Не в сети
Возможно таки зарубается спамофильтрами. Посоветую при тестировании отправлять на ящик на том же провайдере если с майл.ру то на майл.ру. Может быть тогда получишь письмо и доп. информацию для анализа.
Что у тебя за майл агент на локальной и на ВПС? Эксим настраивал или просто "ничего не трогал"? Я обычно доверяю отправку почты дефолтовому почтовику системы. Один раз настроил чтобы из командной строки письма слались -- получаешь рабочие извещения и из крон, и из веб-приложений -- все через один транспорт.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Благодарю,
"Эксим настраивал или просто "ничего не трогал""
если правильно понял - 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)
Не в сети
По поводу config('mail.driver')
Всехорошо, но все равно не отправляется.
Не в сети