一、准备工作

1. 为邮件服务器添加DNS解析

虽然不加DNS解析也能把邮件发出去,但会被大多数邮件服务器当作垃圾邮件。根据我们的实际经验,需要添加三条DNS解析记录:A记录、MX记录、TXT记录。比如域名cnblogs.info,对应的DNS记录如下:

备注:
"v=spf1 mx -all" 允许当前域名的 mx 记录对应的 IP 地址。 
参考:http://www.renfei.org/blog/introduction-to-spf.html

 

2. 准备存放邮件的硬盘空间

如果用的是阿里云入门级Linux服务器,有一块20G的数据盘未挂载,需要格式化并挂载(假设这里挂载的目录是/data),具体操作步骤见之前的博文阿里云云服务器硬盘分区及挂载

二、配置postfix

postfix是CentOS默认安装的邮件服务器软件。以下配置示例假设要配置的域名是cnblogs.info,邮件服务器主机名是mail.cnblogs.info。

1. 打开postfix的配置文件

vi /etc/postfix/main.cf

2. :75 光标移至第75行,修改myhostname

myhostname = mail.yongmayi.com

3. :83 光标移至第83行,修改mydomain

mydomain = yongmayi.com

4. :99 光标移至第99行,修改myorigin

myorigin = $mydomain

5. :116光标移至第116行,修改inet_interfaces

inet_interfaces = all

6. :119光标移至第119行,修改inet_protocols

inet_protocols = ipv4

7. :164光标移至第164行,添加$mydomain

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

8. :264光标移至第264行,修改mynetworks

mynetworks = 127.0.0.0/8

9. :419 光标移至第419行,设置home_mailbox

home_mailbox = Maildir/

10. :425 光标移至第425行,设置mail_spool_directory,/data是之前挂载的数据盘,mail目录需要通过mkdir命令创建

mail_spool_directory = /data/mail

11. 重启postfix使设置生效

service postfix restart

三、用telnet测试邮件服务器是否正常

1. 在邮件服务器上安装telnet

yum install telnet

2. 连接服务器SMTP端口

telnet 127.0.0.1 25

3. 填写发件人

MAIL FROM:<admin@yongmayi.com>

回车

4. 填写收件人

RCPT TO:xxxx@xxxxx.com
注:
这里的地址最好别用知名邮箱的,因为这些邮箱有很多限制。
笔者先后使用了qq和163的邮箱进行测试,监控日志(查看日志命令tail -200f /var/log/maillog)发现都不能成功,一度怀疑安装过程出错。
仔细阅读日志发现qq有ip频率的限制,163是反垃圾邮件的限制,导致测试邮件不能通过。后来我发送工作邮箱,测试就通过了。

回车

5. 撰写邮件内容

5.1 开始写邮件内容

DATA

回车

5.2 输入标题

Subject: test message

回车

5.3 输入内容,并以.号结束

test body
.

如果显示下面的信息,说明邮件进入发送队列

250 2.0.0 Ok: queued as xxxxxxx

四、postfix常用命令

postfix有四种不同的邮件队列,并且由队列管理进程统一进行管理:
1. maildrop:本地邮件放置在maildrop中,同时也被拷贝到incoming中。
2. incoming:放置正在到达或队列管理进程尚未发现的邮件。
3. active:放置队列管理进程已经打开了并正准备投递的邮件,该队列有
长度的限制。
4. deferred:放置不能被投递的邮件。postfix日常维护
启动postfix
postfix start
停止postfix
postfix stop
重新读取postfix配置文件
postfix reload
立即投递队列中所有邮件(慎用)
postfix flush
查看队列邮件
postqueue -p
mailq
postqueue -p |tail
使用postsuper 来维护队列。
一般是先用mailq查看队列里的邮件,找到对应的id,然后用postsuper -d来删除。
例如id是0EAF3A9B 那么postsuper -d 0EAF3A9BQ: 删除邮件队列
A: mailq | tail +2 | awk ‘BEGIN { RS = “” } / chen@example.org$/ { print $1 }’ | tr -d ‘*!’ | postsuper -d –

详细要看mailq和postsuper的用法修复队列以及任何权限错误
postfix check
查看邮件系统日志
tail -f /var/log/maillog

显示信件列表:postqueue -p
显示信件內容:postcat -q Queue_ID
刪除各別信件:postsuper -d Queue_ID
全部刪除:postsuper -d ALL
扣住信件:postsuper -h Queue_ID
回复:postsuper -H Queue_ID
重新排程:
postsuper -r Queue_ID
postsuper -r ALL
清除信件:
postqueue -f (全部)
postqueue -s 主机名称(个别对象)
要查看Postfix的当前主要配置文件的存放路径:
postconf -n

系统日志:tail -f /var/log/messages
邮件日志:tail -f /var/log/maillog
clamd相关:tail -f /var/log/clamav/clamd.log  tail -f /var/log/clamav/freshclam.log
maildrop相关:tail -f /var/log/maildrop.log
apache相关:tail -f /usr/local/httpd/logs/error_log  tail -f /usr/local/httpd/logs/suexec_log
mysql相关:tail -f /usr/local/mysql/data/linux.linux.com.err
测试amavisd:amavisd -d config debug-sa
测试spam:spamassassin -D –lint
测试maildrop:maildrop -V 10 -dtest@test.com

postsuper -d ALL  这样就删除所有邮件啦