Приветствую Вас, Гость
Главная » Статьи » Mail » Zimbra

Zimbra. Блокировка ящиков, не открывавшихся месяц и более

Сразу не получилось сделать всё в одном скрипте, а может и не надо...

Всё делаем под пользователем Zimbra

1. Получаем список всех активных почтовых ящиков:
 
 zmaccts | grep active | grep '@' | sed -r -s 's/ /,/g' | tr -s ',' > noactulist.txt

zmaccts разделяет поля в выводимой строке тучей пробелов, поэтому при помощи sed меняем их на ",", а утилитка tr производит усекновение лишних. Попутно обнаружилось, что zmaccts отводит на имя почтового ящика всего 36 символов. Необходимо внимательно проверить полученный список, пометить (например "#") строки с технологическими и другими ящиками, которые, по тем или иным причинам, нельзя блокировать и сгенерировать уточнённый список:

 cat actuserlist.txt | grep -v '#' > noactulist1.txt

В любом случае в него не должны попасть почтовые ящики:

 #admin@mail.boo.ru,active,03/20/14,11:59,06/18/15,08:37
 #galsync.0ivjy0_v_h@mail.boo.ru,active,03/20/14,12:04,never
 #ham.8hnduamz5@mail.boo.ru,active,03/20/14,12:00,never
 #spam.kkoqxysq_w@mail.boo.ru,active,03/20/14,11:59,never
 #virus-quarantine.pm2vuzyr@mail.boo.ru,active,03/20/14,12:00,never
 #galsync@pay.boo.ru,active,12/04/14,20:12,never
 #admin@boo.ru,active,03/21/14,19:15,01/25/15,13:50
 #postmaster@boo.ru,active,03/21/14,22:22,03/25/14,04:40

2. Теперь необходимо выделить из полученного списка почтовые ящики, не открывавшиеся, например, 31 день. На bash'е сваять не смог, не нашёл как сравнивать дату на "позже/раньше",поэтому python:

 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 #
 #       acclock.py
 #       
 #       
 
 import datetime, time
 
 # List locked users
 namefl = "noactulist1.txt"
 namefo = "lockulist.txt"
 
 # Current date
 date_cur = datetime.date.today()
 # No active period
 date_delta = datetime.timedelta(days=31)
 # Limit for lock
 date_old = date_cur - date_delta
 
 # Open file with users list
 fl = open(namefl)
 fo = open(namefo, "w")
 #
 for line in fl:
   linef = line.split(",")[4]
   if linef == "never\n":
     print line.split(",")[0]
     fo.write(line.split(",")[0] + "\n")
   else:
     lineff = datetime.date.fromtimestamp(time.mktime(time.strptime(linef, "%m/%d/%y")))
     if lineff < date_old:
       print line.split(",")[0]
       fo.write(line.split(",")[0] + "\n")
 
 # Close file
 fo.close()
 fl.close()

3. Собственно скрипт блокировки почтовых ящиков по списку, полученному в результате предыдущих действий:

 #!/bin/bash
 
logfile="lockulist.log"
  errorfile="lockulist.err"
   ###### Do not modify past here
  #######################################
   date=`date +%X_-_%x`
 
  echo "" >> $logfile
  echo "------------------------------------" >> $logfile
  echo "lock user started..  $date" >> $logfile
  echo "" >> $logfile
 
  { while IFS='\n' read u1; do
          user=$u1
          echo "lock User $user"
          date=`date +%X_-_%x`
          zmprov ma $u1 zimbraAccountStatus "locked"
                  echo "$u1 $date" >> $logfile
  done ; } < lockulist.txt
 
  date=`date +%X_-_%x`
 
  echo "" >> $logfile
  echo "lock user finished..  $date" >> $logfile
  echo "------------------------------------" >> $logfile

 

Категория: Zimbra | Добавил: ab0k (24.06.2015)
Просмотров: 1006 | Теги: Python, Zimbra | Рейтинг: 0.0/0
Всего комментариев: 0
avatar