Benjamin Renard commited on 2015-11-16 17:44:16
Showing 1 changed files, with 33 additions and 0 deletions.
... | ... |
@@ -30,6 +30,8 @@ import imaplib |
30 | 30 |
import logging |
31 | 31 |
import sys |
32 | 32 |
|
33 |
+import re |
|
34 |
+ |
|
33 | 35 |
parser = OptionParser() |
34 | 36 |
|
35 | 37 |
|
... | ... |
@@ -98,6 +100,13 @@ parser.add_option('-l', |
98 | 100 |
help="List mailboxes", |
99 | 101 |
default=False) |
100 | 102 |
|
103 |
+parser.add_option('-q', |
|
104 |
+ '--quota', |
|
105 |
+ action="store_true", |
|
106 |
+ dest="quota", |
|
107 |
+ help="Display quota informations", |
|
108 |
+ default=False) |
|
109 |
+ |
|
101 | 110 |
parser.add_option('--expunge', |
102 | 111 |
action="store", |
103 | 112 |
type="string", |
... | ... |
@@ -172,6 +181,12 @@ def expunge(server,mailbox): |
172 | 181 |
except Exception as e: |
173 | 182 |
logging.error('Error expunging %s mailbox : %s' % (mailbox,e)) |
174 | 183 |
|
184 |
+def format_quota(num): |
|
185 |
+ num=int(num) |
|
186 |
+ for x in ['KB', 'MB', 'GB', 'TB']: |
|
187 |
+ if num < 1024.0: |
|
188 |
+ return "%3.1f %s" % (num, x) |
|
189 |
+ num /= 1024.0 |
|
175 | 190 |
|
176 | 191 |
try: |
177 | 192 |
if options.list: |
... | ... |
@@ -188,6 +203,24 @@ try: |
188 | 203 |
expunge(server,dirname) |
189 | 204 |
else: |
190 | 205 |
expunge(server,options.expunge) |
206 |
+ elif options.quota: |
|
207 |
+ logging.debug("Get quota usage") |
|
208 |
+ ret=server.getquotaroot(options.mailbox) |
|
209 |
+ logging.debug("IMAP server return : %s" % str(ret)) |
|
210 |
+ # Return example on Dovecot |
|
211 |
+ # ('OK', [['"INBOX" "User quota"'], ['"User quota" (STORAGE 0 1024)']]) |
|
212 |
+ if isinstance(ret, (list, tuple)): |
|
213 |
+ for quota in ret[1][1]: |
|
214 |
+ if quota is None: |
|
215 |
+ logging.info('No quota defined') |
|
216 |
+ continue |
|
217 |
+ parsequota=re.match('^"([^"]*)" \(STORAGE ([0-9]*) ([0-9]*)\)$',quota) |
|
218 |
+ if parsequota: |
|
219 |
+ logging.info("Quota %s : %s / %s" % (parsequota.group(1),format_quota(parsequota.group(2)),format_quota(parsequota.group(3)))) |
|
220 |
+ else: |
|
221 |
+ logging.error("Error parsing quota string from IMAP server : '%s'" % quota) |
|
222 |
+ else: |
|
223 |
+ logging.error("Invalid result getting quotas: %s" % ret) |
|
191 | 224 |
else: |
192 | 225 |
logging.debug("Select mailbox") |
193 | 226 |
ret = server.select(options.mailbox) |
194 | 227 |