电子邮件是因特网上最为流行的应用之一,与传统邮件不同的是,电子邮件既迅速,又易于分发,而且成本低廉。另外,现代的电子邮件消息可以包含超链接、HTML格式文本、图像、声音甚至视频数据.

我们常见的相关邮件服务的协议有smtp,IMAP,POP3,S/MIME
smtp工作在tcp的25号端口,主要用于发送和接收邮件,有smtp和smtpd进程之分。smtp用于发送邮件,smtpd用于接收邮件。
IMAP工作在tcp的143端口,pop3工作在tcp的110端口,用于用户查看和下载邮件
S/MIME是多用途互联网邮件扩展,是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件。

邮件服务的工作过程:用户使用用户名和密码通过认证之后,通过MUA写好邮件,然后通过本机的smtp客户端发送给本地域指定的邮件服务器,管理本地域的邮件服务器通过运行的MTA来接收邮件;如果是发往本域的邮件,则通过MDA投递到对应用户的邮箱中,如果是发往其它的域,则进行中继,通过管理本地域的邮件服务器的smtp客户端发给管理目标域的邮件服务器,管理目标域的邮件服务器执行相同的操作。而当邮件到达目的地点,接收邮件的用户通过通过认证之后,就可以利用MRA在邮件服务器上查看和下载邮件,整个过程结束。

安装邮件服务器:
邮件服务依赖于DNS服务,首先要安装dns
yum install bind bind-utils bind-libs
把dns服务器安装好并且配置好 这里不再给出过程

启动saslauthd服务,并将其加入到自动启动队列:
# service saslauthd start
# chkconfig saslauthd on

安装配置postfix
创建postfix用户和组
# groupadd -g 2525 postfix
# useradd -g postfix -u 2525 -s /sbin/nologin -M postfix

编译安装postfix
# tar zxvf postfix-2.9.1.tar.gz
# cd postfix-2.9.1
# make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS ' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2  -lssl -lcrypto'
# make
# make instal
按照以下的提示输入相关的路径
install_root: [/]
tempdir: [/root/postfix-2.9.1] /tmp/postfix
config_directory: [/etc/postfix]
command_directory: [/usr/sbin]
daemon_directory: [/usr/libexec/postfix]
data_directory: [/var/lib/postfix]
html_directory: [no]/var/www/html/postfix
mail_owner: [postfix]
mailq_path: [/usr/bin/mailq]
manpage_directory: [/usr/local/man]
newaliases_path: [/usr/bin/newaliases]
queue_directory: [/var/spool/postfix]
readme_directory: [no]
sendmail_path: [/usr/sbin/sendmail]
setgid_group: [postdrop]
生成别名二进制文件:
#newaliases

# vim /etc/postfix/main.cf
修改以下几项
myhostname = mail.magedu.com
mydomain = magedu.com
myorigin = magedu.com
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 172.16.0.0/16, 127.0.0.0/8, 192.168.0.0/24

为postfix提供SysV服务脚本/etc/rc.d/init.d/postfix
vim /etc/rc.d/init.d/postfix添加内容
#!/bin/bash
#
# postfix      Postfix Mail Transfer Agent
#
# chkconfig: 2345 80 30
# description: Postfix is a Mail Transport Agent, which is the program \
#              that moves mail from one machine to another.
# processname: master
# pidfile: /var/spool/postfix/pid/master.pid
# config: /etc/postfix/main.cf
# config: /etc/postfix/master.cf
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ $NETWORKING = "no" ] && exit 3
 
[ -x /usr/sbin/postfix ] || exit 4
[ -d /etc/postfix ] || exit 5
[ -d /var/spool/postfix ] || exit 6
 
RETVAL=0
prog="postfix"
 
start() {
# Start daemons.
echo -n $"Starting postfix: "
        /usr/bin/newaliases >/dev/null 2>&1
/usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure $"$prog start"
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/postfix
        echo
return $RETVAL
}
 
stop() {
  # Stop daemons.
echo -n $"Shutting down postfix: "
/usr/sbin/postfix stop 2>/dev/null 1>&2 && success || failure $"$prog stop"
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/postfix
echo
return $RETVAL
}
 
reload() {
echo -n $"Reloading postfix: "
/usr/sbin/postfix reload 2>/dev/null 1>&2 && success || failure $"$prog reload"
RETVAL=$?
echo
return $RETVAL
}
 
abort() {
/usr/sbin/postfix abort 2>/dev/null 1>&2 && success || failure $"$prog abort"
return $?
}
 
flush() {
/usr/sbin/postfix flush 2>/dev/null 1>&2 && success || failure $"$prog flush"
return $?
}
 
check() {
/usr/sbin/postfix check 2>/dev/null 1>&2 && success || failure $"$prog check"
return $?
}
 
restart() {
stop
start
}
 
# See how we were called.
case "$1" in
  start)
start
;;
  stop)
stop
;;
  restart)
stop
start
;;
  reload)
reload
;;
  abort)
abort
;;
  flush)
flush
;;
  check)
check
;;
  status)
  status master
;;
  condrestart)
[ -f /var/lock/subsys/postfix ] && restart || :
;;
  *)
echo $"Usage: $0 {start|stop|restart|reload|abort|flush|check|status|condrestart}"
exit 1
esac
 
exit $?
 
# END
为此脚本赋予执行权限:
# chmod +x /etc/rc.d/init.d/postfix
将postfix服务添加至服务列表:
# chkconfig --add postfix
设置postfix开机自动启动:
# chkconfig postfix on

使用本地用户测试邮件收发
telnet localhost 25
mail from:[email protected]
rcpt to:[email protected]
data
subject:Mail test!
Mail test!!
如果出现250 2.0.0 Ok: queued as AB94A1A561则证明postfix能发送邮件
使用quit退出

切换到student用户区查看邮件
su - student
使用mail查看邮件


为postfix服务开启用户别名支持
别名的作用为使一个用户的邮件让另一个用户代理接收
#vim /etc/postfix/main.cf
修改alias_maps = hash:/etc/aliases
#vim /etc/aliases来定义别名
在文件末尾添加
student:root
将/etc/aliases转换为hash格式:
# postalias  /etc/aliases


postfix基于客户端的访问控制
postfix内置了多种反垃圾邮件的机制,其中就包括“客户端”发送邮件限制。客户端判别机制可以设定一系列客户信息的判别条件

为postfix开启基于cyrus-sasl的认证功能
编辑/etc/postfix/main.cf
添加内容
############################CYRUS-SASL############################
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_application_name = smtpd
smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!

# vim /usr/lib/sasl2/smtpd.conf
添加如下内容:
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

#service postfix restart 重新启动