Tomorrow, I will be experimenting with jamming the following into a
perl function (I use the embedded perl a lot) and call it as a
condition for a verify_only router, and then defer with an appropriate
quota related message is customer is already over quota to stop
further incoming emails from clogging the queue.


use strict;
use warnings;
# Prints out 0 if over quota (means "not ok")
# Prints out 1 if not over quota
my $local_part = shift();
my $domain     = shift();
print_and_exit(1) if (!defined $local_part || !defined $domain);
# We use hashed subdirectories for mailstores
my $home = "/netapp3/mail/maildirs";
(my $tmp = $domain) =~ s/^(...).*/$1/;
foreach my $char (split(//,$tmp)) {
  $home .= '/';
  $home .= $char =~ /\w/ ? $char : '_';
}

my $file="$home/$domain/$local_part/Maildir/maildirsize";
open(my $fh, "<", $file) or print_and_exit(1);
my @lines = <$fh>;
close($fh);
print_and_exit(1) if (scalar @lines == 0);

my ($quota,$qcount);  # count is calculated, but ignored
my @quota = split(/,/,$lines[0]);
if (scalar @quota > 0) {
  $quota  = substr($quota[0],0,-1)
    if (substr($quota[0],-1) eq 'S');
  $qcount = substr($quota[0],0,-1)
    if (substr($quota[0],-1) eq 'C');
}
print_and_exit(1) if (!defined $quota);

my $line=my $size=my $msgs=0;
do {
  $line++;
  (my $msgsize, my $msgcount) = split(" ", $lines[$line]);
  $size+=$msgsize; $msgs+=$msgcount;
} while ($line < $#lines);

if ($size > $quota) {
  print_and_exit(0);  # Over quota!
} else {
  print_and_exit(1);  # Still has room
}

sub print_and_exit {
  my $rv = shift() || 0;
  print $rv, "\n";  # Need the newline?
  exit;
}


Expanded upon original work at
http://www.kutukupret.com/2011/05/18/check-disk-quota-usage-by-parsing-maildirsize/

...Todd


On Wed, Nov 28, 2012 at 6:22 PM, Robert Blayzor <[email protected]> wrote:
> On Nov 28, 2012, at 8:32 PM, Jeremy Harris <[email protected]> wrote:
>> The "quota" option on an appendfile transport is an expanded string;
>> you can basically do what you want with it given a bit of creativity.
>
>
> Well, yes, it is.  But that string is expanded regardless if the user is over 
> quota or not.  The idea is to trap the over quota condition and act on it.
>
> Perhaps another string thats only expanded only if the over quota condition 
> happens.
>
> --
> Robert Blayzor
> INOC, LLC
> [email protected]
> http://www.inoc.net/~rblayzor/
>
>
>
>
> --
> ## List details at https://lists.exim.org/mailman/listinfo/exim-users
> ## Exim details at http://www.exim.org/
> ## Please use the Wiki with this list - http://wiki.exim.org/



-- 
The total budget at all receivers for solving senders' problems is $0.
 If you want them to accept your mail and manage it the way you want,
send it the way the spec says to. --John Levine

-- 
## List details at https://lists.exim.org/mailman/listinfo/exim-users
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/

Reply via email to