#! /usr/bin/perl -w
# Generate a DSPAM Pending Mail Summary email to the specified user.

#use CGI; # Only need this if we decide to use escapeHTML
  use strict;

  if ( $#ARGV != 0 )
  {
    die "Usage: dspam-pending-mail LoginID\n";
  }

  exit 0 if ( ! -d $ENV{"HOME"} . "/Maildir/.Pending" );

  my $delimiter = "+";
  my $mta = "postfix";

  my $mtacheck = ""; # = `grep MAIL_TRANSFER_AGENT /etc/dspamrc | grep qmail`;

  if ( $mtacheck ne "" )
  {
    $mta = "qmail";
    $delimiter = "-";
  }

  my $User = shift;
  my $HostName = `hostname`;
  chop $HostName;

  my $date = `date '+%a, %d %b %Y %H:%M:%S %z'`;
  chop $date;
  my $dspam_pending = "/usr/bin/dspam-pending";
  my $flags = "-m -f -s -d";
  my $release_addr = "$User" . $delimiter . "dspam\@$HostName";
  my $whitelist_addr = "$User" . $delimiter . "dspam\@$HostName";
  my $sendmail = "/usr/sbin/sendmail -t";
  my $mail_from = "<$User\@$HostName>";
  my $mail_to = "$User\@$HostName";
  my $subject = "DSPAM Pending Summary";
  my $mime_boundary; # = "---DSPAM-PENDING-SUMMARY---";

  # Set up for dropping mail file into user's qmail Maildir INBOX.
  my $MailDir = $ENV{"HOME"} . "/Maildir";
  my $TmpDir = "$MailDir/tmp";
  my $NewDir = "$MailDir/new";
  my $TmpExt = time . ".$$." . $HostName;
  my $TmpFile = "$TmpDir/$TmpExt";
  my $NewFile = "$NewDir/$TmpExt";

  my $out = "SENDMAIL";
  #my $out = "STDOUT";

  my $msg_id;
  my $desc;
  my $pending_output = 0; # True if there is any output from the pending command.

  open (DSPAM_PENDING, "-|", "$dspam_pending $flags")
    or die "Can't open $dspam_pending $flags: $!";

  if ($out eq "SENDMAIL")
  {
    #open (OUT, "| $sendmail") or die "Can't open sendmail: $!";
    open( OUT, ">$TmpFile" ) or die "Can't open $TmpFile\n";
    print OUT "From: ", $mail_from, "\n";
    print OUT "To: ", $mail_to, "\n";
    print OUT "Date: $date\n";
    print OUT "Subject: ", $subject, "\n";
    print OUT "Mime-Version: 1.0\n";
    if ( $mime_boundary )
    {
      print OUT "Content-Type: multipart/alternative; boundary=\"",
         $mime_boundary, "\"\n";
    }

    print OUT "Content-Type: text/html; charset=\"iso-8859-1\"\n";
    #print OUT "Content-Transfer-Encoding: quoted-printable\n";
    print OUT "\n";

    if ( $mime_boundary )
    {
      print OUT $mime_boundary, "\n";
    }
  }
  else
  {
    open OUT, ">&", file STDOUT;
  }

  my @msg_id;
  my @desc;
  my $max_index = 0;

  while( <DSPAM_PENDING> )
  {
    chop;
    ($msg_id, $desc) = split(/, /, $_, 2);
    $desc = "" if ( ! $desc );
    $msg_id[ $max_index ] = $msg_id;
    $desc[ $max_index   ] = $desc;
    $max_index++;
  }

  close( DSPAM_PENDING );

  # Now build output file/email.

  print OUT "<HTML>\n";
  print OUT "<HEAD><TITLE>$subject</TITLE></HEAD>\n";
  print OUT "<BODY>\n";
  print OUT "<CENTER>";
  print OUT "<H1>";
  #print OUT "<a href=\"https://\@$HostName/dspam\">";
  print OUT "$subject";
  #print OUT "</a>";
  print OUT "</H1></CENTER>\n";
  print OUT "<FONT COLOR=\"black\" SIZE=\"1\" FACE=\"Arial\">\n";
  print OUT "<BR>\n";
  print OUT "Number of new messages in queue: $max_index<BR>\n";
  #print OUT "<A HREF=\"mailto:" . $User . $delimiter . "dspam\@$HostName?subject=get-summary\">[Get Summary]</A><BR>\n";
  #print OUT "<A HREF=\"mailto:" . $User . $delimiter . "dspam\@$HostName?subject=get-whitelist\">[Get Whitelist]</A><BR>\n";
  #print OUT "<A HREF=\"mailto:" . $User . $delimiter . "dspam\@$HostName?subject=get-whitelist-confirmed\">[Get Whitelist Confirmed]</A><BR>\n";
  print OUT "<P></P>\n";
  print OUT "<TABLE>\n";

  my $index;

  for ( $index = 0; $index < $max_index; $index++ )
  {
    $msg_id = $msg_id[ $index ];
    $desc   = $desc[ $index   ];
    print OUT "<TR>\n";
    #print OUT "<TD><A HREF=\"mailto:$release_addr?subject=release+$msg_id\">[Release]</A></TD>\n";
    #print OUT "<TD><A HREF=\"mailto:$whitelist_addr?subject=whitelist+$msg_id\">[Whitelist]</A></TD>\n";
    print OUT "<TD> $desc</TD>\n";
    print OUT "</TR>\n";

    $pending_output = 1; # Note that there is output from the command.
  }

  print OUT "</TABLE>\n";
  print OUT "</BODY>\n";
  print OUT "</HTML>\n";

  close( OUT ) || die "Can't close output.\n";

  if ($out eq "SENDMAIL")
  {
    if ( $mime_boundary )
    {
      print OUT "$mime_boundary\n";
    }

    # If there is output then go ahead and "send" the mail.
    if ( $pending_output )
    {
      rename $TmpFile, $NewFile;
    }
    else # No output so we can zap the temporary file.
    {
      unlink $TmpFile;
    }
  }

  exit 0;
