#!/usr/bin/perl -w

use strict;
use Cyrus::IMAP::Admin;

my $cyrushost = 'localhost';
my $cyrususer = 'imapadminuser';
my $cyruspass = 'yourimapadminpasswordhere';

my $cyrus = new Cyrus::IMAP::Admin $cyrushost;
$cyrus->authenticate(-mechanism => 'login', -user => $cyrususer, -password => $cyruspass); 
die "Cyrus: " . $cyrus->error() if $cyrus->error();

my @mboxes = grep { /^user\.[^\.]+$/ } map { $_->[0] } $cyrus->listmailbox('*');

print "# " . scalar localtime() . "\n";

foreach my $mbox (@mboxes) {
	my ($qr, %q) = $cyrus->listquotaroot($mbox);
	next unless $qr eq $mbox;
	next unless $q{'STORAGE'}[0] >= $q{'STORAGE'}[1];
	my ($user) = $mbox =~ /^user\.(.+)$/;
	next if $user =~ m/:/; # sanity check, should never match
	print "$user:\t:defer: The users mailbox is full. Please try re-sending your e-mail later.";

	# display the quota for people who are really high
	my $pc = sprintf('%.1f', ($q{'STORAGE'}[0] / $q{'STORAGE'}[1]) * 100);
	print " ($pc% used)" if $pc > 110;
	print "\n";
}

