Ошибка 503 auth command first

Добрый день участники!
Столкнулся с проблемой, перерыл весь интернет, но нигде ничего путевого не нашел.

Использую Laravel 5.4 на Debian 8, проблема в следующем.

При попытке отправить письмо, выводит ошибку Expected response code 250 but got code «503», with message «503 5.5.4 Error: send AUTH command first.»

Пробовал и удалять все из .env и менять порты 465/587, менять TLS/SSL и прописывать ssl://smtp.yandex.ru — все бесполезно.
Все пароли от ящика подходят.

Настройки .env

MAIL_DRIVER=smtp
MAIL_HOST=smtp.yandex.ru
MAIL_PORT=587
MAIL_USERNAME=admin@example.ru
MAIL_PASSWORD=password
MAIL_ENCRYPTION=tls

Настройки config/mail.php
<?php

return [

    ‘driver’ => env(‘MAIL_DRIVER’, ‘smtp’),
    ‘host’ => env(‘MAIL_HOST’, ‘smtp.yandex.com’),
    ‘port’ => env(‘MAIL_PORT’, 587),
    ‘from’ => [
        ‘address’ => env(‘MAIL_FROM_ADDRESS’, ‘admin@example.ru’),
        ‘name’ => env(‘MAIL_FROM_NAME’, ‘Example’),
    ],
    ‘encryption’ => env(‘MAIL_ENCRYPTION’, ‘tls’),
    ‘username’ => env(‘admin@example.ru’),
    ‘password’ => env(‘password’),
    ‘sendmail’ => ‘/usr/sbin/sendmail -bs’,
    ‘pretend’ => false,
    ‘markdown’ => [
        ‘theme’ => ‘default’,

        ‘paths’ => [
            resource_path(‘views/vendor/mail’),
        ],
    ],

];

Использую простую функцию для отправки письма

Mail::raw(‘Текст письма’, function($message){
    $message->from(‘admin@example.ru’, ‘Admin’);
    $message->to(‘admin@admin.ru’);
});

Замечу одну вещь, при использовании другого smtp скрипта, письма отправляются успешно.

Как сконфигурировать postfix, чтобы он отправлял почту через stmp-сервер Яндекса

4 июля 2022 г.
3 min read

Я тут перевез свой блог в Облако Яндекса и по пути столкнулся с трудностью — не отправляются письма. В логах моего любимого почтовика постфикса ошибка:

Jun 17 00:32:56 vm1 postfix/smtp[1374175]: connect to gmail-smtp-in.l.google.com[142.251.1.26]:25: Connection timed out
Jun 17 00:32:56 vm1 postfix/smtp[1374175]: connect to gmail-smtp-in.l.google.com[2a00:1450:4010:c0d::1a]:25: Network is unreachable
Jun 17 00:33:26 vm1 postfix/smtp[1374175]: connect to alt1.gmail-smtp-in.l.google.com[142.250.157.27]:25: Connection timed out
Jun 17 00:33:26 vm1 postfix/smtp[1374175]: connect to alt1.gmail-smtp-in.l.google.com[2404:6800:4008:c13::1a]:25: Network is unreachable
Jun 17 00:33:56 vm1 postfix/smtp[1374175]: connect to alt2.gmail-smtp-in.l.google.com[173.194.202.26]:25: Connection timed out

Обратился в поддержку. Оказалось, что из облака исходящий трафик на 25 порт заблокирован. Отправлять почту можно только через сервера яндекса от имени какого-то пользователя.

Поскольку мой домен — codepoetry.ru
То пользователь пусть будет root@codepoetry.ru

Домен уже делегирован на яндекс, поэтому я просто добавил нового пользователя и залогинился под ним в почту, чтобы поставить галочку «Я согласен …»

Потом от этого пользователя зашел в настройки профиля и создал отдельный пароль:

Если у вас нет своего домена, то можете просто создать новый ящик вида myserverroot@yandex.ru — в остальном настройка ничем не отличается.

Дальше можно перейти к настройке, собственно, postfix.

Postfix relay

Дописываем в основной конфиг /etc/postfix/main.cf следующие строки:

smtp_sasl_auth_enable = yes
smtp_tls_security_level = encrypt
smtp_tls_wrappermode = yes
smtp_sasl_security_options = noanonymous

smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

relayhost = [smtp.yandex.ru]:465

Создаем файл с логином-паролем:

sudo touch /etc/postfix/sasl_passwd
sudo chmod 0640 /etc/postfix/sasl_passwd

И пишем туда:

[smtp.yandex.ru]:465  root@codepoetry.ru:my-password

Тут важно отметить, что строка [smtp.yandex.ru]:465 должна быть одинаковой и там и там.

Потом не забудьте превратить файл в базу данных:

sudo postmap /etc/postfix/sasl_passwd

И сделаем релоад, чтобы постфикс подхватил изменения конфига

sudo systemctl reload postfix

Проверка

Дальше я открыл в одном окне логи

sudo tail -f /var/log/mail.log

А из другого отправлял письма

echo "This is the body of the email" | mail -s "This is the subject line" dima@gmail.com

Письмо не ушло, а в логе появилась ошибка 553 5.7.1 Sender address rejected: not owned by auth user. 1655646734-7knhhkCpkb-qEMS4B3Z (in reply to MAIL FROM command))

В статьях яндекса об этом говорится. По логу выше видно, что в поле FROM  стоит адрес from=dima@vm1.ru-central1.internal  — а должно быть root@codepoetry.ru, иначе яндекс не примет.

Поэтому я добавил в main.cf:

smtp_generic_maps = hash:/etc/postfix/generic

И создал файл /etc/postfix/generic:

@vm1.ru-central1.internal root@codepoetry.ru

Теперь для любых отправленных с сервера писем в момент их выхода будет подменяться адрес отправителя. Не забудем переиндексировать:

sudo postmap /etc/postfix/generic
sudo systemctl reload postfix

Другие возможные ошибки

503 5.5.4 Error: send AUTH command first. 1655644978-vxV6fiLXFy-MwN8PqpG (in reply to MAIL FROM command))

Вы забыли включить smtp_sasl_auth_enable = yes

SMTPS wrappermode (TCP port 465) requires setting "smtp_tls_wrappermode = yes", and "smtp_tls_security_level = encrypt" (or stronger)
тут говорящее название
status=deferred (delivery temporarily suspended: SASL authentication failed; cannot authenticate to server smtp.yandex.ru[77.88.21.158]: no mechanism available)
забыли прописать smtp_sasl_security_options = noanonymous
status=deferred (SASL authentication failed; server smtp.yandex.ru[77.88.21.158] said: 535 5.7.8 Error: authentication failed: This user does not have access rights to this service 1655646115-7Ko3u9UTap-ftNKo6bN)

Вот эта ошибка интересная и сначала поставила меня в тупик. Чтобы победить, нужно разрешить доступ почтовых программ в настройках почты:

Не очевидно, что imap влияет на возможность функционирования smtp.

Тоже долго мучался. А ответ выше не помог.

Решил на следующий день коренным образом.

Выпилил все Mail-настройки из .env

И вписал в config/mail.php следующее:

'driver' => env('MAIL_DRIVER', 'smtp'),
    'host' => env('MAIL_HOST', 'smtp.yandex.ru'),
    'port' => env('MAIL_PORT', 587),
    'from' => [
        'address' => 'user@yandex.ru',
        'name' => 'Type What You Want',
    ],
    'encryption' => env('MAIL_ENCRYPTION', 'tls'),
    'username' => env('MAIL_USERNAME', 'user@yandex.ru'),
    'password' => env('MAIL_PASSWORD', 'secretpass'),

Аналогичны настройки и для отправки с Gmail.

Comment 3:

