Вчера несколько часов промучился с отправкой писем по средствам exim через яндекс почту по smtp. В интернете не нашел решения проблемы, с которой столкнулся, потому оставлю решение здесь, если кто вдруг столкнется.
2 года отправлял служебные письма со своего сервера с помощью exim и яндекс почты — все работало ок, и вчера вдруг письма перестали уходить, в логах запись:
2020-09-30 23:49:26 1kNj2U-000Eco-Is plain authenticator failed H=smtp.yandex.ru [77.88.21.158] 535 5.7.8 Error: authentication failed: This user does not have access rights to this service 2020-09-30 23:49:26 1kNj2U-000Eco-Is login authenticator failed H=smtp.yandex.ru [77.88.21.158] 535 5.7.8 Error: authentication failed: This user does not have access rights to this service 2020-09-30 23:49:26 1kNj2U-000Eco-Is ** no-reply@*********.ru R=smarthost T=remote_smtp_smarthost H=smtp.yandex.ru [77.88.21.158] X=TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128 CV=yes DN="C=RU,L=Moscow,OU=ITO,O=Yandex LLC,CN=smtp.yandex.ru": SMTP error from remote mail server after pipelined MAIL FROM:<> SIZE=4172: 503 5.5.4 Error: send AUTH command first. 2020-09-30 23:49:26 1kNj2U-000Eco-Is Frozen (delivery error message)
перепробовал всякое, решение оказалось не очевидным — помогла простановка галок в настройках ящика, с которого осуществляется отправление:
Почта->все настройки->почтовые программы
разрешить доступ к почтовому ящику с помощью почтовых клиентов, раздел imap, я на всякий поставил там все галки в том числе в разделе pop3
от службы поддержки яндекс почты получил подтверждение:
Мы рады, что теперь всё в порядке. Спасибо, что сообщили.
Уточнил информацию у специалистов: иногда отправка по SMTP может не работать, если не включен доступ по одному из протоколов IMAP или POP3, поэтому помогли именно ваши действия
Прошу прощения, что не упомянул об этом в прошлом письме.
на вопрос почему раньше все работало, хотя я этих галок не ставил, получил разъяснение:
Дело в том, что на первое место мы всегда ставим безопасность наших пользователей. Поэтому постоянно меняем алгоритмы безопасности при работе с почтовыми протоколами. Как уже говорилось ранее, то это одна из возможных причин, почему возникла такая ситуация.
В программе 1С существует возможность отправки клиентам счетов на оплату и других документов используя электронную почту Яндекс (mail.yandex.ru), для которой требуется специальный пароль. В этой статье мы подробно разберем, особенности настройки электронной почты <почта>@yandex.ru.
Многие пользователи ошибочно при настройке учетной записи в программе 1С указывают пароль от обычной учетной записи Yandex для авторизации.
Что приводит к появлению следующих сообщений об ошибке:
- Отправка тестового сообщения не выполнена: не удалось авторизоваться.
- Подключение к серверу входящей почты не выполнено: не удалось авторизоваться.
- Проверьте правильность ввода логина и пароля, а также выбранный способ авторизации.
- Обратитесь к администратору почтового сервера «yandex.ru».
Информация для техподдержки:
Аутентификация не прошла (SMTP error code 535 5.7.8 Error: authentication failed: This user does not have access rights to this service)
Произошла ошибка при работе с IMAP. Код ошибки: 28 Ответ сервера: LOGIN invalid credentials or IMAP is disabled sc=gNiGdg7SuSw1_300823_5-1f58a6409ead
Адрес почты: test1c-main@yandex.ru
АдресСервераSMTP=»smtp.yandex.ru», ПортSMTP=»587″, ИспользоватьSSLSMTP=»Нет», ПользовательSMTP=»test1c-main@yandex.ru «, POP3ПередSMTP=»Нет».
Это происходит по причине того, что для авторизации в программе 1С нельзя использовать обычный пароль, используемый для авторизации учетной записи на yandex.ru. Авторизоваться в программе 1С можно только с применением специального пароля, который включает в себя 16 символов, он генерируется системой безопасности Яндекс.
Как сгенерировать пароль приложения из 16 символов для 1С
Для того, чтобы сгенерировать требуемый пароль, первым делом, нужно перейти
в настройки учетной записи Яндекса.
Далее переходим в раздел Пароли и авторизация, после чего внизу экрана кликаем на Включить пароли приложений либо Пароли приложений, если вы уже получали пароль ранее.
После чего, в открывшемся окне, нам нужно нажать на кнопку Включить пароли приложений.
Следующим шагом, нам нужно подтвердить действие и нажать кнопку на Создать новый пароль.
Далее выбираем нужный тип приложения, в нашем случае: Почта (IMAP, POP3, SMTP).
Для быстрого ориентирования среди паролей — придумываем название, это может быть особенно актуально, когда используется несколько паролей. После того, как мы задали название, жмем кнопку Создать.
В результате, мы получим сгенерированный пароль, который будем использовать для доступа к почте.
Данный пароль необходимо сохранить, именно он будет использоваться для авторизации учетной записи электронной почты Янедекс в программе 1С.
Важно, пароль отображается всего один раз, поэтому если вы вдруг по какой-то причине не сохранили его или сохранили неверно, то единственным вариантом выхода из данной ситуации будет — удалить и создать новый пароль.
После авторизации с вводом только что сгенерированного пароля, программа запустит процесс проверки настроек почты.
После чего, нам потребуется пройти проверку авторизации, для этого нам на почту будет отправлено проверочное письмо.
В результате правильных действий, на почту придет сообщение следующего содержания: «Это сообщение отправлено подсистемой электронной почты 1С:Предприятие«, данное сообщение и будет являться гарантией успешной авторизации. Теперь можно приступать к отправке электронных писем прямо из программ 1С.
В некоторых случаях, даже при правильности выполнении всех действий, программа может по прежнему выдавать ошибку. Это происходит по причине того, что в вашей почте Яндекс вообще отключена возможность использования сторонних приложений для работы с почтой. Чтобы устранить данную проблему, нужно перейти в настройки почты (значок шестеренки в правом верхнем углу), после чего в открывшемся окне выбрать раздел Безопасность.
Далее нам нужно в новом окне выбрать пункт Почтовые программы и в подразделе Разрешить доступ к почтовому ящику с помощью почтовых клиентов установите флаг С сервера imap.yandex.ru по протоколу IMAP и Способ авторизации по IMAP: Пароли приложений…
После выполнения данных действия, проблема должна быть решена, в результате вы получите на почту проверочное письмо, и сможете отправлять своим клиентам счета, накладные, договора и др. документы напрямую из 1С:Бухгалтерии.
Рассмотрим только основные моменты, связанные с авторизацией в Яндекс.
Ubuntu 20.04.4 LTS
postfix 3.4.13-0ubuntu1.2
Настройка Postfix
/etc/postfix/main.cf
... smtp_use_tls = yes smtp_tls_ciphers = high smtp_tls_protocols = !SSLv2, !SSLv3 smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt # http://www.postfix.org/postconf.5.html#smtp_tls_wrappermode smtp_tls_wrappermode = yes smtp_tls_security_level = encrypt smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd relayhost: "[smtp.yandex.ru]:465"
/etc/postfix/sasl_passwd
[smtp.yandex.ru]:465 username@yandex.ru:PaS$w0rd
После создания / редактирования файла sasl_passwd, выполнить команду
postmap /etc/postfix/sasl_passwd
Настройка Яндекс
Создать отдельный пароль приложения для доступа к почте.
Управление профилем → Пароли и авторизация → Пароли приложений → Создать новый пароль → Почта
Разрешить доступ приложений к почте.
Почта → Настройки → Все настройки → Почтовые программы
Проставить галочки разрешения доступа по IMAP. ХЗ почему так, но в этом случае и SMTP заработает.
Ошибки
postfix/smtp[51400]: SMTPS wrappermode (TCP port 465) requires setting "smtp_tls_wrappermode = yes", and "smtp_tls_security_level = encrypt" (or stronger)
Установить значения параметров, как указано в тексте.
postfix/smtp[52699]: BAF67161CBF: to=<*****@gmail.com>, orig_to=<root>, relay=smtp.yandex.ru[77.88.21.158]:465, delay=45, delays=0/45/0.16/0, dsn=4.7.8, status=deferred (SASL authentication failed; server smtp.yandex.ru[77.88.21.158] said: 535 5.7.8 Error: authentication failed: Invalid user or password! 1653570970-Q6fbg8kMua-G9jmRQVx)
Проверить пароль в настройках Postfix. Выполнить команду postmap.
postfix/smtp[36780]: 0AAC3260AE1: to=<*****@gmail.com>, orig_to=<root>, relay=smtp.yandex.ru[77.88.21.158]:465, delay=14, delays=0.01/14/0.14/0, dsn=4.7.8, 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 1654483885-rKHV5iba9I-I5JaiOBs)
Проверить настройки доступа приложений к почтовому ящику в Яндекс почте.
postfix/qmgr[36409]: 9A18D160AE1: from=<root@localhost.lan>, size=375, nrcpt=1 (queue active) postfix/smtp[37109]: 9A18D160AE1: to=<*****@gmail.com>, orig_to=<root>, relay=smtp.yandex.ru[77.88.21.158]:465, delay=60, delays=0.02/60/0.25/0.02, dsn=5.7.1, status=bounced (host smtp.yandex.ru[77.88.21.158] said: 553 5.7.1 Sender address rejected: not owned by auth user. 1653385338-3n8BH7iZW3-NzJa3hex (in reply to MAIL FROM command))
Письмо содержит адрес From: (от кого) не совпадающий c почтовым адресом Яндекса. Проверьте настройки приложения, скрипта и т.п. укажите верный адрес отправителя.
Так же можно сделать принудительную замену адреса отправителя в настройках Postfix см. https://www.postfix.org/ADDRESS_REWRITING_README.html
Попробовал отправить через telnet:
$ telnet smtp.yandex.ru 25<br>
Trying 77.88.21.38...<br>
Connected to smtp.yandex.ru.<br>
Escape character is '^]'.<br>
220 smtp12.mail.yandex.net ESMTP (Want to use Yandex.Mail for your domain? Visit http://pdd.yandex.ru)<br>
EHLO yandex.ru<br>
250-smtp12.mail.yandex.net<br>
250-8BITMIME<br>
250-PIPELINING<br>
250-SIZE 42991616<br>
250-STARTTLS<br>
250-AUTH LOGIN PLAIN<br>
250-DSN<br>
250 ENHANCEDSTATUSCODES<br>
AUTH LOGIN<br>
334 VXNlcm5hbWU6<br>
bWFpbEBua3QubWU=<br>
334 UGFzc3dvcmQ6<br>
*******<br>
235 2.7.0 Authentication successful.<br>
MAIL FROM:mail@nkt.me <br>
250 2.1.0 <mail@nkt.me> ok<br>
RCPT TO:dev@nkt.me<br>
250 2.1.5 <dev@nkt.me> recipient ok<br>
DATA<br>
354 Enter mail, end with "." on a line by itself<br>
Subject: Q^BP5Q^AQ^B<br>
To: dev@nkt.me<br>
.<br>
250 2.0.0 Ok: queued on smtp12.mail.yandex.net as 6VPPHaRoyW-LYnSwHm7<br>
QUIT<br>
221 2.0.0 Closing connection.<br>
Connection closed by foreign host.<br>
Все ок, все отправилось.
Добавил в app/config/parameters.yml:
mailer_transport: smtp<br>
mailer_host: smtp.yandex.ru<br>
mailer_user: mail@nkt.me<br>
mailer_password: *****<br>
mailer_auth_mode: login<br>
mailer_encryption: ~<br>
mailer_port: 25<br>
Пробую отправить письмо:
protected function execute(InputInterface $input, OutputInterface $output)<br>
{<br>
$mailer = $this->getContainer()->get('mailer');<br>
$to = $input->getOption('to');<br>
$subject = $input->getOption('subject');<br>
$body = $input->getOption('body');<br>
$message = Swift_Message::newInstance()<br>
->setTo($to)<br>
->setSubject($subject)<br>
->setBody($body);<br>
$output->writeln('To: ' . $to);<br>
$output->writeln('Subject: ' . $subject);<br>
$output->writeln('Body: ' . $body);<br>
$output->writeln('Result: ' . $mailer->send($message));<br>
}<br>
Запускаю и результат:
$ app/console mail:send --to="dev@nkt.me" --body="Тест:)" --subject="тест"<br>
To: dev@nkt.me<br>
Subject: тест<br>
Body: Тест:)<br>
Result: 1<br>
Ну и собственно письма нет, иначе бы не написал вопрос.
С ssl и портами игрался, как понять в чем затык?
-
Вопрос заданболее трёх лет назад
-
10401 просмотр
Оказывается вот как надо:
protected function execute(InputInterface $input, OutputInterface $output)
{
$mailer = $this->getContainer()->get('mailer');
$transport = $mailer->getTransport();
$transport->start();
$message = Swift_Message::newInstance(
$input->getOption('subject'),
$input->getOption('body'),
$input->getOption('content-type'),
$input->getOption('charset')
)
->setFrom(['mail@nkt.me' => 'Admin'])
->setTo($input->getOption('to'));
$output->writeln(sprintf('Sent %s emails', $transport->send($message)));
$transport->stop();
}
Смысл в start-stop
Пригласить эксперта
В общем я не совсем понял, что ты хочешь сделать и что этим добился. Но я действую так:
config.yml
swiftmailer:
transport: %mailer_transport%
host: %mailer_host%
port: %mailer_port%
username: %mailer_user%
encryption: %mailer_encryption%
auth_mode: %mailer_auth_mode%
password: %mailer_password%
spool:
type: file
path: "%kernel.root_dir%/../spool"
parameters.yml
parameters:
mailer_transport: smtp
mailer_host: smtp.yandex.ru
mailer_user: *****@********
mailer_password: *********
mailer_encryption: ssl
mailer_auth_mode: login
mailer_port: 465
Дальше в коде отправляешь просто:$this->get('mailer')->send($message);
А в крон впендюриваешь с абсолютными путями:php app/console swiftmailer:spool:send --env=prod
Все, Профит.
Побробуйте указать From равным логину.
Попробуй запустить команду в prod режиме вместо dev
Если будете пробовать подружить Symfony 5.2 Mailer с Яндекс Почтой:
1. Устанавливаете бандл по инструкции: https://symfony.com/doc/current/mailer.html
2. Создаёте аккаунт в Яндекс Почте.
3. Настраиваете Яндекс Почту. С паролем от вашей почты Яндекс не пустит в целях безопасности. Поэтому чтобы подключиться к SMTP извне, вам нужен пароль приложения. Создать его можно в настройках:
Почта -> Все настройки -> Безопасность -> пароли приложений
4. В самом проекте в конфигурационный файл .env добавляете строку:
MAILER_DSN=smtp://login:password@smtp.yandex.ru:465
где login — часть вашей почты перед собакой (т.е. login@yandex.ru), password — пароль приложения, созданный на шаге 3.
5. Если после всех настроек в Symfony возникает ошибка:
smtp yandex Error: authentication failed: This user does not have access rights to this service
Заходите в
Почта -> Все настройки -> Почтовые программы
и ставьте галочку напротив IMAP, как на картинке:
-
Показать ещё
Загружается…
10 февр. 2023, в 04:49
50000 руб./за проект
10 февр. 2023, в 02:20
3000 руб./за проект
10 февр. 2023, в 01:33
1500 руб./за проект