邮件服务器中的队列有许多是垃圾邮件的退信,以往清理的时候就会把所有队列中的邮件全部清除掉,这样会把一些正常邮件也清除。

在《Postfix 权威指南》里有一个叫 pfdel 的 Perl 小程序,可以用它删除指定邮件地址的邮件(不管是发信人还是收信人的邮件地址),这个虽然方便,但是如果想要清除因为 maildir over quota 或者 Invalid user specified 错误而产生的邮件,还需要修改一下。下面是这四个程序:
=================================================
pfdel.pl 是用来删除队列中指定用户的邮件:
=================================================

程序代码
#!/usr/bin/perl -w

#
# pfdel – deletes message containing specified address from
# Postfix queue. Matches either sender or recipient address.
#
# Usage: pfdel <email_address>
#

use strict;

# Change these paths if necessary.
my $LISTQ = “/usr/sbin/postqueue -p”;
my $POSTSUPER = “/usr/sbin/postsuper”;

my $email_addr = “”;
my $qid = “”;
my $euid = $>;

if ( @ARGV !=  1 ) {
die “Usage: pfdel <email_address>\n”;
} else {
$email_addr = $ARGV[0];
}

if ( $euid != 0 ) {
die “You must be root to delete queue files.\n”;
}

open(QUEUE, “$LISTQ |”) ||
die “Can’t get pipe to $LISTQ: $!\n”;

my $entry = <QUEUE>;    # skip single header line
$/ = “”;                # Rest of queue entries print on
# multiple lines.
while ( $entry = <QUEUE> ) {
if ( $entry =~ / $email_addr$/m ) {
($qid) = split(/\s+/, $entry, 2);
$qid =~ s/[\*\!]//;
next unless ($qid);

#
# Execute postsuper -d with the queue id.
# postsuper provides feedback when it deletes
# messages. Let its output go through.
#
if ( system($POSTSUPER, “-d”, $qid) != 0 ) {
# If postsuper has a problem, bail.
die “Error executing $POSTSUPER: error ” .
“code ” .  ($?/256) . “\n”;
}
}
}
close(QUEUE);

if (! $qid ) {
die “No messages with the address <$email_addr> ” .
“found in queue.\n”;
}

exit 0;
=================================================
luserdel.pl 是用来删除队列中无效用户的邮件:
=================================================

程序代码
#!/usr/bin/perl -w

#
# luserdel – deletes message containing invalid user from
# Postfix queue.
#
# Usage: luserdel
#

use strict;

# Change these paths if necessary.
my $LISTQ = “/usr/sbin/postqueue -p”;
my $POSTSUPER = “/usr/sbin/postsuper”;

my $qid = “”;
my $euid = $>;

if ( $euid != 0 ) {
die “You must be root to delete queue files.\n”;
}

open(QUEUE, “$LISTQ |”) ||
die “Can’t get pipe to $LISTQ: $!\n”;

my $entry = <QUEUE>;    # skip single header line
$/ = “”;                # Rest of queue entries print on
# multiple lines.
while ( $entry = <QUEUE> ) {
if ( $entry =~ /Invalid user specified/m ) {
($qid) = split(/\s+/, $entry, 2);
$qid =~ s/[\*\!]//;
next unless ($qid);

#
# Execute postsuper -d with the queue id.
# postsuper provides feedback when it deletes
# messages. Let its output go through.
#
if ( system($POSTSUPER, “-d”, $qid) != 0 ) {
# If postsuper has a problem, bail.
die “Error executing $POSTSUPER: error ” .
“code ” .  ($?/256) . “\n”;
}
}
}
close(QUEUE);

if (! $qid ) {
die “No invalid user messages found in queue.\n”;
}

exit 0;
=================================================
moqdel.pl 是用来删除队列中邮箱配额已满的用户的邮件:
=================================================

程序代码
#!/usr/bin/perl -w

#
# moqdel – deletes message containing maildir over quota from
# Postfix queue.
#
# Usage: moqdel
#

use strict;

