参考文章:
http://www.cnblogs.com/apexchu/p/4271264.html
http://blog.eqoe.cn/posts/build-perfect-mail-server.html
https://www.v2ex.com/t/161912

一、删除系统自带的sendmail

yum remove sendmail

或者

rpm -e sendmail

二、安装crontabs(计划任务)服务

yum install crontabs
service crond start
chkconfig crond on

三、安装postfix,cyrus-sasl,cyrus-imapd

如果yum提示找不到软件包,请换一下源,请参考centos 6推荐使用epel源(http://blog.51yip.com/linux/1337.html)

yum install postfix
yum install cyrus*

四、更改默认邮件传输代理(MTA)

alternatives --config mta

请输入图片描述

There are 2 programs which provide 'mta'. (共有 1 个程序提供“mta”)

Selection Command

1 /usr/sbin/sendmail.exim
*+ 2 /usr/sbin/sendmail.postfix

按 Enter 来保存当前选择[+],或键入选择号码:2
Enter to keep the current selection[+], or type selection number: 2

五、postfix,cyrus-sasl,cyrus-imapd相关配置

1、postfix主配置文件main.cf

vi /etc/postfix/main.cf

做如下修改

// 76行,将等号后面的部分改写为本机主机名
myhostname = mail.kyzy.cc
// 82行,设置域名
mydomain = kyzy.cc
// 97行,把$myhostname改为$mydomain
myorigin = $mydomain
// 112行,把后面的localhost改成all
inet_interfaces = all
// 163行,把前面的注释拿掉,并加一下$mydomain
mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain
// 209行,把前面的注释拿掉。
local_recipient_maps =
// 257行 Postfix默认将子网内的机器设置为可信任机器,如果只信任本机,就设置为host
mynetworks_style = host
// 263行,设置内网和本地IP
mynetworks = 受信任的IP地址,千万不要用0.0.0.0/0,不然分分钟就变成垃圾邮件中转服务器
 // 303行 配置哪些地址的邮件能够被Postfix转发,当然是mydomain的才能转发,否则其他人都可以用这台邮件服务器转发垃圾邮件了
relay_domains = $mydomain
// 426行,设置邮件收取目录(【注意】dovecot的10-mail.conf中的mail_location=maildir:~/Maildir虽然位置代表同一个,但是设置的值却不是一样的)
home_mailbox = Maildir/
// 568行,把前面的注释拿掉
smtpd_banner = $myhostname ESMTP $mail_name

在main.cf文件的底部加上以下内容

# 使用SMTP认证
smtpd_sasl_auth_enable = yes
# 让不支持RFC2554的smtpclient也可以跟postfix做交互。
broken_sasl_auth_clients = yes
# 指定SMTP认证的本地域名
smtpd_sasl_local_domain = $myhostname
# 取消匿名登陆方式
smtpd_sasl_security_options = noanonymous
# 设定邮件中有关收件人部分的限制
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
# 设置允许范围
smtpd_sasl_security_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
# 邮件大小
message_size_limit = 15728640
# 设置连接cyrus-imapd的路径
mailbox_transport=lmtp:unix:/var/lib/imap/socket/lmtp

如果不加local_recipient_maps这个配置,收邮件收不到,下面是qq的退信。

收件人邮件地址([email protected])不存在,邮件无法送达。host
mail.kyzy.cc[122.225..] said: 550 5.1.1: Recipient address
rejected: User unknown in local recipient table (in reply to RCPT TO
command)

2、cyrus-sasl配置

vi /etc/sasl2/smtpd.conf

在文件尾部加上以下内容

# 记录log的模式
log_level: 3
# 设置一下smtp寻找cyrus-sasl的路径
saslauthd_path:/var/run/saslauthd/mux

在这里要提一下的32位的机器和64位的机器smtpd.conf的路径是不一样的。

这是CentOS5.5 32位机器上smtpd的配置文件

ls |grep conf

Sendmail.conf
smtpd.conf

pwd  

/usr/lib/sasl2

这是CentOS6.0 64位机器上smtpd的配置文件,其他地方没有smtpd的配置文件

ls /etc/sasl2/ |grep smtpd

smtpd.conf

3、配置cyrus-imapd,主要配置文件有下面三个

/etc/sysconfig/cyrus-imapd
/etc/cyrus.conf
/etc/imapd.conf

这里是默认的配置,也就是说上面三个文件我是没有动过的。在这里提醒一下imapd.conf在这个文件里面,你可以设置管理账号,设置邮件存放目录,设置密码连接方式等。

六、启动postfix,cyrus-sasl,cyrus-imapd

启动cyrus-imapd服务,就可以同时提供pop和imap服务,如果你已安装了dovecot服务就可以删除掉,cyrus-imapd和dovecot二者选其一就行了,二都可以提供pop和imap服务,不过cyrus-imapd可以为每个用户创建一个信息,而且信箱具有层次结构,比较好管理。建议用cyrus-imapd。

/etc/init.d/postfix start
/etc/init.d/saslauthd start
/etc/init.d/cyrus-imapd start

chkconfig postfix on
chkconfig saslauthd on
chkconfig cyrus-imapd on

chkconfig postfix off
chkconfig saslauthd off
chkconfig cyrus-imapd off

service postfix stop
service saslauthd stop
service cyrus-imapd stop

service postfix restart
service saslauthd restart
service cyrus-imapd restart

添加账户

useradd noreply
passwd noreply

七、测试cyrus-sasl

设置cyrus的密码

passwd cyrus

系统用户和密码

testsaslauthd -u cyrus -p 'cyruspwd111' (testsaslauthd -u noreply -p 'noreplypwd111')

如果显示如下内容,说明smtp是没有什么问题
0: OK "Success."

八、cyrus-imapd生产邮件管理员账号,并添加测试账号

安装完cyrus-imapd后会产生一个管理账号是cyrus,所属用户组是mail

imapd.conf里面默认的管理员账号就是cyrus

id cyrus

uid=76(cyrus) gid=12(mail) groups=76(saslauth),12(mail)

64位系统

cyradm -u cyrus localhost --auth plain

32位系统

cyradm -u cyrus localhost
verify error:num=18:self signed certificate
Password:

进去后,我们来添加一下测试账号

cyradm -u cyrus localhost --auth plain
IMAP Password:  
localhost> cm tank
localhost> lm
tank (\HasNoChildren)
localhost> quit

【小知识】cyradm删除邮箱(deletemailbox: Permission denied)

cyradm -u cyrus localhost --auth plain
localhost> sam tank cyrus c (有的版本可能是d)
cyrus kxc
anyone lrs
localhost> dm tank
localhost>

这样我们可以在/var/spool/imap中看到,生成的目录,32位机器和64位机器生成的目录是不一样的

这是64位系统生成的目录

ls

user^tank

pwd

/var/spool/imap/u


这是32位系统生成的目录

ls

tank

pwd

/var/spool/imap/t

九、测试收发邮件

测试前添加一下DNS
请输入图片描述

@或者空 MX 默认 优先级10 mail.kyzy.cc
请输入图片描述
请输入图片描述
【注意】v=dkim1那条记录见文章结尾链接配置教程。

方法有很多,我们可以利用telnet来测试,不过用telnet来测试收发邮件比较麻烦,用linux自带的mail命令就方便多了

echo "content" | mail -s "subject" [email protected]

查看邮件队列

mailq

删除邮件队列

postsuper -d ALL
telnet mail.kyzy.cc 25

开始输入

helo noreply
auth login
bm9yZXBseQ==   (base64加密后的用户名noreply)
Tm***************MjM0   (base64加密后的密码noreplypwd111)
mail from:<noreply>
rcpt to:<[email protected]>
data
From:[email protected]
To:[email protected]
Subject:test
test
.

最后这个小数点一定要加上

如果发件人是[email protected]想改成[email protected]则需要增加系统用户noreply,因为postfix用户其实就是linux系统用户

[button color="info" icon="" url="" type="round"]推荐相关文章[/button]
[post cid="97" /]
[post cid="98" /]