Нужно создать свойство checkbox UF_SUBSCR, вывести в форме регистрации и вставить этот код в init.php
AddEventHandler("main", "OnAfterUserUpdate", Array("EventHandlerClass", "OnAfterUserUpdateHandler")); class EventHandlerClass { function OnAfterUserUpdateHandler(&$arFields) { global $USER; // условие атоподписки, если пользователь подтверждает регистрацию или если admin редактирует пользователя if( ($arFields['RESULT'] && $_GET['confirm_user_id'] > 0 && $_GET['confirm_code'] && $_GET['confirm_user_id'] == $arFields['ID']) || $USER->IsAdmin() ){ // поиск польщователя $filter = Array( "ID" => $arFields['ID'], ); // выбираем EMAIL и свойство UF_SUBSCR $rsUsers = CUser::GetList( ($by="id"), ($order="desc"), $filter, array( 'FIELDS' => array('ID', 'EMAIL'), 'SELECT' => array('UF_SUBSCR') ) ); if($usParam = $rsUsers->Fetch()){ CModule::IncludeModule("subscribe"); $subscr = new CSubscription; // если свойство заполнено то полписываем if($usParam['UF_SUBSCR']){ // поиск подписчика по mail $subscription = CSubscription::GetByEmail($usParam['EMAIL']); if($arSub = $subscription->Fetch()){ // если майл есть в подписчиках, то активируем подписку $res = $subscr->Update($arSub['ID'], array( "ACTIVE" => "Y", "USER_ID" => $usParam['ID'], "RUB_ID" => array(G_SUBSCRIPTION),// id подписки ) ); }else{ // если нет подписки, то добавляем его $arFieldFiltr = Array( "RUB_ID" => array(G_SUBSCRIPTION),// id подписки "USER_ID" => $usParam['ID'], "FORMAT" => "text", "EMAIL" => $usParam['EMAIL'], "ACTIVE" => "Y", "SEND_CONFIRM" => 'N' ); $ID = $subscr->Add($arFieldFiltr); // поиск подписчика по mail, что бы получить код потверждения $subscription = CSubscription::GetByEmail($usParam['EMAIL']); if($arSub = $subscription->Fetch()){ $arResult['DATA_SUB_USSER'] = $arSub; } // подтверждаем подписку $res = $subscr->Update($ID, array( "CONFIRMED" => "Y", "CONFIRM_CODE" => $arResult['DATA_SUB_USSER']["CONFIRM_CODE"] ) ); unset($arResult); } }else{ // если при обновлении пользователя свойство пустое, то деактивируем подписчика $subscription = CSubscription::GetByEmail($usParam['EMAIL']); if($arSub = $subscription->Fetch()){ // активируем подписку $res = $subscr->Update($arSub['ID'], array( "ACTIVE" => "N", ) ); } } } } } }