I don't know what's going on.  Please try making these changes to
src/pkg/net/smtp/smtp.go:
diff -r b984f2b4aa91 src/pkg/net/smtp/smtp.go
--- a/src/pkg/net/smtp/smtp.go  Thu Feb 16 22:04:13 2012 -0500
+++ b/src/pkg/net/smtp/smtp.go  Fri Feb 17 09:26:15 2012 -0500
@@ -11,6 +11,7 @@
 package smtp
 import (
+"fmt"
    "crypto/tls"
    "encoding/base64"
    "io"
@@ -66,6 +67,7 @@
 // cmd is a convenience function that sends a command and returns the response
 func (c *Client) cmd(expectCode int, format string, args
...interface{}) (int, string, error) {
+fmt.Printf("> %sn", fmt.Sprintf(format, args...))
    id, err := c.Text.Cmd(format, args...)
    if err != nil {
        return 0, "", err
@@ -73,6 +75,10 @@
    c.Text.StartResponse(id)
    defer c.Text.EndResponse(id)
    code, msg, err := c.Text.ReadResponse(expectCode)
+fmt.Printf("< %d %sn", code, msg)
+if err != nil {
+   fmt.Printf("ERR: %vn", err)
+}
    return code, msg, err
 }
When I run this program with those changes:
package main
import (
    "fmt"
    "net/smtp"
)
func main() {
    auth := smtp.PlainAuth(
        "",
        "fake@account",
        "password",
        "smtp.gmail.com",
    )
    err := smtp.SendMail("smtp.gmail.com:587",
        auth,
        "rsc@rsc.swtch.com",
        []string{"rsc@rsc.swtch.com"},
        []byte("Here is a message."),
    )
    fmt.Println(err)
}
I get this output:
$ go run x.go
< 250 mx.google.com at your service, [24.61.14.197]
SIZE 35882577
8BITMIME
STARTTLS
ENHANCEDSTATUSCODES
< 220 2.0.0 Ready to start TLS
< 250 mx.google.com at your service, [24.61.14.197]
SIZE 35882577
8BITMIME
AUTH LOGIN PLAIN XOAUTH
ENHANCEDSTATUSCODES
< 535 5.7.1 Username and Password not accepted. Learn more at
5.7.1 http://support.google.com/mail/bin/answer.py?answer=14257
fj4sm6777173vdb.22
< 530 5.5.1 Authentication Required. Learn more at
ERR: 530 5.5.1 Authentication Required. Learn more at
530 5.5.1 Authentication Required. Learn more at
$
Maybe the trace you get will be enough to identify
why AUTH is not being sent or being rejected.
Russ

I’m posting my working settings. You’ve got to check how laravel env helper function is used in your config file. Also when using smtp.yandex.com auth email and form email must match.

Laravel Docs for env()

The env function gets the value of an environment variable or returns a default value:

$env = env(‘APP_ENV’);

// Return a default value if the variable doesn’t exist…

$env = env(‘APP_ENV’, ‘production’);

.env

MAIL_DRIVER=smtp
MAIL_HOST=smtp.yandex.com
MAIL_PORT=465
MAIL_USERNAME=robot@mydomain.com
MAIL_PASSWORD=123123123
MAIL_ENCRYPTION=ssl
MAIL_FROM=robot@mydomain.com
MAIL_NAME=MY.NAME

config/mail.php

<?php
return [
    'driver' => env('MAIL_DRIVER', 'smtp'),
    'host' => env('MAIL_HOST', 'smtp.yandex.com'),
    'port' => env('MAIL_PORT', 465),
    'from' => [
        'address' =>  env('MAIL_FROM','robot@mydomain.com'),
        'name' =>  env('MAIL_NAME','MY.NAME'),
    ],
    'encryption' => env('MAIL_ENCRYPTION', 'ssl'),
    'username' => env('MAIL_USERNAME','robot@mydomain.com'),
    'password' => env('MAIL_PASSWORD','123123123'),
    'sendmail' => '/usr/sbin/sendmail -bs',
    'pretend' => false,
];

Controller function

public function testmail()
{
    $user =  Auth::user();
    $pathToLogo = config('app.url').'/images/logo/logo_250.png';
    Mail::send('emails.testmail', array('user' => $user, 'pathToLogo' => $pathToLogo), function($message) use ($user)
        {
          $message->to($user->email);
          $message->subject('Test message');
        });
    return redirect()->route('home')->with('message','Test message sent.');
}

Понравилась статья? Поделить с друзьями:
  • Ошибка 502b при открытии сайта
  • Ошибка 5029 такая карта не обслуживается
  • Ошибка 5029 при оплате картой тинькофф
  • Ошибка 5029 при оплате картой газпромбанк
  • Ошибка 502 при включении компьютера