# Change these paths if necessary.
my $LISTQ = “/usr/sbin/postqueue -p”;
my $POSTSUPER = “/usr/sbin/postsuper”;

my $qid = “”;
my $euid = $>;

if ( $euid != 0 ) {
die “You must be root to delete queue files.\n”;
}

open(QUEUE, “$LISTQ |”) ||
die “Can’t get pipe to $LISTQ: $!\n”;

my $entry = <QUEUE>;    # skip single header line
$/ = “”;                # Rest of queue entries print on
# multiple lines.
while ( $entry = <QUEUE> ) {
if ( $entry =~ /maildir over quota/m ) {
($qid) = split(/\s+/, $entry, 2);
$qid =~ s/[\*\!]//;
next unless ($qid);

#
# Execute postsuper -d with the queue id.
# postsuper provides feedback when it deletes
# messages. Let its output go through.
#
if ( system($POSTSUPER, “-d”, $qid) != 0 ) {
# If postsuper has a problem, bail.
die “Error executing $POSTSUPER: error ” .
“code ” .  ($?/256) . “\n”;
}
}
}
close(QUEUE);

if (! $qid ) {
die “No maildir over quota messages found in queue.\n”;
}

exit 0;

=================================================
jmoqdel.pl 是删除邮箱配额已满的用户的垃圾邮件箱:
=================================================

程序代码
#!/usr/bin/perl -w

#
# jmoqdel – deletes Junk directories whose maildir over quota from
# Postfix queue.
#
# Usage: jmoqdel
#

use strict;

my $HOME_BASE = “/var/vmail”;
# Change these paths if necessary.
my $LISTQ = “/usr/sbin/postqueue -p”;
my $POSTSUPER = “/usr/sbin/postsuper”;

my $user = “”;
my $domain = “”;
my $email = “”;
my $euid = $>;

if ( $euid != 0 ) {
die “You must be root to delete queue files.\n”;
}

open(QUEUE, “$LISTQ |”) ||
die “Can’t get pipe to $LISTQ: $!\n”;

my $entry = <QUEUE>;    # skip single header line
$/ = “”;                # Rest of queue entries print on
# multiple lines.
while ( $entry = <QUEUE> ) {
if ( $entry =~ /maildir over quota/m ) {
($user,$domain,$email) = split(/\n/, $entry, 3);
($user,$domain) = ($email =~ m!\s*(.+)@(.+)\s*!);
`rm $HOME_BASE/$domain/$user/Maildir/.Junk -rf &> /dev/null`;
next unless ($email);
}
}
close(QUEUE);

if (! $email ) {
die “No maildir over quota messages found in queue.\n”;
}

exit 0;

平时用的较多的是第一个程序,已经在邮件服务器上测试通过,这样以后就方便对邮件队列进行管理了。

转载于:https://blog.51cto.com/eagoogle/530890

postfix管理邮件队列的小程序相关推荐

  1. Exchange系列—管理邮件队列

    集线器传输服务器在从用户邮箱接收邮件后或者是边缘传输服务器从集线器传输服务器端接收到邮件后,由pickup directory组件将邮件提交到提交队列,提交队列组件在邮件被处理之前将邮件存储到硬盘上, ...

  2. thinkphp开发的活动报名小程序源码带后台管理完整的报名小程序源码

    介绍: 活动报名小程序源码,基于thinkphp开发的报名小程序源码,带有后台管理,用户发布活动信息.报名可以后台管理,简单测试了一下,基本都还是可以的. 不过需要注意的是,用户注册部分是发送手机短信 ...

  3. 【小程序源码合集】云开发前后端完整代码,大学生校园社团体管理活动预约微信小程序源码

    介绍 这是一款完整的小程序,带有详细教程,使用云开发技术,完整的管理后台,唯一缺点就是没看到流量主,不过代码清晰,大家自行二开即可 功能介绍 校园社团小程序,前后端完整代码包括社团通知,社团简介,社团 ...

  4. 高校科研管理系统设计与实现小程序-计算机毕业设计

    随着计算机信息技术的迅猛发展,互联网技术大规模应用到各行各业,传统的管理系统也逐渐精细化.高校作为教书育人的场所,各种管理也更应该智能化,特别是计算机信息专业更是最早接触信息技术,为高校各部门开发必要 ...

  5. 数字化棋牌室 | 会员管理预约系统 | 棋牌室小程序

    棋牌室在城市与农村都是部分老年人与年轻人的经常去的娱乐场所,以前这些场所里总是挤满了人,但现在越来越多的棋牌室即使环境装修的漂亮.设备高端完善等依然面对流量难题及管理难题,同时由于棋牌室具有社区属性, ...

  6. 简历管理案例(微信小程序+后台)

    最近有一个客户(人力资源公司)想做一个微信小程序/公众号,她的需求是让求职者可以扫码上传简历,在PC后台可以对求职者的简历进行管理,帮助求职者找工作.由于该客户可能是第一次合作,我做了一个后台的dem ...

  7. 垃圾分类小程序,识别和站点查询,答题,用户后台管理集一体的小程序

    2.1 云开发简介 云开发(CloudBase)是云端一体化的后端云服务 ,采用 serverless 架构,免去了移动应用构建中繁琐的服务器搭建和运维.同时云开发提供的静态托管.命令行工具(CLI) ...

  8. 【运维程序】简单的命令控制器(支持定时命令执行、重复定时任务命令和进程管理,开发这个小程序主要是为了方便管理服务进程)【个人github项目】...

    一.前言: command-controller 一个运维程序,简单的命令控制器(支持定时命令执行和重复定时命令,开发这个程序主要是为了方便管理服务进程) 本来是要用python做的,但是之前做ffm ...

  9. 【家用】鞋店管理系统设计(微信小程序)

    页面统计 用户注册页 用户登录页 商品登陆页 商品更新页 商品查询页 表设计 用户表(users) 注解 字段名 序号 SerialNumber 登陆日期 CreateDate 用户ID UserID ...

最新文章

  1. 资源 | 做一款炫酷的机器人需要哪些学习资源(机器人资源Awesome系列)
  2. uiautomator环境搭建所遇问题汇总
  3. html5 svg 拖拽,SVG拖动
  4. ES分布式机制的透明性,垂直扩容和水平扩容,数据rebalance,master节点,节点平等的分布式架构,shard和replica机制(学习)
  5. react --- 生命周期 给子组件传递数据
  6. uboot2015–启动流程分析 imx6q
  7. Max OS X下关于JDK的那些事
  8. 图表框架HelloCharts(3)饼状图
  9. nodejs的mysql初始化
  10. [渝粤教育] 中国地质大学 审计学 复习题
  11. 正确区分LJMP、AJMP、SJMP、JMP跳转指令
  12. java习题5参考练习及答案_JAVA练习题(第5章).ppt
  13. 密西根州立大学计算机排名,密歇根州立大学MSU(Michigan State University)计算机科学Computer Science专业排名第91位(2021年THE世界大学商科排名)...
  14. 希捷硬盘无法安全弹出如何解决?
  15. MATLAB学习笔记(一)常值函数与跳变函数的绘制
  16. PAT Basic 1033. 旧键盘打字(20)(C语言实现)
  17. 【OS】新国立nus操作系统知识点(中文版)
  18. PS2019 cc for Mac语言切换
  19. 浅谈常用的几种web攻击方式以及解决办法
  20. AE教程_时光流逝看我七十二变

热门文章

  1. Samba的主配置文件
  2. 编译android系统小结
  3. C#“.NET研究”类类型
  4. Build OS Menu of Platform Builder 5.0
  5. 【IDAX投研中心】BCH诞生一周年 “青出于蓝而胜于蓝”吗?
  6. BCH:“变法”是以史为鉴
  7. GitHub遭攻击滥用以代管网钓套件
  8. IDEA Maven 项目默认编译项目为JDK 1.5
  9. ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门
  10. 语音识别:市场前景可观,但核心技术仍需突破