Как уже было написано тут, 1С не умееет [пока?] работать с xmpp, внешние компоненты не приносят желаемого результата (и обычно доступны только для Windows).
У нас тоже сложилось так, что внутри используется jabber и не используется email (т.к. организация небольшая).
Собственно, поискав на инфостарте, ничего дельного кроме той статьи с работой ч\з php найти не получилось. Но душа больше лежит к питону, и к php нет особой приязни. Также, покопавшись в кишочках 1С:Документооборота, оказалось, что довольно легко внедрить отправку jabber-сообщений в имеющуюся систему уведомлений по email (с полной заменой отправки по email отправкой по xmpp). И не пришлось писать свой костыль для проверки новых задач и прочего, о чем хотелось бы получать уведомления.
Для начала нам потребуется собственно python 2й версии и библиотека pyxmpp.
В Linux установка делается в два счета:
# apt-get install python2.7 python-pyxmpp
В Windows все сложнее.
- Берем отсюда и устанавливаем питон (версия 2.7). В зависимости от выбранной разрядности (32 или 64-bit) берите далее подходящие пакеты. Добавляем каталог с установленным питоном в переменную окружения PATH (Панель управления - Система - Дополнительные параметры системы - Переменные среды - Системные переменные, ищем в списке Path и в конце её значений дописываем (в моем случае) ";D:\Python 2.7\").
- Ставим пакет dnspython. Брать здесь последний релиз для 2.х (Python 2.x Stable, берем zip-архив). Содержимое архива извлекаем в "[PythonDir]\Lib\site-packages\", заходим в появившуюся папку "dnspython-[version]", открываем окно консоли (кто не умеет - зажимаем Shift, щелкаем ПКМ, выбираем "Открыть окно команд"), выполняем команду setup.py install.
- Следующий пакет - M2Crypto. Брать здесь M2Crypto-[latest].win[32/amd64]-py2.7. Сейчас можно найти тут только для win32 (или посильнее погуглить). Запускаем исталлятор и кликаем по кнопкам "Далее".
- Следующий - libxml2. Брать здесь libxml2-python-[latest].win[32/amd64]-py2.7. Также запускаем и кликаем "Далее".
- И наконец сам pyxmpp. Брать здесь последний архив pyxmpp-[latest].tar.gz. С содержимым поступаем аналогично пункту 2, только выполняем последовательно следующие команды: configure.py, setup.py build, setup.py install.
Теперь запускаем конфигуратор и лезем в кишочки. Покажу что я сделал в Документообороте.
Нас будет интересовать Общий модуль РаботаСУведомлениями. Я создал новый общий модуль с такими же настройками (Сервер, Внешнее соединение, Вызов сервера, Повторное использование - не использовать) и назвал его РаботаСУведомлениямиХМПП. Скопировал в свой модуль несколько процедур и функций из оригинала, потребовавшиеся в процессе работы (СобытиеЖурналаРегистрации, ДобавитьЗначениеВМассив, ОбработатьОшибкуОтправкиУведомления, УдалитьУведомлениеИзОчередиУведомлений), и добавил свои:
Функция ФайлУведомлений()
Возврат "\\db1c\AddIn\jabber\send_message.txt";
КонецФункции
Функция ОтправитьУведомления()
ВозниклаОшибкаПриОтправке = Ложь;
КодВозврата=Неопределено;
путь="\\db1c\AddIn\jabber\";
ЗапуститьПриложение("python "+путь+"send_message.py",путь,Истина,КодВозврата);
Если КодВозврата=0 Тогда
ЗаписьЖурналаРегистрации(
СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Информация,,,
НСтр("ru = 'Уведомления успешно отправлены.'"));
Иначе
ЗаписьЖурналаРегистрации(
СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Предупреждение,,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка при отправке уведомления о новых событиях. Код возврата: %1.'"),
КодВозврата));
ВозниклаОшибкаПриОтправке = Истина;
КонецЕсли;
Возврат ВозниклаОшибкаПриОтправке;
КонецФункции
Процедура ПодготовитьФайлУведомлений(СформированныеУведомления)
ПодготовленныеУведомления=Новый ТекстовыйДокумент;
Для Каждого СформированноеУведомление Из СформированныеУведомления Цикл
ПочтовыйАдресПолучателя = "";
ВозниклаОшибкаПриОтправке = Ложь;
АдресаЭлектроннойПочты = РаботаСУведомлениями.ПолучитьДанныеСпособаУведомления(
Перечисления.СпособыУведомления.ПоПочте,
СформированноеУведомление.Пользователь,
Истина);
Если АдресаЭлектроннойПочты.Количество() = 0 Тогда
ЗаписьЖурналаРегистрации(
СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Информация,,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Уведомление не отправлено, так как не указан почтовый адрес у пользователя %1.'"),
Строка(СформированноеУведомление.Пользователь)));
ОбработатьОшибкуОтправкиУведомления(СформированноеУведомление);
Продолжить;
КонецЕсли;
Для Каждого ПочтовыйАдресПолучателя Из АдресаЭлектроннойПочты Цикл
ПодготовленныеУведомления.ДобавитьСтроку("[BEGIN]");
ПодготовленныеУведомления.ДобавитьСтроку(ПочтовыйАдресПолучателя);
ПодготовленныеУведомления.ДобавитьСтроку(СформированноеУведомление.ТекстУведомления);
ПодготовленныеУведомления.ДобавитьСтроку("[END]");
КонецЦикла;
КонецЦикла;
ПодготовленныеУведомления.Записать(ФайлУведомлений(),"UTF-8");
КонецПроцедуры
Функция ОтправитьУведомленияПоХМПП(СформированныеУведомления) Экспорт
ПодготовитьФайлУведомлений(СформированныеУведомления);
ВозниклаОшибкаПриОтправке=ОтправитьУведомления();
Если ВозниклаОшибкаПриОтправке Тогда
Для Каждого СформированноеУведомление Из СформированныеУведомления Цикл
ОбработатьОшибкуОтправкиУведомления(СформированноеУведомление);
КонецЦикла;
Иначе
Для Каждого СформированноеУведомление Из СформированныеУведомления Цикл
Для Каждого Уведомление Из СформированноеУведомление.Уведомления Цикл
УдалитьУведомлениеИзОчередиУведомлений(Уведомление);
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецФункции
И небольшое изменение в самом модуле РаботаСУведомлениями:
Функция ОтправитьУведомления()
....
КонецЦикла;
//Для Каждого СформированноеУведомление Из СформированныеУведомления Цикл
// ОтправитьУведомление(СформированноеУведомление);
//КонецЦикла;
КонецЦикла;
РаботаСУведомлениямиХМПП.ОтправитьУведомленияПоХМПП(СформированныеУведомления);
КонецФункции
На сервере расшарена папка AddIn, к которой дан доступ только пользователю, от которого запущен сервер 1С. В этой папке лежит питоновский скрипт, который и осуществляет рассылку сообщений. Предварительно в 1С генерируется файл с этими сообщениями (один файл на всю текущую кучу уведомлений). Файл состоит из нескольких таких блоков, по одному на каждое уведомление:
[BEGIN]
адрес@получателя.сообщения
несколько
строчек
самого
сообщения
[END]
В самом скрипте задаются необходимые настройки для подключения и авторизации бота (естественно этот бот должен быть в контакт-листе пользователей):
SERVER = '10.10.0.200' # явно указанный ip-адрес jabber-сервера, если есть проблема с резолвингом имени. если все ок, можно вместо адреса оставить значение None
#SERVER = None
PORT = None # 5222 по умолчанию, если порт другой - указать его здесь явно
FROM_JID = 'bot@apk-mir.office-on-the.net/docflow' # аккаунт бота, от которого будет идти рассылка, с указанием ресурса (можно написать любое)
PASSWORD = 'randompassword' # и пароль от этого аккаунта
Возможно потребуется изменить настройки шифрования при подключении к jabber-серверу. У нас шифрование включено, поэтому в процедуре xmpp_do прописано:
c=Client(jid,password,server=server,port=port,auth_methods=['sasl:PLAIN'],tls_settings=streamtls.TLSSettings(require=True, verify_peer=False))
Если шифрование не используется, можно совсем убрать параметр tls_settings и в auth_methods убрать sasl: (тут я не уверен, надо проверять).
1Ска формирует файл сообщений в кодировке UTF-8 with BOM, можете предварительно создать тестовый файл, проверить работу скрипта.
Адреса (jid) пользователей в Документообороте вписаны в поле E-mail.
Вроде все описано. Пишите в комментарии, если что забыл, добавлю.