The Magician

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
скрипт_загрузки_подписей_cgp [2026/09/14 14:51] – removed - external edit (Unknown date) 127.0.0.1скрипт_загрузки_подписей_cgp [2026/09/14 15:11] (current) jp
Line 1: Line 1:
 +===== Скрипт загрузки подписей CGP =====
  
 +Задачу установки подписи в формате //HTML// встроенным функционалом //CGP// не решить. 
 +
 +Вендор предоставляет скрипт загрузки подписи по запросу. Вопросам использования данного скрипта посвящен этот материал. 
 +
 +==== Зависимости ====
 +
 +Прежде, чем успешно использовать //Python//-скрипт - потребуется установить необходимые зависимости, которые описаны в файле //requirements.txt//
 +
 +<code>
 +CGPCLI
 +et_xmlfile
 +numpy
 +openpyxl
 +pandas
 +python-dateutil
 +pytz
 +six
 +tzdata
 +</code>
 +
 +Пример установки:
 +
 +  pip3.11 install openpyxl
 +==== Подготовка к запуску скрипта ====
 +
 +Все основные настройки задаются в файле: //signature.conf//. Вот его примерное содержимое:
 +
 +<code>
 +# файл конфигурации для утилиты signature.py
 +
 +[info]
 +# адрес сервера (по умолчанию server = 127.0.0.1)
 +server = cgp.domain.ru
 +
 +# логин администратора
 +user = admin@postmaster.local
 +
 +# Пароль администратора
 +pass = Passw0rd
 +
 +# имя домена (по умолчанию @testdomain. если домен основной, вводить не обязательно)
 +domain_name = @domain.ru
 +
 +# название файла с изображением в кодировке base64
 +img = img.txt
 +
 +# название файла со списком пользователей, которым необходимо добавить подпись
 +xlsx = userlist.xlsx
 +
 +# название файла с простой подписью
 +signature = simple_signature.txt
 +
 +# название файла с html подписью
 +signature_html = html_signature.html
 +
 +[attr]
 +# словарь соответствия атрибутов (слева - используемое название для вставки в файлы-подписи; справа - название атрибутов в CGP)
 +attrs_dict = {
 +        "__name__":"RealName",
 +        "__company__":"o",
 +        "__department__":"ou",
 +        "__l__":"l",
 +        "__mail__":"mail",
 +        "__st__":"st",
 +        "__telnum__":"telephoneNumber",
 +        "__title__":"title",
 +        "__web__":"defaultWebPage"
 +    }
 +</code>
 +
 +:!: //Примечание 1://  логин для пользователя //postmaster// необходимо задавать именно так: //ЧТО-НИБУДЬ@postmaster.local//. Во время сеанса по протоколу //PWD// данное имя будет транслировано в //postmaster//.
 +
 +:!: //Примечание 2:// не забыть @ перед именем домена. 
 +
 +:!: //Примечание 3:// //userlist.xlsx// - это именно полноценный Excel-файл, содержащий соответствующую разметку (не просто //CSV//).
 +
 +==== Содержимое подписи ====
 +
 +=== Изображение (логотип) ===
 +
 +Изображение или логотип задается в файле //img.txt// в //base64//. Пример содержимого:
 +
 +<code>
 +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABQCAYAAABcbTqwAAAACXBIWXM
 +...
 +NMMJVKAAAAAElFTkSuQmCC</code>
 +
 +В //Linux// мы можем создать такое изображение следующим образом:
 +
 +PNG
 +
 +  echo -n 'data:image/png;base64,' > img.txt
 +  base64 -w 0 logo.png >> img.txt
 +JPG
 +
 +  echo -n 'data:image/jpeg;base64,' > img.txt
 +  base64 -w 0 logo.jpg >> img.txt
 +=== Текстовая подпись ===
 +
 +Текстовая подпись содержится в файле //simple_signature.txt//. Пример:
 +
 +  Test signature
 + :!: //Примечание:// для загрузки русского текста из этого файла нужно найти решение, т.к., если просто указать русский текст - получим ошибку:
 +
 +  CGP set account prefs for the user ivanov Failed
 +=== HTML-подпись ===
 +
 +В качестве HTML-подписи скрипт установит ровно тот код, который существует в файле: //html_signature.html//. Пример условного шаблона HTML-подписи и файла //html_signature.html//.
 +
 +<code>
 +<!DOCTYPE html>
 +<html>
 +<head>
 +<meta charset="utf-8">
 +</head>
 +<body>
 +<table cellpadding="0" cellspacing="0" border="0" style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.4; color: #222222;">
 +  <tr>
 +    <td style="padding: 0 18px 0 0; vertical-align: top;">
 +      <img src="__image__" alt="Рога и копыта" style="display: block; border: 0; max-width: 200px; height: auto;">
 +    </td>
 +    <td style="padding: 0; vertical-align: top;">
 +      <div style="font-size: 16px; font-weight: bold;">Иванов П.И.</div>
 +      <div>Системный администратор</div>
 +      <div>ИТ</div>
 +      <div style="margin-top: 6px; font-weight: bold;">Рога и копыта</div>
 +      <div>Москва</div>
 +      <div style="margin-top: 8px;">
 +        Тел.: 89026556656<br>
 +        Вн. номер: 3322<br>
 +        E-mail: <a href="mailto:ivanov@domain.ru" style="color: #222222; text-decoration: none;">ivanov@domain.ru</a><br>
 +        Web: <a href="http://test.domain.ru" style="color: #222222; text-decoration: none;">http://test.domain.ru</a>
 +      </div>
 +    </td>
 +  </tr>
 +</table>
 +</body>
 +</html>
 +</code>
 +
 +==== Файл списка пользователей ====
 +
 +Вот так выглядит содержимое //Excel//-файла с единственным пользователем, подпись которому требуется загрузить. 
 +
 +;#;
 +{{:cgp:userlist_cgp_excel.jpg|}}
 +;#;
 +
 +К имени данного пользователя при обработке будет добавлена доменная часть, указанная в файле конфигурации и содержащаяся в //domain_name//.
 +
 +==== Атрибуты из конфигурации ====
 +
 +Если нам требуется заполнить данные в автоматическом режиме, то в шаблон (как текстовый, так и //HTML//) можно подставить описанные в конфигурации названия, к примеру:              <code>__name__, __title__</code> 
 +и т.д., которые будут замменены данными  пользователя из //CGP// (соответствующими заданным атрибутам в конфиге //signature.conf//).
 +
 +==== Запуск скрипта и отладка ====
 +
 +  python3.11 signature.py
 +Скрипт логгирует свои действия в папке: //log_files//
 +
 +{{tag>CommuniGate Mail Python HTML}}