diff --git a/postfix/lang/en b/postfix/lang/en
index a76c755a4..10f91f1b9 100644
--- a/postfix/lang/en
+++ b/postfix/lang/en
@@ -513,6 +513,14 @@ mail_rfc=From line
mail_move=Move to:
mail_eexists=Message no longer exists!
mail_qfile=Mail queue file
+mail_qlast=Last retried at
+mail_qdir=Mail queue status
+mail_qdir_active=Active
+mail_qdir_incoming=Incoming
+mail_qdir_deferred=Deferred
+mail_qdir_corrupt=Corrupt
+mail_qdir_hold=On hold
+mail_qdir_maildrop=Mail drop
view_title=Read Email
view_desc=Message $1 in $2
diff --git a/postfix/postfix-lib.pl b/postfix/postfix-lib.pl
index 5b4902f77..9ce9e7196 100755
--- a/postfix/postfix-lib.pl
+++ b/postfix/postfix-lib.pl
@@ -1505,6 +1505,11 @@ foreach $h (@headers) {
$mail->{'header'}->{lc($h->[0])} = $h->[1];
}
$mail->{'file'} = $file;
+my @st = stat($file);
+$mail->{'last_retry'} = $st[9];
+if ($file =~ /^\Q$config{'mailq_dir'}\E\/([^\/]+)\//) {
+ $mail->{'mailq_dir'} = $1;
+ }
return $mail;
}
diff --git a/postfix/view_mailq.cgi b/postfix/view_mailq.cgi
index 3fcd38195..5b2644e9e 100755
--- a/postfix/view_mailq.cgi
+++ b/postfix/view_mailq.cgi
@@ -53,8 +53,10 @@ if ($in{'headers'}) {
print &ui_table_row($h->[0],
&html_escape(&decode_mimewords($h->[1])), 1, [ "nowrap" ]);
}
- print &ui_table_row($text{'mail_qfile'},
- "".&html_escape($mail->{'file'})."");
+ if ($mail->{'file'}) {
+ print &ui_table_row($text{'mail_qfile'},
+ "".&html_escape($mail->{'file'})."");
+ }
}
else {
# Just show the most useful headers
@@ -70,6 +72,15 @@ else {
print &ui_table_row($text{'mail_subject'},
&html_escape($mail->{'header'}->{'subject'}));
}
+if ($mail->{'last_retry'}) {
+ print &ui_table_row($text{'mail_qlast'},
+ &make_date($mail->{'last_retry'}));
+ }
+if ($mail->{'mailq_dir'}) {
+ print &ui_table_row($text{'mail_qdir'},
+ $text{'mail_qdir_'.$mail->{'mailq_dir'}} ||
+ $mail->{'mailq_dir'});
+ }
print &ui_table_end();
# Find body attachment