Postfix环境下如何统计指定用户test@mydomain.com发送的邮件总数?
统计Postfix中特定用户发送的邮件总数
嘿,我来帮你搞定这个统计问题!你之前在/var/spool/mail里找发送记录没结果太正常了——那个目录是用来存储用户收件箱邮件的,发送邮件的踪迹根本不在那儿~下面给你几个靠谱的方法:
方法1:直接分析Postfix主日志
Postfix会把所有发送、接收的邮件活动记录到系统日志里,常见路径是/var/log/maillog(CentOS/RHEL系)或者/var/log/mail.log(Debian/Ubuntu系)。你可以用grep筛选出发件人为test@mydomain.com的记录,再统计数量:
# CentOS/RHEL系 grep -i "from=<test@mydomain.com>" /var/log/maillog | wc -l # Debian/Ubuntu系 grep -i "from=<test@mydomain.com>" /var/log/mail.log | wc -l
-i:忽略大小写,避免因为日志里大小写不一致漏统计from=<test@mydomain.com>:Postfix日志里标记发件人的固定格式wc -l:统计筛选出的日志行数,对应发送的邮件总数(无重试情况下,一行对应一封邮件)
方法2:包含轮转后的归档日志
如果你的系统用logrotate自动轮转日志,旧日志会被压缩成maillog.1.gz、maillog.2.gz这类文件,上面的命令只会搜索当前日志。要统计所有历史记录,得加上通配符:
# CentOS/RHEL系 grep -i "from=<test@mydomain.com>" /var/log/maillog* | wc -l # Debian/Ubuntu系 grep -i "from=<test@mydomain.com>" /var/log/mail.log* | wc -l
grep会自动识别并解压.gz格式的归档日志,不用额外操作~
方法3:去重统计(避免重复的重试记录)
如果有些邮件因为投递失败被Postfix重试发送,日志里会出现多条对应同一封邮件的记录。要是你想统计实际发送的不同邮件数量,可以结合awk和sort去重:
# CentOS/RHEL系示例 grep -i "from=<test@mydomain.com>" /var/log/maillog | awk '{print $6,$7,$8}' | sort -u | wc -l
这里的$6,$7,$8是提取日志里的邮件ID相关字段(不同系统日志格式可能略有差别,你可以先查看单条日志内容,调整字段序号),sort -u会去除重复的邮件ID,最后统计唯一的邮件数量。
内容的提问来源于stack exchange,提问作者AAHN
相关产品推荐
相关产品推荐

