#!/usr/bin/python
# -*- coding: utf-8 -*-

# Filename: mbox2z.py

__module_name__= "Mailbox To Zimbra"
__module_version__= "1.0"
__module_description__= "Posta Inportatu Zimbrara"
__module_author__= "Alfredo Barrainkua Zallo"



################################################################################################################

#				Mailbox To Zimbra

################################################################################################################
#
# 1.0 - 2009-01-13
#	Hasierako bertsioa
#
###############################################################################################################

import sys
import os
import string
import readline
import commands
import grp
from datetime import date
from time import time, localtime, strftime
import ldap


# Skriptaren izena
PRGNAME = "mbox2z"


# Fitxategien izena...
gaur_d = date.today()
LOGFILE = PRGNAME + "-" + gaur_d.strftime("%Y%m%d") + "-" + strftime("%H%M", localtime()) + ".log"
ZUSERSFILE = PRGNAME + "-" + gaur_d.strftime("%Y%m%d") + "-" + strftime("%H%M", localtime()) + ".zusers"
#ZUSERSFILE2 = PRGNAME + "-" + gaur_d.strftime("%Y%m%d") + "-" + strftime("%H%M", localtime()) + ".zusers.bad"

ZUSERSFILE = "zusers4"

OLDMBOXDIR = "/oldmail/"
OLDHOME = "/oldhome/"

MODUA = "EGIN"

# Domeinuare izena
DOMEINUA = "iurreta-institutua.net"

# Konexiorako datuak
Server = "ldap://10.22.x.y:389"
BindName = "********@iurreta-institutua.net"
Password = "***********"

# Bilaketa datuak
searchScope = ldap.SCOPE_SUBTREE
retrieveAttributes = None
BaseDN = "ou=Users,dc=iurreta-institutua,dc=net"

# Aginteak
ZMPROV = "/opt/zimbra/bin/zmprov"
ZMMAILBOX = "/opt/zimbra/bin/zmmailbox"

# Erregistro fitxategiak ireki
logfile = open(LOGFILE, "w")

logfile.write("####################################################################################################\n")
logfile.write("#                          		     Mailbox To Zimbra       		                  #\n")
logfile.write("####################################################################################################\n")
logfile.write("Data eta ordua: " + gaur_d.strftime("%Y-%m-%d") + "   " + strftime("%H:%M", localtime()) + "\n")


# Zimbrako erabiltzaileak hartu
#zerab = commands.getstatusoutput(ZMPROV + " gaa " + DOMEINUA + " > " + ZUSERSFILE)

#sys.exit(0)

# OpenLDAPera konektatu
try:
    l = ldap.initialize(Server)
except:
    print "Errorea konektatzean"
    logfile.write("Errorea konektatzean\n")

l.protocol_version = ldap.VERSION3

try:
    l.simple_bind(BindName, Password)
except:
    print "Errorea direktorioarekin batzean"
    logfile.write("Errorea direktorioarekin batzean\n")


logfile.write("----------------------------------------\n")

