FROM php:7.3-fpm
function_exists выполни на proc_open
не понял что ? Искать другую фразу ?
https://www.php.net/manual/en/function.function-exists.php
# php steret_php.php proc_open functions are available.<br />
А лог sendmail смотрел?
Точнее postfix
Не могу найти нигде
Обычно тут: /var/log/mail.log
Смотрел я там так же. Везде смотрел и нигде их нет
Почта чем отправляется?
sendmail Dockerfile. php-fpm container # Sendmail START RUN echo "sendmail_path=/usr/sbin/sendmail -t -i" >> /usr/local/etc/php/conf.d/sendmail.ini RUN sed -i '/#!\/bin\/sh/aservice sendmail restart' /usr/local/bin/docker-php-entrypoint RUN sed -i '/#!\/bin\/sh/aecho "$(hostname -i)\t$(hostname) $(hostname).localhost" >> /etc/hosts' /usr/local/bin/docker-php-entrypoint # And clean up the image RUN rm -rf /var/lib/apt/lists/* # Sendmail END
Тогда другой вопрос, а как проверяется отправлено сообщение или нет?
php bin/console swiftmailer:email:send --from=admin@site.com --to=evge9000@gmail.com --subject=s1 --body=b1 Вот так доходит сообщения
Так symfony все прекрасно отрабатывает и в файл сохраняет, и отправляет. Выходит проблема не с компонентом, а с кодом.
Да возможно... У меня на компе в докере все ок происходит с тем же кодом . Вот проблема определить где что не так... Грешу на глобальные переменные. В.env самого проекта одни параметры для e-mail а в env среды контейнера - те что я передал извне. Но если отсылается через консоль почта то значит он подхватавает правильные или нет?
У вас на компе в докере всё ок? Проблема тогда я так понимаю на проде/стейдже? Консоль на проблемном объекте отрабатывает нормально отправку? Если да, то с переменными проблем нет, консоль их подхватывает
Попробуйте ещё, наверняка, проверку в тупую: https://swiftmailer.symfony.com/docs/sending.html#getting-failures-by-reference Если она пройдёт успешно, то значит письмо покидает php среду и уходит в почтовый агент, тогда проблема с где-то с агентом и нужно смотреть логи.
На компе все ок и все летит в hogmail. На проде я установил в docker контейнер php-fpm sendmail и черкз него из консоли все летит на почту. А вот через код - не хочет.
А дома какая связка стоит?
Если вы говорите про mailhog, то там, вроде, через smtp отправка, если я не ошибаюсь
Да. А в проде я в переменную окружения кладу sendmail://default и как бы он должен быть подсунут и я думаю что это он используется в консоли..
Покажи конфиг маилера
Еду в автобусе пока. Через часа 3 скину
Swift mail ?
Тогда, сразу протестируй нативную отправку, а не через sendmail, то есть попробуй native://default Только проверь переменную sendmail_path в php.ini
config/packages/prod/swiftmailer.yaml swiftmailer: url: '%env(MAILER_URL)%' spool: { type: 'memory' } на скрине - это когда я поменял на native Dockerfile php-fpm … # Sendmail START RUN echo "sendmail_path=/usr/sbin/sendmail -t -i" >> /usr/local/etc/php/conf.d/sendmail.ini ....
php bin/console debug:config swiftmailer
Current configuration for extension with alias "swiftmailer" ============================================================ swiftmailer: default_mailer: default mailers: default: url: '%env(MAILER_URL)%' spool: type: memory path: '%kernel.cache_dir%/swiftmailer/spool' id: null transport: smtp command: '/usr/sbin/sendmail -t -i' username: null password: null host: localhost port: null timeout: 30 source_ip: null local_domain: null stream_options: { } encryption: null auth_mode: null delivery_addresses: { } logging: false delivery_whitelist: { }
Так у тебя транспорт стоит smtp
а нужен sendmail ?
Попробуй
https://symfony.com/doc/current/reference/configuration/swiftmailer.html
По разному попробовал. не проходит и хоть ты ему тресни. уже поставил логирование но не деляет логи даже что бы понять хоть немного что с ним ``` Current configuration for extension with alias "swiftmailer" ============================================================ swiftmailer: default_mailer: default mailers: default: url: '%env(MAILER_URL)%' spool: type: memory path: '%kernel.cache_dir%/swiftmailer/spool' id: null transport: sendmail logging: true command: '/usr/sbin/sendmail -oi -t' username: null password: null host: localhost port: null timeout: 30 source_ip: null local_domain: null stream_options: { } encryption: null auth_mode: null delivery_addresses: { } delivery_whitelist: { } ```
Убери лишние параметры. Ссылку выше скидывал, что есть что
какие тут лишние ?
у меня это по дефолту выскакивают. Swiftmail: swiftmailer: url: '%env(MAILER_URL)%' spool: { type: 'memory' } transport: 'sendmail' logging: true command: '/usr/sbin/sendmail -oi -t'
Вот дефолт и оставь
Так так же проходит если в консоли вызывать отправку емайл а вот письма с проложения не отправляются. Я не могу понять почему он не делает логирование хотя я ему прописал ?
С приложением? А без отправляется?
с консоли как отправлялось так и отправляется … php bin/console swiftmailer:email:send --from=admin@s ....
А я тебя неправильно понял, я думал ты с приложением отправляешь
через веб интерфейс
Предположу банальное, а кэш чистил?
когда меняю конфиг swiftmail
Хорошо, пойдем по другому. Ты из консоли отправляешь простой текст, а из приложения что шлешь?
public function send(User $user, Newsletter $new_newsLetter): void { $message = (new Swift_Message('Sign Up Confirmation')) ->setTo($user->getEmail()->getValue()) ->setBody($this->twig->render('mail/user/signup.html.twig', [ 'token' => $user->token, 'username' => $user->getName()->getUsername(), 'token_unsubscribe' => $new_newsLetter->getToken() ]), 'text/html'); if (!$this->mailer->send($message)) { throw new RuntimeException('Unable to send message.'); } }
Попробуй отправить простой текст
public function send(User $user, Newsletter $new_newsLetter): void { $message = (new Swift_Message('Sign Up Confirmation')) ->setTo($user->getEmail()->getValue()) ->setBody("privet"); if (!$this->mailer->send($message)) { throw new RuntimeException('Unable to send message.'); } По прежнему ничего не приходит ... 🙁
services.yaml Finesse\SwiftMailerDefaultsPlugin\SwiftMailerDefaultsPlugin: arguments: $defaults: from: '%env(MAILER_FROM_EMAIL)%': '%env(MAILER_FROM_NAME)%' tags: - { name: swiftmailer.default.plugin }
Захардкодил setFrom() на всякий случай. Тот же результат
Что-то всё больше и больше мешанины у вас. Плагин поддерживает 4 версию, а про 5 версию не уверен. Последний релиз был 3 года назад. Письмо покидает php среду (консоль тому подтверждение), но вам лучше искать логи sendmail. Скорее всего, что-то не передается и sendmail блокирует, а ещё возможно письмо блокируется спам-фильтром из-за заголовка и отсутствии ссылки для отписки и тем более DKIM подписи. А это только логи подскажут вам. Через консоль вы отправляете просто письмо с другим заголовком и другим текстом и оно уходит, а из софта вы шлете совершенно другое письмо и тут ступор. Если маилер не выкидывает ошибку - значит письмо ушло в sendmail. Посмотрите очередь sendmail - mailq. Информацию о логах ищите в конфиге sendmail.
Я бы вам порекомендовал для чистоты эксперимента использовать одинаковые входные данные, а не разные - сделайте отдельную функцию и отдельный роут для её запуска, где жестко пропишите условия - такие же как в консоли, используя дефолтный конфиг и без всяких плагинов. P.s.: ну, и на будущее - для этого существует stage, идентичный проду, а на проде экспериментировать не стоит никогда - к тому же, если у вас докер, то хоть на каждую новую-ветку репы поднимайте свой стейдж.
Да там такой prod что можно и без stage 🙂 Это все мои личный проект учебный. Все захардкодил. Ничего не приходит. Ищу логи от sendmail ...
Начал больше дебожит на пройде. Получилось следующее. Все передается хорошо кроме адреса отправителя. Не понимаю почему он не цепляется на проде services.yaml …. Finesse\SwiftMailerDefaultsPlugin\SwiftMailerDefaultsPlugin: arguments: $defaults: from: '%env(MAILER_FROM_EMAIL)%': '%env(MAILER_FROM_NAME)%' tags: - { name: swiftmailer.default.plugin } …. Не компе все ок работает ..
1. На компе у вас SMTP - там отправитель будет smtp-пользователь. 2. Уже ведь говорил про плагин, что он под 4-ку и не обновлялся 3 года
По моему нашел ошибку. Не передается переменная в контейнер при деплое из гита через docker-compose. Попробую сделать кое что. Если он такой устаревший то как рекомендуете инжектить адрес отправителя ?
Я думаю, что у вас письма отправляются не из одного места (функции/компонента/бандла), то повесить сервис для отправки почты - было бы логичнее, где и пропишите установку отправителя из конфига, логирование и остальное
Обсуждают сегодня