最近发现邮件发送服务还是挺重要的。可能对于每天只有一百来封的邮件发送需求的个人博主来说,一个免费的邮箱提供的免费SMTP邮件发送服务就可以满足了,但是对于一些大型的网站、论坛和平台,每天的邮件发送量可以达到上万封以上,免费的邮件发送服务是不能满足需要了。
市场上已经有了不少的付费邮件发送服务,但是终归是第三方的邮件发送服务,在邮件发送方式、邮件内容等方面肯定要受到不少的限制。与其花大量的时间寻找更好的付费邮件服务,还不如自己动手利用VPS或者服务器搭建一个属于自己的邮件发送平台,搭建起来并不复杂,使用起来很方便。
本文就来分享一下用Postfix,Cyrus-IMAP,Cyrus-sasl,Dovecot和SPF搭建邮件系统的过程。Postfix是Wietse Venema在IBM的GPL协议之下开发的MTA开源软件,可以用来代替sendmail,特点是免费、灵活、快速和兼容性好,可以承担大量的邮件发送任务。
Cyrus-IMAP和Cyrus-sasl是两个用来提供pop和imap服务,功能和Dovecot 一样,都是开源的IMAP 和POP3邮件服务器。SPF是反垃圾组件,主要的作用就是通过SPF让别人验证自己,域名添加txt记录,向支持SPF功能的邮件服务器提供验证信息。同时验证别人,配置邮件服务器支持 SPF,对每封进入的邮件进行SPF验证。
经典的邮件系统搭建一般是:postfix(作为发送邮件服务器)+Cyrus-IMAP和Cyrus-sasl或者dovecot(作为接收邮件服务器)+mysql(作为数据库)+ SPF反垃圾验证。当然有人可能还要求有Webmail,有了Webmail界面就能像企业邮局那样在线管理邮件了。
如果暂时不想折腾一个邮件服务器,也可以使用第三方的邮件发送服务,这些邮件发送服务提供了丰富了API接口与开发服务,不少的公司和企业都是用它们完成自己每月上百万封的邮件发送服务请求:
Postfix邮件系统安装与配置:Postfix,Cyrus-IMAP,Cyrus-sasl,Dovecot和SPF
一、Postfix,Cyrus-IMAP,Cyrus-sasl 安装
1、CentOS上执行命令:
yum install postfix
yum install cyrus*
2、删除系统自带的Sendmail。
rpm -e sendmail
或者
yum remove sendmail
3、修改MTA(默认邮件传输代理)
alternatives --config mta
4、按下回车键保存当前选择,或者输入数字设置默认。
5、也可以直接输入命令:
/usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix
6、检查一下是不是已经设置成功了。
alternatives --display mta
二、Postfix配置
1、Postfix的配置文件是main.cf,路径是:/etc/postfix/main.cf。
2、用文本编辑器打开它进行相应的修改,建议将这个文件下载到本地使用Notepad++等常用的代码编辑器修改。
3、主要是将下面的代码前的#号去掉,如果没有则直接手动添加(用 hostname 可以查看本机主机名)。
myhostname = localhost //76行,改成本机名称
mydomain = freehao123.com //82行,设置域名
myorigin = $mydomain //97行,去掉注释
inet_interfaces = all //112行,去掉注释
mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain //163行,去掉注释
mynetworks = 192.168.0.0/24, 127.0.0.0/8 //263行,设置内网和本地IP
local_recipient_maps = //209行,去掉注释
smtpd_banner = $myhostname ESMTP unknow //568行,去掉注释,然后把$mail_name ($mail_version)改成unknow
//在main.cf文件的底部加上以下内容
smtpd_sasl_auth_enable = yes //使用SMTP认证
broken_sasl_auth_clients = yes //让不支持RFC2554的smtpclient也可以跟postfix做交互。
smtpd_sasl_local_domain = $myhostname // 指定SMTP认证的本地域名
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 //邮件大小
mailbox_transport=lmtp:unix:/var/lib/imap/socket/lmtp //设置连接cyrus-imapd的路径
三、Cyrus-IMAP,Cyrus-sasl 配置
1、Cyrus-sasl 配置,编辑:vim /etc/sasl2/smtpd.conf (注意:如果是32位的CentOS,应该是:vim /usr/lib/sasl2/smtpd.conf ),加入以下代码,主要是设置记录Log模式,设置smtp寻找cyrus-sasl的路径。
log_level: 3
saslauthd_path:/var/run/saslauthd/mux
2、cyrus-imapd的主要配置文件有:/etc/sysconfig/cyrus-imapd,/etc/cyrus.conf,/etc/imapd.conf。imapd.conf还包含非常多的参数,例如邮件存储目录、管理员账号、连接认证方式等等,具体的需要参考官网。
四、启动Postfix,Cyrus-IMAP,Cyrus-sasl
1、 执行以下命令启动Postfix,Cyrus-IMAP,Cyrus-sasl :
/etc/init.d/postfix start
/etc/init.d/saslauthd start
/etc/init.d/cyrus-imapd start
2、执行命令:netstat -tpnl |grep smtpd ,可以查看端口是否正常打开 。执行命令:service postfix status 可以查看Postfix状态。以下命令可以设置开机启动:
chkconfig postfix on
chkconfig cyrus-imapd on
3、检测Cyrus-sasl 。先设置一下cyrus密码,命令:passwd cyrus ,然后使用命令:testsaslauthd -u cyrus -p '123546' 来测试SMTP是否正常。
4、检测cyrus-imapd,并创建新的邮件账号。命令:id cyrus是用来查看cyrus管理员账号的,默认的就是cyrus。创建邮件账号命令:
cyradm -u cyrus localhost (32位)
cyradm -u cyrus localhost --auth plain (64位)
cm freehao123 (新建)
lm (显示)
quit (退出)
5、 生成的邮件目录是放在/var/spool/imap中,以目录形式存放。查看:ls /var/spool/imap/ ,目录名是用户名的首字母。
1、需要说明的是Dovecot和Cyrus-IMAP,Cyrus-sasl只需要选择其中一项即可,否则会出现端口被占用无法启用的情况,执行命令安装:
yum -y install dovecot
2、 编辑Dovecot的配置文件:/etc/dovecot/dovecot.conf,主要是设置protocols = imap pop3,default_mail_env = maildir:~/Maildir是设置邮件目录,新版的配置文件中如果被注释,直接去掉#号。
3、在/etc/postfix/main.cf 配置中除了按照上面的方法进行相应的修改外,还记得加上:
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
4、然后加入以下配置文件:
auth default {
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
mechanisms = plain login
}
4、启动dovecot:/etc/rc.d/init.d/dovecot start,重启dovecot:/etc/init.d/dovecot restart,将dovecot设置为开机启动:chkconfig dovecot on 。
1、 要想使用Postfix邮件系统,你需要先把邮件系统的域名解析到服务器上,添加一个别名Mail,记录值指向服务器IP,例如:mail.zhujis.com
2、将域名的MX设置为:mail.zhujis.com
3、待域名DNS生效后,你就可以用Linux自带的Mail来发一封测试邮件:mail -s 'I am Freehao123' 798558110@qq.com < /etc/imapd.conf
4、这是QQ邮箱收到了Postfix邮件系统发来的邮件。
5、如果CentOS没有安装中文字体,会出现邮件乱码。
6、执行命令:cat /var/log/maillog 可以查看Postfix收发邮件记录。
1、执行以下命令给Postfix邮件系统安装SPF:
wget https://launchpad.net/postfix-policyd-spf-perl/trunk/release2.010/+download/postfix-policyd-spf-perl-2.010.tar.gz
perl -MCPAN -e 'install version'
perl -MCPAN -e 'install NetAddr::IP'
perl -MCPAN -e 'install Mail::SPF'
perl -MCPAN -e 'install Sys::Hostname::Long'
tar zxvf postfix-policyd-spf-perl-2.010.tar.gz
cd postfix-policyd-spf-perl-2.010
cp postfix-policyd-spf-perl /usr/libexec/postfix/policyd-spf-perl
2、如果出现错误,可能是Perl没有安装完整,执行以下命令安装:
wget http://cpan.communilink.net/authors/id/A/AN/ANDK/CPAN-1.9600.tar.gz
tar -zxvf CPAN-1.9600.tar.gz
cd CPAN-1.9600
perl Makefile.PL
make
make install
3、编辑SPF的配置文件:/etc/postfix/master.cf,加入以下内容
policy unix - n n - 0 spawn
user=nobody argv=/usr/local/postfix/libexec/postfix-policyd-spf-perl
4、然后再编辑Poxtfix配置文件,添加以下内容(如果已经有了,去掉前面的注释号)。
smtpd_recipient_restrictions =reject_unauth_destination,check_policy_service unix:private/policy
5、最后重新载入 postfix 服务:postfix reload
八、postfix邮件系统小结
1、postfix邮件系统可以用来替代sendmail发送邮件,如果你不想使用Pop和Imap服务,可以只安装postfix,并将其设置为默认的发邮件服务,这样服务器在发邮件时就是通过postfix了。
2、postfix邮件系统配合maildorp、extmail、extman等就要可以搭建一个企业邮局了,如果再配合好SPF反垃圾邮件策略,就可以满足日常大量的邮件收发任务了,且供多人同时使用。