Zimbra: generar firma HTML basada en datos LDAP

Introducción



Zimbra Web Admin no tiene herramientas para generar firmas de correo electrónico. Después de haber recogido un montón de manuales, me di cuenta de que ninguno me queda bien.



La tarea parece trivial, pero no se encontró una solución sencilla de inmediato. Espero que este artículo ayude a alguien a ahorrar mucho tiempo y esfuerzo.



Por mi parte, esto es un aporte a la comunidad, por los desarrollos utilizados anteriormente.



Requisitos del sistema



sistema: Linux Ubuntu 18.04

Versión Zimbra: Zimbra 8.8.15



Script de generación de firmas HTML



Comencemos de inmediato con el guión en sí ... a continuación daré explicaciones y una descripción de cómo funciona el guión.



#!/bin/bash
# created by Parfentiev Aleksey, Shultz Denis
 
SRC_LOGO="https://mail.domen.ru/home/it@domen.ru/Briefcase/Logo/tl_logo.png"
SRC_TXT=" "
SIGN_NAME="_"
DOMEN="domen.ru"
 
# Check for run as zimbra user
ID=`id -u -n`
if [ x$ID != "xzimbra" ]; then
   echo "Please run as ZIMBRA user"
   echo "Exiting..."
   exit 1
fi
 
# Obtain all user accounts in $DOMEN (template: Family.IN@domen.com or family.in_jr@domen.com)
accounts=`zmaccts | grep 'active'| grep $DOMEN | grep -P "(\b[A-z]+)\.(\D{2,5}@).*" | awk '{print $1}'`
 