zusersfile = open(ZUSERSFILE)
for line in zusersfile.readlines() :
    lerroa = line.strip()
    logfile.write("\n")
    logfile.write("Inportatzeko posta kontua: " + lerroa + "\n")

    # OpenLDAP-en existitzen bada
    searchFilter = "mail=" + lerroa
    res = l.search_s(BaseDN, searchScope, searchFilter, retrieveAttributes)

    if len(res) == 1 :
	logfile.write("OenLDAP-ean dago: " + lerroa + " Inportatu posta badauko\n")
    else :
	logfile.write("OenLDAP-ean ez dago: " + lerroa + " Erabiltzaile zaharra. Ez inportatu ezer\n")
	continue

    # Ikusi posta "mbox-a" duen
    erabil = lerroa.split("@", 2)[0]
    print "\n" + erabil
    logfile.write("Erabiltzailea: " + erabil + "\n")
    if os.path.exists(OLDMBOXDIR + erabil) :
        logfile.write("Badauka posta: " + erabil + " kontuak\n")
    else :
        logfile.write("Ez dauka posta: " + erabil + " kontuak\n")
	continue

    # Bihurtu "mbox" -> "mdir"
    if MODUA == "EGIN" :
	error1 = 0
	error2 = 0
	error3 = 0
	print "Hor doa >>>>>>>>>>"
	commands.getstatusoutput("mkdir -p " + OLDHOME + erabil + "/mboxposta/Inbox")
	commands.getstatusoutput("rm " + OLDHOME + erabil + "/mboxposta/Inbox/*")
	commands.getstatusoutput("mkdir -p " + OLDHOME + erabil + "/mboxposta/Sent")
	commands.getstatusoutput("rm " + OLDHOME + erabil + "/mboxposta/Sent/*")
	commands.getstatusoutput("mkdir -p " + OLDHOME + erabil + "/mboxposta/Drafts")
	commands.getstatusoutput("rm " + OLDHOME + erabil + "/mboxposta/Drafts/*")

	# Bihurtu Inbox-a
	error = commands.getstatusoutput("mbox2mdir " + OLDMBOXDIR + erabil + " " + OLDHOME + erabil + "/mboxposta/Inbox -eeml")
	print error
	if error[0] != 0 :
    	    logfile.write("Errorea MDIR bihurtzerakoan (Inbox)\n")
	print "Inbox mezuak bihurtuak"
#	error = commands.getstatusoutput(ZMMAILBOX + " -z -m " + lerroa + " deletefolder /PostaZaharra")
#	print "PostaZaharra ezabatua"
    	# Sortu "PostaZaharra" karpeta eta Inbox, Sent eta Drafts bere barnean
	error = commands.getstatusoutput(ZMMAILBOX + " -z -m " + lerroa + " createfolder /PostaZaharra")
#	error = commands.getstatusoutput(ZMMAILBOX + " -z -m " + lerroa + " createfolder /PostaZaharra/Inbox")
#	error1 = commands.getstatusoutput(ZMMAILBOX + " -z -m " + lerroa + " addMessage /PostaZaharra/Inbox " + OLDHOME + erabil + "/mboxposta/Inbox")

	# Bihurtu Sent
	if os.path.exists(OLDHOME + erabil + "/INBOX.Sent") :
	    error = commands.getstatusoutput("mbox2mdir " + OLDHOME + erabil + "/INBOX.Sent " + OLDHOME + erabil + "/mboxposta/Sent -eeml")
	    print error
	    if error[0] != 0 :
    		logfile.write("Errorea MDIR bihurtzerakoan (Sent)\n")
	    print "Sent mezuak bihurtuak"
	    error = commands.getstatusoutput(ZMMAILBOX + " -z -m " + lerroa + " createfolder /PostaZaharra/Sent")
	    error2 = commands.getstatusoutput(ZMMAILBOX + " -z -m " + lerroa + " addMessage /PostaZaharra/Sent " + OLDHOME + erabil + "/mboxposta/Sent")

	# Bihurtu Drafts
	if os.path.exists(OLDHOME + erabil + "/INBOX.Drafts") :
	    error = commands.getstatusoutput("mbox2mdir " + OLDHOME + erabil + "/INBOX.Drafts " + OLDHOME + erabil + "/mboxposta/Drafts -eeml")
	    print error
	    if error[0] != 0 :
    		logfile.write("Errorea MDIR bihurtzerakoan (Drafts)\n")
	    print "Drafts mezuak bihurtuak"
#	    error = commands.getstatusoutput(ZMMAILBOX + " -z -m " + lerroa + " createfolder /PostaZaharra/Drafts")
#	    error3 = commands.getstatusoutput(ZMMAILBOX + " -z -m " + lerroa + " addMessage /PostaZaharra/Drafts " + OLDHOME + erabil + "/mboxposta/Drafts")

	print "Mezuak kargatuak"
	print "Erroreak: " + str(error1) + " -- " + str(error2) + " -- " + str(error3)
	logfile.write("Emaitza: " + str(error1) + " -- " + str(error2) + " -- " + str(error3) + "\n")


l.unbind_s()


logfile.close()
#provfile.close()

sys.exit(0)

