负责SVN,邮箱的帐号管理

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MySQLdb
import paramiko
import urllib
import urllib2
from datetime import *
from optparse import OptionParser
import email
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email import encoders
import smtplib
import mimetypes
grouplist=('all@spolo.org',
    'art@spolo.org',
    'gclient@spolo.org',
    'glueui@spolo.org',
    'glueapi@spolo.org',
    'glue@spolo.org',
    'gmeditor@spolo.org',
    'gluetil@spolo.org',
    'webapp@spolo.org')
def join_mail_group(conn, cur, mail_name, mail_group):
    if mail_group in grouplist:
        cur.execute('SELECT goto FROM vmail.alias where address="%s"' % mail_group)
        rows=cur.fetchall()[0][0]
        rows="\r\n".join([rows, mail_name])
        cur.execute('UPDATE vmail.alias set goto="%s" where address="%s"' % (rows,mail_group))
        conn.commit()
    else:
        print "please ensure mail_group correctly"
def deluser_mail_group(conn,cur,mail_name,mail_group):
    if mail_group in grouplist:
        cur.execute('SELECT goto FROM vmail.alias where address="%s"' % mail_group)
        rows=cur.fetchall()[0][0].replace("\r\n%s" % mail_name,"")
        cur.execute('UPDATE vmail.alias set goto="%s" where address="%s"' % (rows,mail_group))
        conn.commit()
    else:
        print "please ensure mail_group correctly"
def add_user(conn,cur, mail_name, user,maildir_stor):
    client=paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect('192.168.1.4', 22, username='test', password="********", timeout=4)
    stdin,stdout,stderr = client.exec_command("openssl passwd -1 %s" % user)
    pwd=stdout.readlines()[0].replace("\n","")
    cur.execute('INSERT INTO vmail.mailbox(username,password,name,maildir,quota,domain,local_part) \
                 VALUES("%s","%s","%s","%s","1024","spolo.org","%s")' % (mail_name,pwd,user,maildir_stor,user))
    join_mail_group(conn,cur,mail_name,"all@spolo.org")
    print  "the user has been created"
def user_del(conn,cur, mail_name):
    cur.execute("DELETE FROM vmail.mailbox WHERE username=\"%s\"" % mail_name)
    deluser_mail_group(conn,cur,mail_name,"all@spolo.org")
    print "the user has been deleted!!!"
def svn_userdel(user,url):
    url_chanpin="http://192.168.4.10/admin/deluser.php"
    url_glue="http://glue.spolo.org/deluser.php"
    url_spp="http://spp.spolo.org/deluser.php"
    url_list=('url_chanpin','url_glue','url_spp')
    if url == 'url_chanpin':
        http_oper(user,url_chanpin)
    elif url == 'url_glue':
        http_oper(user,url_glue)
    elif url == 'url_spp':
        http_oper(user,url_spp)
    else:
        print "the url is error ,plear rewrite!!!/n"
def http_oper(user,url):
    data={"username": user,"repeat_username": user,"operation":"1"}
    data=urllib.urlencode(data)
    req=urllib2.Request(url,
        data=data,
        headers={"Authorization": "Basic d2FuZ3poZW55dToxMjM2NTQ="})
    rep = urllib2.urlopen(req).read().decode('utf-8')
    print rep
def mail(user):
    from_addr = 'postmaster@spolo.org'
    to_addr = '%s@spolo.org' % user
    subject_header = 'Subject: 员工手册'
    p_w_upload = u'd:/员工手册.doc' #文件访问时候要求u,否则不能通过
    body = '''欢迎加入*********科技发展有限公司,请查阅附件'''
    m = MIMEMultipart()
    m["To"] = "%s@spolo.org" % user
    m["From"] = "postmaster@spolo.org"
    m["Subject"] = subject_header
    ctype, encoding = mimetypes.guess_type(p_w_upload)
    print ctype, encoding
    maintype, subtype = ctype.split('/', 1)
    print maintype, subtype
    m.attach(MIMEText(body, 'plain', 'utf-8'))
    fp = open(p_w_upload, 'rb')
    msg = MIMEBase(maintype, subtype)
    msg.set_payload(fp.read())
    fp.close()
    encoders.encode_base64(msg)
    msg.add_header("Content-Disposition", "p_w_upload", filename='员工手册.doc')
    m.attach(msg)
    smtp = smtplib.SMTP() 
    smtp.connect('mail.spolo.org:25') 
    smtp.login('postmaster@spolo.org', "123/bitlanyuan") 
    smtp.sendmail('postmaster@spolo.org', '%s@spolo.org' % user, m.as_string()) 
    smtp.quit()
    print '邮件发送成功'
def main():
    usage="usage: %prog[-h][-a][-d]"
    parser=OptionParser(usage=usage)
    parser.add_option("-a",action="store_const", const=1, dest="add_user",help="add mailbox")
    parser.add_option("-d",action="store_const", const=1, dest="delete_user",help="delete mailbox")
    parser.add_option("-g",dest="user_group",help="join mail_group")
    parser.add_option("-G",dest="userdel_group",help="del user from group")
    parser.add_option("-n",dest="username",help="username")
    parser.add_option("-s",dest="svn",help="input owner's svn eg: url_chanpin,url_glue,url_spp")
    (options,args)=parser.parse_args()
    username=options.username
    url=options.svn
    mail_group=options.user_group
    conn=MySQLdb.connect(host='192.168.1.4',user='test',passwd="*********")
    cur=conn.cursor()
    dt=datetime.now()
    dt_format=dt.strftime('%Y.%m.%d.%H.%M.%S')
    userlist=username.split(',')
    if options.add_user:
        for user in userlist:
            maildir_stor='%s/%s/%s' % ("spolo.org", user, dt_format)
            mail_name=user+"@spolo.org"
            add_user(conn,cur, mail_name, user, maildir_stor)
            mail(user)
    if options.delete_user:
        for user in userlist:
            mail_name=user+"@spolo.org"
            user_del(conn, cur, mail_name)
    if options.user_group:
        join_mail_group(conn, cur, mail_name, mail_group)
    if options.userdel_group:
        deluser_mail_group(conn, cur, mail_name, mail_group)
    if options.svn:
        for user in userlist:
            svn_userdel(user, url)
    conn.close()
if __name__ == '__main__':
    main()