Postfix (An alternative to Sendmail)
Table of Contents
1. Postfix
Postfix 是 Wietse Venema 在 IBM 的 GPL 协议之下开发的 MTA(邮件传输代理)软件,它是 Sendmail 的一个代替品。
一般地,我们常常使用 Postfix 服务程序提供 SMTP 发件服务,使用 Dovecot 服务程序提供 POP3/IMAP 收件服务。
1.1. 安装
安装 Postfix,并重启它:
$ sudo yum install postfix $ sudo systemctl restart postfix.service
检测一下 Postfix 有没有正常启动(检测 SMTP 的默认端口 25 是否在监听状态):
$ sudo lsof -i :25 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME master 31112 root 13u IPv4 89436528 0t0 TCP localhost:smtp (LISTEN) master 31112 root 14u IPv6 89436529 0t0 TCP localhost:smtp (LISTEN) $ ps -fwww 31112 UID PID PPID C STIME TTY STAT TIME CMD root 31112 1 0 00:17 ? Ss 0:00 /usr/libexec/postfix/master -w
1.2. 安装 mail 客户端
在命令行中发送邮件可以使用 mail
命令,如果提示“mail command not found”,则需要先安装它。
如果是 Redhat 系列,则可以这样安装它:
$ sudo yum install mailx
如果是 Debian 系列,则可以这样安装它:
$ sudo apt-get install mailutils
2. Postfix 基本使用
2.1. 发送邮件实例
下面是命令行中使用 mail
发送邮件的实例(默认读取标准输入作为邮件正文):
$ echo "hello world" | mail -v -s "subject1" yourmail@sina.com
执行完上面命令后,会把邮件放到发送队列中。
2.2. 查看发送队列(mailq)
使用 mailq
可以列出当前在 Postfix 发送队列中的全部邮件:
$ mailq -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------- AC583E806E* 542 May 8 00:03:01 ec2-user@ip-172.181.3.1.compute.internal yourmail@sina.com -- 0 Kbytes in 1 Request.
如果 Postfix 发送队列中没有邮件,则显示:
$ mailq Mail queue is empty
2.3. 删除发送队列的全部邮件
使用 postsuper -d ALL
可以删除当前等待发送队列的全部邮件,包含发送失败的退信。
2.4. 查看 log
Postfix 邮件的 log 位置是:/var/log/maillog,通过这个文件可以确认邮件发送状态。
2.5. 实例:磁盘空间占用过大时发送邮件
使用 df
可以查看磁盘使用空间情况,如:
$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/xvda2 10473452 8961544 1511908 86% / devtmpfs 3981968 0 3981968 0% /dev tmpfs 4004172 0 4004172 0% /dev/shm tmpfs 4004172 435160 3569012 11% /run tmpfs 4004172 0 4004172 0% /sys/fs/cgroup tmpfs 800836 0 800836 0% /run/user/1000
下面脚本可以实现磁盘空间占用大于等于 90%时,发送邮件报警:
#!/bin/bash num=`df | awk '$6=="/" {print int($5)}'` # 第6个字段为/时,把第5个字段转为整数(丢掉了百分号) if [[ $num -ge 90 ]]; then echo "disk space is ${num}%" | mail -s 'disk space alert (>= 90%)' youremail@sina.com fi