Комментарии 19
Поделюсь мои решением:
— самописный сервис, которой по крону проверяет ряд целевых ящиков в разных почтовых сервисах, которые были зарегистрированы специально для проверки доставляемости почты. Сервис проверяет почту от известных отправителей (ящики компании), регистрирует попадание в спам.
— все системы, которые должны что то слать на почту, периодически шлют на эти ящики письма.
Сервис соответственно передает информацию о проверках в заббикс.
Таким образом, определяется собственно факт доставки писем, и попадание в спам (это не совсем точное определение, так как все же ящики одни и те же)
— самописный сервис, которой по крону проверяет ряд целевых ящиков в разных почтовых сервисах, которые были зарегистрированы специально для проверки доставляемости почты. Сервис проверяет почту от известных отправителей (ящики компании), регистрирует попадание в спам.
— все системы, которые должны что то слать на почту, периодически шлют на эти ящики письма.
Сервис соответственно передает информацию о проверках в заббикс.
Таким образом, определяется собственно факт доставки писем, и попадание в спам (это не совсем точное определение, так как все же ящики одни и те же)
В BitrixEnv (BitrixVM) при отправке через sendmail (msmtp) или через функцию custom_mail если происходит ошибка при отправке, то письма в таблице будут отмечены как отправленные. Есть идеи как с этим быть?
Логи мониторить тем же заббиксом, например.
Избавиться от проблемы отправки проще.
Поставил proxmox mail gateway специально для приема писем с битрикс24
Не одного письма с проблемой отправки нет ( на exchange иногда бывали проблемы)
Поставил proxmox mail gateway специально для приема писем с битрикс24
Не одного письма с проблемой отправки нет ( на exchange иногда бывали проблемы)
Схемы отправки писем разные бывают. Часто встречается отправка писем через Yandex mail, Gmail и всякие Mailgun и прочие. Отправка через свой почтовый сервер редко встречается.
Проблема в том что bitrix не учитывает что правка письма не произошла и ставит флаг письму отправлено и после не пытается отправить повторно. Мониторинг логов даст сигнал что есть проблема с отправкой писем, но письма bitrix повторно не отправит.
Может я что-то упустил и bitrix учитывает этот момент и письмо пытается отправить повторно?
Проблема в том что bitrix не учитывает что правка письма не произошла и ставит флаг письму отправлено и после не пытается отправить повторно. Мониторинг логов даст сигнал что есть проблема с отправкой писем, но письма bitrix повторно не отправит.
Может я что-то упустил и bitrix учитывает этот момент и письмо пытается отправить повторно?
Не отправляет повторно, и не проверяет доставку.
Потому что отправка идет консольной утилитой.
Для контроля отправки нужен сервер почтовый на битрикс
Потому что отправка идет консольной утилитой.
Для контроля отправки нужен сервер почтовый на битрикс
если ошибки возникают часто, то, действительно, попытаться поправить используемый или подумать о другом методе отправки.
если редко, то в логах искать неотправленные, и отправлять повторно из битрикса.
если редко, то в логах искать неотправленные, и отправлять повторно из битрикса.
и ещё интересно по этой ситуации:
удалось ли отловить упомянутые ошибки отправки?
если да, то
они все однотипные или разных типов?
можете пример(ы) ошибок показать?
удалось ли отловить упомянутые ошибки отправки?
если да, то
они все однотипные или разных типов?
можете пример(ы) ошибок показать?
Отправка через консольный msmtp через сервер gmail.com
Примеры ошибок в логе:
Примеры ошибок в логе:
smtpstatus=550 smtpmsg='550 5.4.5 Daily user sending quota exceeded. m12sm4517206ljc.59 — gsmtp' errormsg='the server does not accept mail data'
exitcode=EX_DATAERR
smtpstatus=553 smtpmsg='553 5.1.3 The recipient address is not a valid RFC-5321 address. z13sm5430019lfd.7 — gsmtp
' errormsg='recipient address a not accepted by the server' exitcode=EX_DATAERR
errormsg='cannot locate host smtp.gmail.com: Name or service not known' exitcode=EX_NOHOST
Понятно. Если на эти письма ставится SUCCESS_EXEC=«Y» в b_event, то на мой взгляд нехорошо это со стороны Битрикса — не проверяя код ответа, ставить успешное завершение.
Если ещё не обращались с этим в ТП Битрикса, то рекомендую.
Нужно собрать всё — логи, скрины и т.п. что показывает проблему.
Я нередко обращался с подобным и по БУС и по Корп.Порталу. Иногда они сразу заводили задачу разработчикам, а бывало приходилось ещё доказывать.
Если вдруг не признают ошибку, то можно им в идею завести это хотя бы пожеланием на голосование.
Если ещё не обращались с этим в ТП Битрикса, то рекомендую.
Нужно собрать всё — логи, скрины и т.п. что показывает проблему.
Я нередко обращался с подобным и по БУС и по Корп.Порталу. Иногда они сразу заводили задачу разработчикам, а бывало приходилось ещё доказывать.
Если вдруг не признают ошибку, то можно им в идею завести это хотя бы пожеланием на голосование.
А может ли это делать скрипт (в т.ч. битриксный)? Ведь та же функция mail не возвращает результата отправки. Согласно доке она возвращает true если письмо принято к доставке. А вот к логам скрипт уже не имеет доступа. Точнее не всегда. Да и логи, собственно, тоже не гарантия доставки.
Как раз тут, на мой взгляд, достаточно правильно все. Я эту таблицу (в которую, кстати, попадает не вся отправляемая почта) воспринимаю так: из Битрикса/php письмо ушло. Значит проблемы связанные с Битрикс и php в целом отметаем и смотрим уже кто отправляет. Тут уже мониторим логи, которые могут быть у всех разные.
Как раз тут, на мой взгляд, достаточно правильно все. Я эту таблицу (в которую, кстати, попадает не вся отправляемая почта) воспринимаю так: из Битрикса/php письмо ушло. Значит проблемы связанные с Битрикс и php в целом отметаем и смотрим уже кто отправляет. Тут уже мониторим логи, которые могут быть у всех разные.
Скрипт из статьи точно не сможет отследить это. Стандартный функционал Битрикса этим не занимается — действительно, он только отдаёт на отправку и это считает SUCCESS_EXEC.
Всё так — особенно логи почт. серверов разные.
Если включить лог php mail
и, допустим, будет возможно (хотя бы для нескольких типов почт. серверов), сопоставить логи: php mail и почт. сервера, то придётся какие-нибудь паттерны настраивать и обновлять их — Битрикс вряд ли будет этим заниматься.
Всё так — особенно логи почт. серверов разные.
Если включить лог php mail
и, допустим, будет возможно (хотя бы для нескольких типов почт. серверов), сопоставить логи: php mail и почт. сервера, то придётся какие-нибудь паттерны настраивать и обновлять их — Битрикс вряд ли будет этим заниматься.
Если мы реализуем функцию custom_mail, то мы сами отправляем почту (можно с помощью PHPMailer) и возвращаем в результате boolean.
Это конечно будет полезно, но не позволит избавить полностью от «ручной работы».
Допустим мы отправляем с помощью custom_mail с PHPMailer и получаем ошибку.
Даже если мы каким-то образом получим код ошибки, например, отдельным полем таблицу в b_event, то придётся эти ошибки классифицировать на (условно): «перевысылаемые» и «неперевысылаемые».
Например для ошибки «553 5.1.3 The recipient address is not a valid RFC-5321 address» перевысылка не поможет — сначала нужно вмешаться человеку и поправить адрес на корректный.
Допустим мы отправляем с помощью custom_mail с PHPMailer и получаем ошибку.
Даже если мы каким-то образом получим код ошибки, например, отдельным полем таблицу в b_event, то придётся эти ошибки классифицировать на (условно): «перевысылаемые» и «неперевысылаемые».
Например для ошибки «553 5.1.3 The recipient address is not a valid RFC-5321 address» перевысылка не поможет — сначала нужно вмешаться человеку и поправить адрес на корректный.
Ну да и это не решит проблему с письмами отправляющимися минуя таблицу b_event при помощи sendimmediate.
Я опробовал такой вариант. Написал отправку писем через функцию custom_mail с возвратом результата отправки и логированием ошибок. Отсылаю письма через сервис mailgun. В mailgun вижу лог отправки писем. Если письмо по какой-то причне не уходит, то оно в таблице b_event становится SUCCESS_EXEC = F и можно его повторно поставить на отправку задав SUCCESS_EXEC = N.
Я опробовал такой вариант. Написал отправку писем через функцию custom_mail с возвратом результата отправки и логированием ошибок. Отсылаю письма через сервис mailgun. В mailgun вижу лог отправки писем. Если письмо по какой-то причне не уходит, то оно в таблице b_event становится SUCCESS_EXEC = F и можно его повторно поставить на отправку задав SUCCESS_EXEC = N.
В случае использования он же и получается custom :) Тут уж нам карты в руки, на конкретном проекте мы можем все увязать и связать, но вряд ли хорошая идея некое поле добавлять под это дело в коробочную таблицу. Тут уж надо самим либо менять в ней статус, либо, что полагаю правильнее — вести свою таблицу.
Отвечу на свой коммент по обращению в ТП Битрикса с учётом коммента от BXVoral:
В моём видении, Битрикс, даже при желании, не реализует такое решение — разве, что, в b_event добавят поле для более точного сопоставления отправленного письма с логом почт. сервера.
И опять же придётся логи мониторить и сопоставлять их с инфой в Битриксе.
В моём видении, Битрикс, даже при желании, не реализует такое решение — разве, что, в b_event добавят поле для более точного сопоставления отправленного письма с логом почт. сервера.
И опять же придётся логи мониторить и сопоставлять их с инфой в Битриксе.
Скрипт интересный. Хотя, я все же сторонник работы через апи — т.е. коннект к базе и запрос к таблице. (но это не кардинально). Только надо учесть в b_event попадают не все письма. Т.е которые при помощи SendImmediate — они сразу на отправку.
кроме того, уж автоматизировать так автоматизировать,
кроме того, уж автоматизировать так автоматизировать,
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Доверяй, но проверяй: контроль неотправленных писем в Битриксе с уведомлением админу