星期三, 6月 15, 2011

Postfix mailbox quota check

因為敝公司近幾年來新人都用WebMail,又因為OpenWebMail只能用mailbox,因此偶爾會發生用戶mailbox爆掉的情形。
搜尋後並沒找到Postfix內建有警告功能,網路上只有Postfix Checking Maildir Disk Usage,是駱駝文寫的,我不會改 =.=

最後決定自己動手做,雖然不會大蟒蛇還是勉強寫出個小程式,用Crontab排程每天檢查一次,再自動通知用戶。

#!/usr/bin/env python
#coding: utf-8
import os
import smtplib
from email.mime.text import MIMEText

def sendWarnMail(account, name):
    fromaddr="Email系統 <postmaster@example.com.tw>";
    toaddrs=name +" "+ "<"+account+"@example.com.tw>";
    msg =  MIMEText(name +" 您好:\n\t您的email容量即使用完畢, 請將伺服器上的郵件搬移一部份至其他郵件匣,以免無法收信,謝謝。", 'plain','utf-8');
    msg['Subject'] = "Email容量不足通知";
    msg['From'] = fromaddr;
    msg['To'] = toaddrs;
    server = smtplib.SMTP('localhost');
    #server.set_debuglevel(1);
    server.sendmail(fromaddr, toaddrs, msg.as_string());
    server.quit();
    return;
    
def getPostfixMailBoxLimit(config):
    f=open(config,'r');
    limit = 0;
    for line in f:
        line=line.lstrip();
        if line.startswith("mailbox_size_limit"):
            arrs = line.split('=');
            limit = int(arrs[1]);
            break;
    f.close()
    return limit;

#主程式
postfixconfig = "/usr/local/etc/postfix/main.cf";
mailboxdir = "/var/mail";
postfixlimit = getPostfixMailBoxLimit(postfixconfig);
#設定提醒上限減100MB
sizelimit = postfixlimit-100000000;
f = open('/etc/passwd', 'r');
for line in f:
    arrs = line.split(':');
    if not arrs[0].startswith('#'):
        mailbox = mailboxdir+"/"+arrs[0];
        if os.path.exists(mailbox):
            filesize = os.path.getsize(mailbox);
            if(filesize > sizelimit):
                sendWarnMail(arrs[0], arrs[4]);
f.close();

沒有留言: