#!/usr/bin/perl # delete_mail.cgi # Delete, mark, move or copy multiple messages require './mailboxes-lib.pl'; &ReadParse(); &can_user($in{'user'}) || &error($text{'mail_ecannot'}); @delete = sort { $a <=> $b } split(/\0/, $in{'d'}); @folders = &list_user_folders($in{'user'}); $folder = $folders[$in{'folder'}]; if ($in{'mark1'} || $in{'mark2'}) { # Marking emails with some status @delete || &error($text{'delete_emnone'}); @mail = &mailbox_list_mails($delete[0], $delete[@delete-1], $folder); dbmopen(%read, &user_read_dbm_file($in{'user'}), 0600); local $m = $in{'mark1'} ? $in{'mode1'} : $in{'mode2'}; foreach $d (@delete) { local $hid = $mail[$d]->{'header'}->{'message-id'}; if ($m) { $read{$hid} = $m; } else { delete($read{$hid}); } } dbmclose(%read); $perpage = $folder->{'perpage'} || $config{'perpage'}; &redirect("list_mail.cgi?start=$in{'start'}&folder=$in{'folder'}&user=$in{'user'}&dom=$in{'dom'}"); } elsif ($in{'move1'} || $in{'move2'}) { # Moving mails to some other user's inbox &check_modification($folder); @delete || &error($text{'delete_emovenone'}); $muser = $in{'move1'} ? $in{'mfolder1'} : $in{'mfolder2'}; &can_user($muser) || &error($text{'delete_emovecannot'}); @mfolders = &list_user_folders($muser); @mfolders || &error($text{'delete_emoveuser'}); @mail = &mailbox_list_mails($delete[0], $delete[@delete-1], $folder); foreach $d (@delete) { $mail[$d] || &error($text{'mail_eexists'}); push(@movemail, $mail[$d]); } &lock_folder($folder); &lock_folder($mfolder); &mailbox_move_mail($folder, $mfolders[0], @movemail); &unlock_folder($mfolder); &unlock_folder($folder); &webmin_log("movemail", undef, undef, { 'from' => $folder->{'file'}, 'to' => $mfolders[0]->{'file'}, 'count' => scalar(@delete) } ); &redirect("list_mail.cgi?start=$in{'start'}&folder=$in{'folder'}&user=$in{'user'}&dom=$in{'dom'}"); } elsif ($in{'copy1'} || $in{'copy2'}) { # Copying mails to some other folder @delete || &error($text{'delete_ecopynone'}); $cuser = $in{'copy1'} ? $in{'mfolder1'} : $in{'mfolder2'}; &can_user($cuser) || &error($text{'delete_ecopycannot'}); @cfolders = &list_user_folders($cuser); @cfolders || &error($text{'delete_ecopyuser'}); @mail = &mailbox_list_mails($delete[0], $delete[@delete-1], $folder); foreach $d (@delete) { $mail[$d] || &error($text{'mail_eexists'}); push(@copymail, $mail[$d]); } &lock_folder($cfolder); &mailbox_copy_mail($folder, $cfolders[0], @copymail); &unlock_folder($cfolder); &webmin_log("copymail", undef, undef, { 'from' => $folder->{'file'}, 'to' => $cfolders[0]->{'file'}, 'count' => scalar(@delete) } ); &redirect("list_mail.cgi?start=$in{'start'}&folder=$in{'folder'}&user=$in{'user'}&dom=$in{'dom'}"); } elsif ($in{'forward'}) { # Forwarding selected mails .. redirect @delete || &error($text{'delete_efnone'}); &redirect("reply_mail.cgi?folder=$in{'folder'}&". "dom=$in{'dom'}&user=$in{'user'}&". join("&", map { "mailforward=$_" } @delete)); } elsif ($in{'new'}) { # Need to redirect to compose form &redirect("reply_mail.cgi?new=1&folder=$in{'folder'}&user=$in{'user'}&dom=$in{'dom'}"); } elsif ($in{'black'} || $in{'white'}) { # Deny or allow all senders $dir = $in{'black'} ? "blacklist_from" : "whitelist_from"; @delete || &error($text{'delete_ebnone'}); @mail = &mailbox_list_mails($delete[0], $delete[@delete-1], $folder); foreach $d (@delete) { push(@addrs, map { $_->[0] } &split_addresses($mail[$d]->{'header'}->{'from'})); } &foreign_require("spam", "spam-lib.pl"); local $conf = &spam::get_config(); local @from = map { @{$_->{'words'}} } &spam::find($dir, $conf); local %already = map { $_, 1 } @from; @newaddrs = grep { !$already{$_} } &unique(@addrs); push(@from, @newaddrs); &spam::save_directives($conf, $dir, \@from, 1); &flush_file_lines(); &redirect("list_mail.cgi?start=$in{'start'}&folder=$in{'folder'}&user=$in{'user'}&dom=$in{'dom'}"); } elsif ($in{'razor'} || $in{'ham'}) { # Report as ham or spam all messages, and show output to the user @delete || &error($in{'razor'} ? $text{'delete_ebnone'} : $text{'delete_ehnone'}); &ui_print_header(undef, $in{'razor'} ? $text{'razor_title'} : $text{'razor_title2'}, ""); if ($in{'razor'}) { print "<b>$text{'razor_report2'}</b>\n"; } else { print "<b>$text{'razor_report3'}</b>\n"; } print "<pre>"; # Write all messages to a temp file @mail = &mailbox_list_mails($delete[0], $delete[@delete-1], $folder); $temp = &transname(); $cmd = $in{'razor'} ? &spam_report_cmd() : &ham_report_cmd(); foreach $d (@delete) { $mail[$d] || &error($text{'mail_eexists'}); &send_mail($mail[$d], $temp); push(@delmail, $mail[$d]); } # Call reporting command on them &open_execute_command(OUT, "$cmd <".quotemeta($temp)." 2>&1", 1); local $error; while(<OUT>) { print &html_escape($_); $error++ if (/failed/i); } close(OUT); unlink($temp); print "</pre>\n"; if ($? || $error) { print "<b>$text{'razor_err'}</b><p>\n"; } else { if ($config{'spam_del'} && $in{'razor'}) { # Delete spam too &lock_folder($folder); &mailbox_delete_mail($folder, @delmail); &unlock_folder($folder); print "<b>$text{'razor_deleted'}</b><p>\n"; } else { print "<b>$text{'razor_done'}</b><p>\n"; } } &ui_print_footer("list_mail.cgi?folder=$in{'folder'}&user=$in{'user'}&dom=$in{'dom'}", $text{'mail_return'}, &user_list_link(), $text{'index_return'}); } elsif ($in{'delete'} || $in{'deleteall'}) { # Just deleting emails &check_modification($folder); @delete || $in{'deleteall'} || &error($text{'delete_enone'}); if (!$in{'confirm'} && &need_delete_warn($folder)) { # Need to ask for confirmation before deleting &ui_print_header(undef, $text{'confirm_title'}, ""); print &ui_confirmation_form("delete_mail.cgi", ($in{'deleteall'} ? &text('confirm_warnall') : &text('confirm_warn', scalar(@delete)))."<br>". ($config{'delete_warn'} ne 'y' ? $text{'confirm_warn2'} : $text{'confirm_warn4'}), [ &inputs_to_hiddens(\%in) ], [ [ 'confirm', $text{'confirm_ok'} ] ], ); &ui_print_footer("list_mail.cgi?start=$in{'start'}&folder=$in{'folder'}&user=$in{'user'}&dom=$in{'dom'}", $text{'mail_return'}); } else { # Go ahead and delete &lock_folder($folder); if ($in{'deleteall'}) { # Clear the whole folder $delcount = &mailbox_folder_size($folder); &mailbox_empty_folder($folder); } else { # Just delete selected messages @mail = &mailbox_list_mails($delete[0], $delete[@delete-1], $folder); foreach $d (@delete) { $mail[$d] || &error($text{'mail_eexists'}); push(@delmail, $mail[$d]); } &mailbox_delete_mail($folder, @delmail); $delcount = scalar(@delmail); } &unlock_folder($folder); &webmin_log("delmail", undef, undef, { 'from' => $folder->{'file'}, 'all' => $in{'deleteall'}, 'count' => $delcount } ); &redirect("list_mail.cgi?start=$in{'start'}&folder=$in{'folder'}&user=$in{'user'}&dom=$in{'dom'}"); } } &pop3_logout_all();
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
images | Folder | 0755 |
|
|
lang | Folder | 0755 |
|
|
xinha | Folder | 0755 |
|
|
CHANGELOG | File | 5.7 KB | 0644 |
|
Makefile | File | 125 B | 0644 |
|
acl_security.pl | File | 3 KB | 0755 |
|
boxes-lib.pl | File | 80.37 KB | 0755 |
|
cgi_args.pl | File | 520 B | 0755 |
|
config | File | 758 B | 0644 |
|
config.info | File | 4.94 KB | 0644 |
|
config.info.ca | File | 5.79 KB | 0644 |
|
config.info.cs | File | 5.2 KB | 0644 |
|
config.info.de | File | 6.27 KB | 0644 |
|
config.info.el | File | 8.14 KB | 0644 |
|
config.info.fi | File | 0 B | 0644 |
|
config.info.fr | File | 6.43 KB | 0644 |
|
config.info.hu | File | 0 B | 0644 |
|
config.info.it | File | 5.97 KB | 0644 |
|
config.info.ja | File | 5.97 KB | 0644 |
|
config.info.ko | File | 5.29 KB | 0644 |
|
config.info.nl | File | 5.48 KB | 0644 |
|
config.info.no | File | 5.25 KB | 0644 |
|
config.info.pt_BR | File | 0 B | 0644 |
|
config_info.pl | File | 389 B | 0755 |
|
defaultacl | File | 50 B | 0644 |
|
delete_all.cgi | File | 1.25 KB | 0755 |
|
delete_mail.cgi | File | 7 KB | 0755 |
|
detach.cgi | File | 3.19 KB | 0755 |
|
detachall.cgi | File | 1.72 KB | 0755 |
|
find.cgi | File | 731 B | 0755 |
|
folders-lib.pl | File | 103.44 KB | 0755 |
|
index.cgi | File | 2.73 KB | 0755 |
|
list_mail.cgi | File | 5.15 KB | 0755 |
|
log_parser.pl | File | 1.02 KB | 0755 |
|
mail_search.cgi | File | 3.68 KB | 0755 |
|
mailboxes-lib.pl | File | 33.59 KB | 0755 |
|
makelang.pl | File | 1.35 KB | 0755 |
|
module.info | File | 137 B | 0644 |
|
module.info.af | File | 0 B | 0644 |
|
module.info.af.auto | File | 82 B | 0644 |
|
module.info.ar | File | 0 B | 0644 |
|
module.info.ar.auto | File | 145 B | 0644 |
|
module.info.be | File | 0 B | 0644 |
|
module.info.be.auto | File | 185 B | 0644 |
|
module.info.bg | File | 0 B | 0644 |
|
module.info.bg.auto | File | 167 B | 0644 |
|
module.info.ca | File | 97 B | 0644 |
|
module.info.cs | File | 37 B | 0644 |
|
module.info.cs.auto | File | 75 B | 0644 |
|
module.info.da | File | 0 B | 0644 |
|
module.info.da.auto | File | 72 B | 0644 |
|
module.info.de | File | 77 B | 0644 |
|
module.info.el | File | 0 B | 0644 |
|
module.info.el.auto | File | 232 B | 0644 |
|
module.info.es | File | 38 B | 0644 |
|
module.info.es.auto | File | 72 B | 0644 |
|
module.info.eu | File | 0 B | 0644 |
|
module.info.eu.auto | File | 110 B | 0644 |
|
module.info.fa | File | 0 B | 0644 |
|
module.info.fa.auto | File | 141 B | 0644 |
|
module.info.fi | File | 27 B | 0644 |
|
module.info.fi.auto | File | 61 B | 0644 |
|
module.info.fr | File | 40 B | 0644 |
|
module.info.fr.auto | File | 76 B | 0644 |
|
module.info.he | File | 0 B | 0644 |
|
module.info.he.auto | File | 117 B | 0644 |
|
module.info.hr | File | 0 B | 0644 |
|
module.info.hr.auto | File | 108 B | 0644 |
|
module.info.hu | File | 38 B | 0644 |
|
module.info.hu.auto | File | 72 B | 0644 |
|
module.info.it | File | 27 B | 0644 |
|
module.info.it.auto | File | 76 B | 0644 |
|
module.info.ja | File | 39 B | 0644 |
|
module.info.ja.auto | File | 79 B | 0644 |
|
module.info.ko | File | 29 B | 0644 |
|
module.info.ko.auto | File | 65 B | 0644 |
|
module.info.lt | File | 0 B | 0644 |
|
module.info.lt.auto | File | 110 B | 0644 |
|
module.info.lv | File | 0 B | 0644 |
|
module.info.lv.auto | File | 85 B | 0644 |
|
module.info.ms | File | 73 B | 0644 |
|
module.info.mt | File | 0 B | 0644 |
|
module.info.mt.auto | File | 81 B | 0644 |
|
module.info.nl | File | 30 B | 0644 |
|
module.info.nl.auto | File | 57 B | 0644 |
|
module.info.no | File | 27 B | 0644 |
|
module.info.no.auto | File | 47 B | 0644 |
|
module.info.pl | File | 38 B | 0644 |
|
module.info.pl.auto | File | 67 B | 0644 |
|
module.info.pt | File | 0 B | 0644 |
|
module.info.pt.auto | File | 94 B | 0644 |
|
module.info.pt_BR | File | 34 B | 0644 |
|
module.info.pt_BR.auto | File | 65 B | 0644 |
|
module.info.ro | File | 0 B | 0644 |
|
module.info.ro.auto | File | 116 B | 0644 |
|
module.info.ru | File | 63 B | 0644 |
|
module.info.ru.auto | File | 99 B | 0644 |
|
module.info.sk | File | 0 B | 0644 |
|
module.info.sk.auto | File | 120 B | 0644 |
|
module.info.sl | File | 0 B | 0644 |
|
module.info.sl.auto | File | 97 B | 0644 |
|
module.info.sv | File | 0 B | 0644 |
|
module.info.sv.auto | File | 78 B | 0644 |
|
module.info.th | File | 0 B | 0644 |
|
module.info.th.auto | File | 154 B | 0644 |
|
module.info.tr | File | 104 B | 0644 |
|
module.info.uk | File | 0 B | 0644 |
|
module.info.uk.auto | File | 193 B | 0644 |
|
module.info.ur | File | 0 B | 0644 |
|
module.info.ur.auto | File | 117 B | 0644 |
|
module.info.vi | File | 0 B | 0644 |
|
module.info.vi.auto | File | 99 B | 0644 |
|
module.info.zh | File | 0 B | 0644 |
|
module.info.zh.auto | File | 79 B | 0644 |
|
module.info.zh_TW | File | 33 B | 0644 |
|
module.info.zh_TW.auto | File | 55 B | 0644 |
|
prefs.info | File | 225 B | 0644 |
|
reply_mail.cgi | File | 15.96 KB | 0755 |
|
safeacl | File | 32 B | 0644 |
|
search_form.cgi | File | 1.86 KB | 0755 |
|
send_mail.cgi | File | 9.56 KB | 0755 |
|
slideshow.cgi | File | 1.63 KB | 0755 |
|
useradmin_update.pl | File | 2.33 KB | 0755 |
|
view_mail.cgi | File | 10.44 KB | 0755 |
|