for ac in $accounts; do
  echo -ne "Checking account: $ac \t"
 
    # Try delete signature
    /opt/zimbra/bin/zmprov dsig $ac $SIGN_NAME
 
    echo -ne "Setting signature... "
 
    # Obtain signature from LDAP user atributes
 
    declare -A arr
    mapfile -t ARRAY < <(/opt/zimbra/bin/zmprov ga $ac | egrep "(^cn|^title|^mobile|^zimbraPrefFromAddress|^st|^l|^street|^telephoneNumber|^pager|^postalCode)" | sed 's/: /:/')
    for sgn in "${ARRAY[@]}" ; do
        KEY=${sgn%%:*}
        VALUE=${sgn#*:}
        arr[$KEY]=$VALUE
    done
 
    HTML='<div style="display: inline-block;" data-mce-style="display: inline-block;">'
    HTML+='<br><table style="width: 550px; border: 0; border-top: 1px #e0e0e0 solid;" align="left" data-mce-style="width: 550px; border: 0; border-top: 1px #e0e0e0 solid;">'
    HTML+='<tbody>'
    HTML+='<tr><td style="width: 87px; padding: 5px;" valign="middle" align="center" data-mce-style="width: 87px; padding: 5px;">'
    HTML+='<img src="'$SRC_LOGO'"  alt="'$SRC_TXT'"></td>'
    HTML+='<td style="font-size: 10pt; color: #808080; font-family: georgia, serif; width: 389px;" data-mce-style="font-size: 10pt; color: #808080; font-family: georgia, serif; width: 389px;">'
    HTML+="${arr['cn']} - ${arr['title']}   <br>: ${arr["telephoneNumber"]} .${arr["pager"]}   : ${arr["mobile"]}"
    HTML+="<br>e-mail: ${ac} <br>${arr['postalCode']} ${arr['st']} ${arr['l']} ${arr['street']}</td></tr></tbody></table></div>"
    unset arr
 
    # Set signature for account $ac and obtain signature id account
    sign_id=$(/opt/zimbra/bin/zmprov csig $ac $SIGN_NAME zimbraPrefMailSignatureHTML "$HTML")
    # Obtain delegates mailbox accounts
    mapfile -t ARRAY < <(/opt/zimbra/bin/zmprov gid $ac name | cut -d " "  -f 3-7 | grep -P '[^.*]')
    for gid in "${ARRAY[@]}" ; do
    # Set defalt signature position (outlook (before) or internet (after attachments)) for each account
    /opt/zimbra/bin/zmprov modifyIdentity $ac "$gid" zimbraPrefDefaultSignatureId $sign_id zimbraPrefForwardReplySignatureId $sign_id zimbraPrefMailSignatureStyle outlook
    done
    echo "done!"


transferimos este script a la máquina host de cualquier forma que usted conozca.



Colóquelo en la carpeta / usr / local / bin ... o cree un archivo zm_sign_html.sh a lo largo de esta ruta y copie / pegue ...



sudo -i
#    sudo user
#    /usr/local/bin/zm_sign_html.sh
touch /usr/local/bin/zm_sign_html.sh
#    copy/paste
#  
chmod 755 /usr/local/bin/zm_sign_html.sh


Descripción del guión



  1. compruebe si el script se ejecuta desde el usuario de zimbra (los comandos CLI se ejecutan desde el usuario de zimbra).

    es posible hacerlo de manera diferente ... use el comando runuser y ejecute el script como root.

  2. .



    :



    family.in@domen.ru family.in_jr@domen.ru



    : family — .

    in —

    in_jr — ( .).



    : Zimbra



    , ivanov.aa@domen.ru , zavod@domen.ru .



    grep -P "(\b[A-z]+)\.(\D{2,5}@).*"



    accounts=`zmaccts | grep 'active'| grep $DOMEN | grep -P "(\b[A-z]+)\.(\D{2,5}@).*" | awk '{print $1}'`
    


  3. SIGN_NAME ( — CLI , )

  4. .



    LDAP, , HTML ( HTML ).



    
    mapfile -t ARRAY < <(/opt/zimbra/bin/zmprov ga $ac | egrep "(^cn|^title|^mobile|^zimbraPrefFromAddress|^st|^l|^street|^telephoneNumber|^pager|^postalCode)" | sed 's/: /:/')
    


    , : cn, title ..



    :





  5. ( , ) .



    , ( — ).







    , ( « », « » « »).



    . .



    :



    /opt/zimbra/bin/zmprov modifyIdentity $ac "$gid" zimbraPrefDefaultSignatureId $sign_id zimbraPrefForwardReplySignatureId $sign_id zimbraPrefMailSignatureStyle outlook


    zimbraPrefMailSignatureStyle: outlook — , internet — …



    — :





  6. .

  7. .





SRC_LOGO = " mail.domen.ru/home/it@domen.ru/Briefcase/Logo/tl_logo.png " - enlace al logo de la organización.



Cree un buzón de correo del departamento de TI (it@domen.ru). Zimbra tiene un servicio de archivo de documentos integrado (Portafolio). En el cuadro del departamento de TI en el Portafolio, cree una carpeta de LOGO, coloque el logo de nuestra organización en ella.



Permita el acceso a esta carpeta.



imagen



Ahora el logo de nuestra organización está disponible en la dirección:

mail.domen.ru/home/it@domen.ru/Briefcase/Logo/tl_logo.png



SRC_TXT = "LOGO de la Organización" - una explicación de texto si la carga de imágenes en el navegador está deshabilitada.



SIGN_NAME = "Organización" - Nombre de la firma (se puede transcribir, se puede en ruso).



DOMEN= "Domen.ru" - el dominio de correo para el que instalaremos firmas.



Automatización de ejecución



Configure un crontab desde el usuario de zimbra:



sudo su zimbra
crontab -e


Tenga cuidado, los trabajos en segundo plano de zimbra se están ejecutando en el crontabe de este usuario (entre las secciones ZIMBRA_START y ZIMBRA_END).



Agregamos Nuestra tarea al final del archivo ... ¡no olvides dejar una línea vacía al final!



Ejecutamos el script /usr/local/bin/zimbra/zm_sign_html.sh todos los días a las 6:00.



Ejemplo de archivo crontab:



#
35 3 * * * /opt/zimbra/bin/zmcbpadmin --cleanup >/dev/null 2>&1
# ZIMBRAEND -- DO NOT EDIT ANYTHING BETWEEN THIS LINE AND ZIMBRASTART
0 6 * * * /usr/local/bin/zm_sign_html.sh


Conclusión



Eso es todo por ahora. Puede agregar un enlace al correo electrónico. Si alguien lo necesita, lo agregaré.

Escribe en los comentarios ... ¡



Buen humor a todos! ¡Y no te enfermes!



Enlaces a artículos usados



phas13.blogspot.com/search/label/Zimbra

wiki.zimbra.com/wiki/Setting_automatic_Default_Signature



PD: Un agradecimiento especial a Denis Schultz (tlk234) para obtener ayuda para depurar el script y trabajar con la documentación de la CLI de Zimbra.



All Articles