Все что пишется ниже актуально для версии Битрикс 7.1.6 и ранее
События в Битриксе помогает жить, тем кто хочет изменить логику работы Битрикс и не заморачиваться после этого с обновлением.
Вещь нужная и существует в более-менее приличной CMS, в БУС существует хорошо проработанная система событий, по крайней мере наиболее используемые тоже есть. При добавлении/обновлении/удалении любого элемента из базы стандартными способами вызываются эти события.
Однако, когда приходится задуматься над обработчиками. Если вы имеете единичный обработчик у вас один путь поместить его в файл
/bitrix/php_interface/init.php
Если вы пишите модуль и имеете обработчики событий, которые происходят в других модулях, то они регистрируются функцией
RegisterModuleDependences при установке модуля. Более подробную информацию можно найти в учебных курсах коде Битрикса, как и где что размещать
Как узнать, что когда происходит очень просто. Точнее говоря очень просто для человека подготовленного, как морально, так и физически, лазя по коду, то тут то там, чтобы выяснить, какие же обработчики и на какие события установлены. Ну а отключение/включение обработчиков сродни тому что вы просто комментируете код.
Агенты - тормоз всего человечества или как сделать, так чтобы ничего не делать и у тебя все было, т.е были периодические события без настройки крона. На всех хостингах предоставляется функция крона и это хорошо, хорошо для тех у кого семь пядей во лбу или просто для специалистов.
Агенты работают так. Вызывается событие, которое присходит на каждой странице. Вызывается обработчик этого события и он вытаскивает из базы те агенты, время исполнения которых меньше текущего времени и после исполнения агентов, им назначается время следующей явки текущее время+период выполнения. Это происходит для каждого пользователя, на каждой странице.
В плане производительности - мрак какой-то с этими агентами. Однако положительной стороной есть интерфейс добавления агентов, вполне понятный для пользователей. ИМХО я бы сделал периодические события по другому.
Да агенты тоже должны быть доступны по коду. Т.е. из добавление тоже только в файл
/bitrix/php_interface/init.php
Почтовые события. Тут все ясно и понятно. Если нужно отослать письмо при определенном "почтовом событии", то можешь создать шаблон письма и в нем использовать теги, которые привязаны к данному событию и будут заменены на конкретные данные при отправке. ИМХО наиболее продуманная система событий в Битрикс, однако непонятно, почему эти события не являются подкатегорией просто событий. Т.е. почему бы при почтовом событии я не мог сделать еще какие либо вещи.
Итог: Пользоваться событиями, хоть и не очень удобно, но можно.
Агентами пользоваться удобно, но подключать новый код не совсем удобно. Плюс дают дополнительную нагрузку на сервер. Тут уже ничего не поделаешь.
Почтовые события - наиболее удобная вещь, человек, который их писал реально все продумал и как пользоваться и как регистрировать эти события и как их использовать.
ИМХО лучше бы просто события были бы проработаны также четко, как почтовые. Т.к. почтовые события, это один из подвидов событий только и всего.
П.С. Чтобы не захламлять файл init.php можно не размещать код кастомных обработчиков событий/агентов в этом файле, а подключать файлы с кодом.
П.П.С. Все умозаключения предназначены сугубо для себя и для программистов, которые пытаются понять, как работает система и простым пользователям Битрикс они не нужны
.