我在 /var/log/maillog 中过滤 postfix 日志时遇到问题。
我执行一个命令
cat maillog | grep bounced | grep said
并过滤哪些邮件未发送及其原因如下:
11 月 10 日 10:48:40 host-10-190-10-26 postfix/smtp[7075]:7AF986C13:to=,relay=gmail-smtp-in.l.google.com
[74.125.28.26]:25,延迟=2.1,延迟=0.04/0/1.9/0.2,dsn=5.1.1,状态=已退回(主机 gmail-smtp-in.l.google.com[74.125.28.26]说:
550-5.1.1 您尝试访问的电子邮件帐户不存在。请尝试 550-5.1.1 仔细检查收件人的电子邮件地址
拼写错误或 550-5.1.1 不必要的空格。如需了解详情,请访问 550 5.1.1 http://support.google.com/mail/bin/answer.py?answer=6596
wv1si15262329pab.224 - gsmtp(回复 RCPT TO 命令)) 11 月 13 日 10:47:28 host-10-190-10-26 postfix/smtp[28250]:B0D491E80:to=,relay=gmail-smtp-in.l.google.com
[74.125.20.27]:25,延迟=3,延迟=0.02/0.02/2.8/0.23,dsn=5.1.1,状态=已退回(主机 gmail-smtp-in.l.google.com[74.125.20.27]说:
550-5.1.1 您尝试访问的电子邮件帐户不存在。请尝试 550-5.1.1 仔细检查收件人的电子邮件地址
拼写错误或 550-5.1.1 不必要的空格。如需了解详情,请访问 550 5.1.1 http://support.google.com/mail/bin/answer.py?answer=6596
ce9si24575145pdb.68 - gsmtp(回复 RCPT TO 命令)) 11 月 13 日 10:49:41 host-10-190-10-26 postfix/smtp[28278]:525811E80:to=,relay=www.haha.com[140.174.93.116]:25,延迟=7.2,
delays=0.05/0.01/6.6/0.53,dsn=5.3.0,status=bounced(主机www.haha.com[140.174.93.116]说:553 5.3.0 ...用户未知
(回复 RCPT TO 命令))
现在我需要将以下字段导出: to 和 said: 导出到具有 2 列的文件中
有人帮助我或给我一些想法。
类似这样的事情吗?
grep status=bounced /var/log/mail.log | sed -e 's/.*to=<//g' -e 's/>,.*said://g'
更新: 不太清楚“有列的东西”是什么意思,但我修改了它,以便它用分号分隔。这应该可以轻松导入任何办公应用程序(例如 MS Excel)
grep status=bounced /var/log/mail.log | sed -e 's/.*to=<//g' -e 's/\(.*\)>,.*said:\ /\1;/g' > bounced_mail.csv
如果您喜欢,请将答案标记为有用。
第二次更新:我突然想到,一个快速而肮脏的解决方案(没有以任何方式测试!!)
将上面的代码粘贴到可执行 shellscript
从 /etc/logrotate.d/syslog 删除行
/var/log/maillog创建一个新文件/etc/logrotate.d/postfix
包含以下内容:
/var/log/maillog {
prerotate
/path/to/shellscript.sh > /path/to/outputfile-$(date +%Y%m%d).txt 2> /dev/null
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
请注意,您应该彻底测试!
我创建了一个 Perl 脚本:https://github.com/brablc/postfix-tools/blob/master/pflogrep
您可以使用 is 作为 grep:
pflogrep [email protected] /var/log/maillog
或者您可以将输出提供给
pflogsumm
并获得不错的统计数据:
pflogrep [email protected] /var/log/maillog | pflogsumm
我找到了这个命令行工具:https://github.com/MatteoGuadrini/followmail
按 to 字段过滤:
followmail -t [email protected]
从字段中筛选:
followmail -f [email protected]
并以 CSV 或 JSON 格式打印:
followmail -f [email protected] -t [email protected] --csv
followmail -f [email protected] -t [email protected] --json