简单介绍一下linux下的sendmail邮件服务器
大家都知道微软下的邮件解决有exchange,应用的也很广泛,linux下也有自己的邮件解决方案,今天就说一下linux 自带的一种邮件服务
实验环境 VMware 6.5.2+ redhat Enterprise linux 5 AS
我的内核版本
所需条件,依赖于DNSD的解析所以提前我们要对DNS 进行一下配置
关于DNS 如何解析之前已经有比较详细的描述,在此仅添加部分内容即可
实验目的,简单的实现邮件的收发,并不涉及对于后台数据库的管理,只是为了了解一下linux下的邮件解决方案
我的ip以及 域名
[root@localhost ~]# vi /var/named/abc.zone
注意 我的这个环境下的DNS并没有安装chroot这个组件,所以路径可能略有不同
正向区域中添加记录 注意这里的10 指的是优先级
[root@localhost ~]# vi /var/named/abc.local
修改反向区域文件
[root@localhost ~]# service named restart
停止 named: [确定]
启动 named: [确定]
[root@localhost ~]#
重启DNS
[root@localhost mail]# cd
[root@localhost ~]# nslookup 192.168.0.5
Server: 127.0.0.1
Address: 127.0.0.1#53
5.0.168.192.in-addr.arpa name = mail.abc.com.
5.0.168.192.in-addr.arpa name = [url][/url]
[root@localhost ~]#
反向解析一下
ok 成功解析
准备工作已经完成, 下面开始安装sendmail
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@localhost ~]# cd /mnt/cdrom/Server
[root@localhost Server]#
挂镜像 进入目录
[root@localhost Server]# rpm -ivh sendmail-
sendmail-8.13.8-2.el5.i386.rpm sendmail-devel-8.13.8-2.el5.i386.rpm
sendmail-cf-8.13.8-2.el5.i386.rpm sendmail-doc-8.13.8-2.el5.i386.rpm
[root@localhost Server]#
sendmail 的安装一共需要四个包
[root@localhost Server]# rpm -ivh sendmail-8.13.8-2.el5.i386.rpm
warning: sendmail-8.13.8-2.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
package sendmail-8.13.8-2.el5 is already installed
[root@localhost Server]#
主程序包已经安装过
[root@localhost Server]# rpm -ivh sendmail-devel-8.13.8-2.el5.i386.rpm
warning: sendmail-devel-8.13.8-2.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:sendmail-devel ########################################### [100%]
[root@localhost Server]# rpm -ivh sendmail-cf-8.13.8-2.el5.i386.rpm
warning: sendmail-cf-8.13.8-2.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:sendmail-cf ########################################### [100%]
[root@localhost Server]# rpm -ivh sendmail-doc-8.13.8-2.el5.i386.rpm
warning: sendmail-doc-8.13.8-2.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:sendmail-doc ########################################### [100%]
[root@localhost Server]#
安装顺序 好像主程序是必须先安装的 其他包的顺序 没什么特殊要求
这里呢 还是需要插入一点点东西
SMTP 端口 25,全称(SimpleMailTransferProtocol)简单邮件传输协议,是基于DNS中的邮件交换(MX)记录路由电子邮件。电子邮件系统发邮件时是根据收信人的地址后缀来定位邮件服务器的,是基于TCP服务的应用层协议。
POP3 端口110,全称(Post Office Protocol 3) 邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议 标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议 的接收邮件服务器,用来接收电子邮件的。
这里我们只是安装了 SMTP服务 ,而POP3服务是需要另外安装的,
[root@localhost Server]# rpm -ivh dovecot-1.0-1.2.rc15.el5.i386.rpm
warning: dovecot-1.0-1.2.rc15.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
libmysqlclient.so.15 is needed by dovecot-1.0-1.2.rc15.el5.i386
libmysqlclient.so.15(libmysqlclient_15) is needed by dovecot-1.0-1.2.rc15.el5.i386
[root@localhost Server]#
居然报错
多方查证后,解决 这里的libmysqlclient和我们要安装的POP3即dovecot rpm包是依赖关系,
但libmysqlclient包是不存在的,他只是个库文件,存在于某一个包里的一个组件,或者说是一个包里的一部分,
[root@localhost Server]# rpm -ivh mysql-
mysql-5.0.22-2.1.0.1.i386.rpm
mysql-bench-5.0.22-2.1.0.1.i386.rpm
mysql-connector-odbc-3.51.12-2.2.i386.rpm
mysql-devel-5.0.22-2.1.0.1.i386.rpm
mysql-server-5.0.22-2.1.0.1.i386.rpm
mysql-test-5.0.22-2.1.0.1.i386.rpm
[root@localhost Server]# rpm -ivh mysql-5.0.22-2.1.0.1.i386.rpm
warning: mysql-5.0.22-2.1.0.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
perl(DBI) is needed by mysql-5.0.22-2.1.0.1.i386
[root@localhost Server]#
而这个包就是mysql 的主程序包
又出来了一个依赖关系
[root@localhost Server]# rpm -ivh perl-
perl-5.8.8-10.i386.rpm
perl-Archive-Tar-1.30-1.fc6.noarch.rpm
perl-Bit-Vector-6.4-2.2.2.1.i386.rpm
perl-BSD-Resource-1.28-1.fc6.1.i386.rpm
perl-Carp-Clan-5.3-1.2.1.noarch.rpm
perl-Compress-Zlib-1.42-1.fc6.i386.rpm
perl-Convert-ASN1-0.20-1.1.noarch.rpm
perl-Crypt-SSLeay-0.51-11.el5.i386.rpm
perl-Date-Calc-5.4-1.2.2.1.i386.rpm
perl-DateManip-5.44-1.2.1.noarch.rpm
perl-DBD-MySQL-3.0007-1.fc6.i386.rpm
perl-DBD-Pg-1.49-1.fc6.i386.rpm
perl-DBI-1.52-1.fc6.i386.rpm
perl-Digest-HMAC-1.01-15.noarch.rpm
perl-Digest-SHA1-2.11-1.2.1.i386.rpm
perl-HTML-Parser-3.55-1.fc6.i386.rpm
perl-HTML-Tagset-3.10-2.1.1.noarch.rpm
perl-IO-Socket-INET6-2.51-2.fc6.noarch.rpm
perl-IO-Socket-SSL-1.01-1.fc6.noarch.rpm
perl-IO-String-1.08-1.1.1.noarch.rpm
perl-IO-Zlib-1.04-4.2.1.noarch.rpm
perl-LDAP-0.33-3.fc6.noarch.rpm
perl-libwww-perl-5.805-1.1.1.noarch.rpm
--More--
[root@localhost Server]# rpm -ivh perl-DBI-1.52-1.fc6.i386.rpm
warning: perl-DBI-1.52-1.fc6.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:perl-DBI ########################################### [100%]
[root@localhost Server]# rpm -ivh mysql-5.0.22-2.1.0.1.i386.rpm
warning: mysql-5.0.22-2.1.0.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:mysql ########################################### [100%] [root@localhost Server]# rpm -ivh dovecot-1.0-1.2.rc15.el5.i386.rpm
warning: dovecot-1.0-1.2.rc15.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:dovecot ########################################### [100%]
[root@localhost Server]#
然后再以相反的顺序安装 perl mysql dovecot 等包
至此sendmail 所需的组件已经安装完毕
相关配置文件
/etc/mail/sendmail.cf 注意这可是用传说中的sendmail语言写的,听说一般人看不懂
/etc/mail/sendmail.mc 传说sendmail为上面的配置文件写的一个类似shell的东西 意 思是,修改/etc/mail/sendmail.mc文件后》》》/etc/mail/sendmail.cf会发生变化,类似于 linux下shell调用命令
[root@localhost Server]# cd /etc/mail
[root@localhost mail]# ls
access helpfile Makefile submit.mc
access.db local-host-names sendmail.cf trusted-users
domaintable mailertable sendmail.mc virtusertable
domaintable.db mailertable.db submit.cf virtusertable.db
[root@localhost mail]#
[root@localhost mail]# vi access.db
这里面有好多库文件 我们直接打开是乱码的,这里可不是一两个这样,
[root@localhost Server]# vi /etc/mail/sendmail.cf
我们可以打开 这个文件看一下
文中好多$ 至于是什么意思 没学过的肯定不知道,别动他,不保存退出,
[root@localhost Server]# vi /etc/mail/sendmail.mc
打开这个文件
在 文件末尾处116行把原文注释掉 ,注释的方法是dnl空格
保存退出
[root@localhost Server]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
注意 我们刚才修改的是/etc/mail/sendmail.mc
现在要重定向到/etc/mail/sendmail.cf当中
[root@localhost Server]# vi /etc/mail/access
修改访问控制列表
这里你是哪个网段的你就添加什么
[root@localhost Server]# makemap hash /etc/mail/access.db < /etc/mail/access
把刚刚修改的 访问列表 重定向到 /etc/mail/access.db当中
[root@localhost Server]# vi /etc/mail/local-host-names
这里是在文件中加入允许访问此邮件服务器的域名
保存退出
重启服务
[root@localhost Server]# service sendmail restart
关闭 sm-client: [确定]
关闭 sendmail: [确定]
启动 sendmail: [确定]
启动 sm-client: [确定]
[root@localhost Server]#
SMTP服务重启成功
[root@localhost Server]# service dovecot restart
停止 Dovecot Imap: [失败]
启动 Dovecot Imap: [确定]
[root@localhost Server]#
POP 3 重启成功
这时你可以netstat一下 看看他们的端口 是不是listen状态
测试部分
[root@localhost Server]# cd
[root@localhost ~]# useradd aa
[root@localhost ~]# passwd aa
Changing password for user aa.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# useradd bb
[root@localhost ~]# passwd bb
Changing password for user bb.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]#
新建两个用户
aa bb
[root@localhost ~]# mail aa
Subject: hell
ni wen wo ai ni you duo shen
Cc:
[root@localhost ~]#
我们以管理员用户给aa 发封信
[root@localhost ~]# su - aa
[aa@localhost ~]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/aa": 1 message 1 new
>N 1 [email]root@localhost.loca[/email]l Tue May 5 19:20 16/663 "hell"
& 1 选择1
Message 1:
From [email]root@localhost.loca[/email]ldomain Tue May 5 19:20:13 2009
Date: Tue, 5 May 2009 19:20:13 +0800
From: root <[email]root@localhost.loca[/email]ldomain>
To: [email]aa@localhost.loca[/email]ldomain
Subject: hell
ni wen wo ai ni you duo shen
&
At EOF
& Interrupt
& Saved 1 message in mbox
[aa@localhost ~]$
这里 发信的 时候输入mail用户名
按ctrl+D发送
[root@localhost ~]# mail bb
Subject: hello
你问我爱你有多身
Cc:
[root@localhost ~]#
[root@localhost ~]# su - bb
[bb@localhost ~]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/bb": 1 message 1 new
>N 1 [email]root@localhost.loca[/email]l Tue May 5 19:30 16/659 "hello"
& 1
Message 1:
From [email]root@localhost.loca[/email]ldomain Tue May 5 19:30:24 2009
Date: Tue, 5 May 2009 19:30:24 +0800
From: root <[email]root@localhost.loca[/email]ldomain>
To: [email]bb@localhost.loca[/email]ldomain
Subject: hello
你问我爱你有多身
& Saved 1 message in mbox
[bb@localhost ~]$
ok 成功
接着我们用windows 下的outlook 来测试一下 ,这是office 03 自带的一个邮件收发工具,可以把邮件下载到本地,打开后 选择工具下的电子邮件账户
在添加一个bb用户 发几封邮件测试一下
情况很好
最后 这里我们添加的用户都是linux 下已经存在的, 用的密码也是系统密码
验证方式 也是系统验证 ,由于只是简单的实现以下sendmail功能,而且用户又很少,
生产环境下,可是要有后台数据库支持的,用户的验证也是数据库验证,
客户端有好多种,不局限于 outlook ,像windows 自带的outlook express也是可以的
写在最后
由于时间仓促,文中有不到之处还请多多指教
http://yuzeying.blog.51cto.com/644976/155392