一  、E-mail  概述

   Internet最基本的服务,也是最重要的服务之一,就是电子邮件服务。据统计Internet上百分之三十以上的业务量是电子邮件,仅次于WWW服务。与传统的邮政信件服务类似,电子邮件可以用来在Internet或Intranet上进行信息的传递和交流,但电子邮件服务还具有快速、经济的特点。发一份电子邮件给远在他方的一位用户,通常来说,对方几分钟之内就能收到。如果选用传统邮件,发一封特快专递也需要至少一天的时间。而且电子邮件的费用最多只需几毛钱。与实时信息交流,如电话相比,因为电子邮件是采用存储转发的方式,发送邮件时,并不需要收件人处于在线状态,收件人可以根据实际需要随时上网从邮件服务器上收取邮件,方便了信息的交流。

1. E-mail系统的组成

一个完整的E-mail系统一般由三个部分组成,包括用户邮件代理、邮件服务器和邮件协议。

   用户邮件代理(Mail User Agent,简称MUA)是用户与电子邮件系统的接口,负责用户和邮件服务器之间的交互工作。大多数情况下,MUA就是运行在客户端上的应用程序,其作用是将邮件发送到邮件服务器上和从邮件服务器上接收邮件。

  邮件服务器是电子邮件系统的核心,其主要功能是发送和接收邮件,并向发件人告知邮件的传送情况。邮件服务器根据其功能,分为邮件传输服务器(SMTP服务器)和邮件接收服务器(POP3或IMAP4服务器)。

2. E-mail工作原理

E-mail的传输过程如下。

① 用户在各自的POP服务器注册登记,由网络管理员设置为授权用户,并取得一个POP信箱,获得POP和SMTP服务器的地址信息。假设两个服务器的域名分别为example.com和163.com,注册用户分别为liu和chen,E-mail地址分别为liu@example.com和chen@163.com。

② 当example.com服务器上的用户liu向chen@163.com发送E-mail时,E-mail首先从客户端被发送至example.com的SMTP服务器。

③ example.com的SMTP服务器根据目的E-mail地址查询163.com的SMTP服务器,并转发该E-mail。

④ 163.com的SMTP服务器收到转发的E-mail,并保存。

⑤ 163.com的chen用户利用客户端登录至163.com的POP服务器,从其信箱中下载并浏览E-mail。


 


3. 电子邮件协议

 MIME(Multipurpose Internet Mail Extensions)多功能Internet 邮件扩充服务。 早期E-mail只能使用简单的ASCII文本进行消息传递,而现在人们可以通过E-mail发送各种各样的信息,包括照片、音频、应用程序等,正是MIME的出现,提供了这样的可能。MIME描述了如何设置信息格式,使得信息能够在不同的邮件系统内进行交换,MIME的格式灵活,允许邮件中包含任何类型的文件。

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是一种提供可靠、高效的电子邮件传输协议。SMTP规定了如何在网络上的两台主机间可靠、高效地传送电子邮件,SMTP能够控制邮件信息的中转方式。

二、Sendmail 简介

  Sendmail是历史最悠久的SMTP服务器,目前,几乎所有的Linux发行版中都安装了Sendmail。实际上,Sendmail几乎已成为Linux操作系统中电子邮件服务器的代名词。

wRed Hat Enterprise Linux 5中,默认情况下安装程序已经将Sendmail安装到系统中了。可以在终端执行以下命令,查看系统是否已经安装Sendmail软件包:

三、主流电子邮件服务器软件

  1. 在Linux平台中,有许多邮件服务器可供选择,但目前使用较多的是Sendmail服务器、 Postfix服务器和Qmail服务器。

  2. Sendmail是一个很优秀的邮件服务软件。几乎所有Linux的缺省配置中都内置了这个软件,只需要设置好操作系统,它就能立即运转起来。

  3. Postfix是一个由IBM资助下由Wietse Venema 负责开发的一个自由软件工程产物,它的目的就是为用户提供除Sendmail之外的邮件服务器选择。

  4.  Qmail是有Dan Bernstein开发的可以自由下载邮件服务器软件,其第一个beta版本0.70.7发布于1996年1月24日,当前版本是2.3.3-2。

案例一:

拓扑图:

内网邮件架构_内网邮件架构



 


注意:假设每台电脑上一个账号!

一  、163.com 配置

1.修改主机名

[root@gjp99 ~]# vim /etc/sysconfig/network

[root@gjp99 ~]# cat /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=yes

HOSTNAME=mail.163.com

2.把hosts 文件还原成默认值

[root@gjp99 ~]# cat /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1  localhost.localdomain  localhost

::1        localhost6.localdomain6 localhost6

3.安装dns服务器

挂载光盘—》安装三个文件  bind bind-chroot caching-nameserver


 

4.配置DNS服务器

[root@gjp99 etc]# ll 
total 16 
-rw-r--r-- 1 root root   405 Aug  2 21:30 localtime 
-rw-r----- 1 root named 1230 Jul 30  2009 named.caching-nameserver.conf 
-rw-r----- 1 root named  955 Jul 30  2009 named.rfc1912.zones 
-rw-r----- 1 root named  113 Aug  3 14:03 rndc.key 
[root@gjp99 etc]# pwd    //注意当前路径 
/var/named/chroot/etc 
[root@gjp99 etc]# cp -p named.caching-nameserver.conf named.conf
注意:利用-p 或者 –a 把文件的属性也拷贝过来! 
[root@gjp99 etc]# ll    //注意这里的所属用户及所属组(不使用-p,就不同) 
total 20 
-rw-r--r-- 1 root root   405 Aug  2 21:30 localtime 
-rw-r----- 1 root named 1230 Jul 30  2009 named.caching-nameserver.conf 
-rw-r----- 1 root named 1230 Jul 30  2009 named.conf 
-rw-r----- 1 root named  955 Jul 30  2009 named.rfc1912.zones 
-rw-r----- 1 root named  113 Aug  3 14:03 rndc.key

[root@gjp99 etc]# vim named.conf


内网邮件架构_网络_02

[root@gjp99 etc]# vim named.rfc1912.zones    //编辑区域文件

增加以下内容:


内网邮件架构_网络_03

 

生成163.com.zone 区域文件:


内网邮件架构_开发工具_04

 5.服务重启并配置dns指向,及永久ip


内网邮件架构_开发工具_05

 6.主机名修改成功,需重启,才能生效!

init 6  //重启

重启后主机名mail.163.com生效!


 


内网邮件架构_网络_06


 7.配置主要文件 (已高亮显示)

[root@mail Server]# cd /etc/mail/

[root@mail mail]# ls

access       domaintable.db    mailertable     sendmail.cf  submit.mc      virtusertable.db

access.db    helpfile          mailertable.db  sendmail.mc  trusted-users

domaintable  local-host-names  Makefile        submit.cf    virtusertable

由于sendmail.cf文件的格式难于理解,所以修改sendmail.mc文件.但是修改此文件需要一个软件包,

安装sendmail-cf-8.13.8-2.el5.i386.rpm


内网邮件架构_开发工具_07


 


[root@mail Server]# rpm -qa |grep m4   // 查看该文件是否已安装

m4-1.4.5-3.el5.1     //该文件可以直接把mc格式的文件转换成cf格式

8.安装邮件接收服务器:(MAA)


 


[root@mail cdrom]# cd /mnt/cdrom/Server

[root@mail Server]# ll dove*

-r--r--r-- 264 root root 1736855 Nov 10  2012 dovecot-1.0.7-7.el5.i386.rpm

[root@mail Server]# rpm -ivh dovecot-1.0.7-7.el5.i386.rpm

warning: dovecot-1.0.7-7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186

error: Failed dependencies:

    libmysqlclient.so.15 is needed by dovecot-1.0.7-7.el5.i386

    libmysqlclient.so.15(libmysqlclient_15) is needed by dovecot-1.0.7-7.el5.i386

[root@mail Server]# rpm -ivh mysql-5.0.77-3.el5.i386.rpm

warning: mysql-5.0.77-3.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186

error: Failed dependencies:

    perl(DBI) is needed by mysql-5.0.77-3.el5.i386

 

内网邮件架构_网络_08


 


[root@mail Server]# rpm -ql dovecot |less


 


/etc/dovecot.conf      // 主配置文件

/etc/pam.d/dovecot   //PAM

/etc/pki/dovecot       //支持证书!

/etc/pki/dovecot/certs


 


[root@mail Server]# vim /etc/dovecot.conf


内网邮件架构_服务器_09


 


该行可有选择地使用!


内网邮件架构_运维_10


 


10. 启动 sendmail 服务,查看其端口


内网邮件架构_内网邮件架构_11


 


[root@mail Server]# netstat -tupln |grep send

tcp        0      0 127.0.0.1:25      0.0.0.0:*         LISTEN      3824/sendmail: acce


 

注意:127.0.0.0.1只能在本地进行进行中继~


 

11.创建本地账号:


 

[root@mail mail]# useradd user1

[root@mail mail]# passwd user1

Changing password for user user1.

New UNIX password:

BAD PASSWORD: it is WAY too short

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

[root@mail mail]# useradd user2

[root@mail mail]# passwd user2


 

12.本地写封信测试:


 


普通测试:


 


[root@mail mail]# mail -s gjp user1

welcome!

.

Cc:

[root@mail mail]# su - user1

[user1@mail ~]$ mail


 


Mail version 8.1 6/6/93.  Type ? for help.

"/var/spool/mail/user1": 2 messages 2 new

>N  1 root@mail.163.com     Fri Nov 3 16:37  16/569   "gjp"

& 1

Message 1:

From root@mail.163.com  Fri Nov 3 16:37:24 2012

Date: Fri, 3 Aug 2012 15:49:05 +0800

From: root <root@mail.163.com>

To: user1@mail.163.com

Subject: gjp


 

welcome!


 

& quit2 
Saved 2 messages in mbox 
[user1@mail ~]$ ll 
total 4 
-rw------- 1 user1 user1 1160 Aug  3 16:45 mbox

 
[user1@mail ~]$ cat mbox   //存放已看过的信件

 
[user1@mail ~]$ pwd 
/home/user1         //看过的信件在家目录下!

 
telnet 所监听的端口测试:

 
[root@mail Server]# telnet 127.0.0.1 25 
Trying 127.0.0.1... 
Connected to localhost.localdomain (127.0.0.1). 
Escape character is '^]'. 
220 mail.163.com ESMTP Sendmail 8.13.8/8.13.8; Fri, 3 Nov 2012 16:52:39 +0800

 
helo 127.0.0.1    //问候 
250 mail.163.com Hello localhost.localdomain [127.0.0.1], pleased to meet you 
mail from :user1@163.com    //发件人 
250 2.1.0 user1@163.com... Sender ok 
rcpt to :user2@163.com     // 收件人 
250 2.1.5 user2@163.com... Recipient ok 
data         开始写信息 
354 Enter mail, end with "." on a line by itself 
subject nice to meet you !     // 标题 
 Welcome to here !               //内容 
.              // 点号结束 
250 2.0.0 q738qdqg003907 Message accepted for delivery 

 
quit     //退出 
221 2.0.0 mail.163.com closing connection 
Connection closed by foreign host. 
You have new mail in /var/spool/mail/root

13.疑难解答:

由于sendmail的监听的端口为127.0.0.1,只能在本地监听


内网邮件架构_内网邮件架构_12

问题一:


内网邮件架构_网络_13

 

解决一:

[root@mail mail]# vim sendmail.mc


内网邮件架构_开发工具_14

 


内网邮件架构_内网邮件架构_15


 


问题二 : 在本地都不能处理 ( 如果 telnet 127.0.0.1 25 成功 )

解决二:

[root@mail mail]# vim access


内网邮件架构_运维_16

 [root@mail mail]# vim local-host-names

[root@mail mail]# cat local-host-names

# local-host-names - include all aliases for your machine here.

163.com

mail.163.com

服务重启:


 


内网邮件架构_服务器_17



 


[root@mail mail]# su - user1

[user1@mail ~]$ mail

Mail version 8.1 6/6/93.  Type ? for help.

"/var/spool/mail/user1": 1 message 1 new

>N  1 user2@163.com         Fri Aug  3 18:07  12/359 

& 1

Message 1:

From user2@163.com  Fri Aug  3 18:07:09 2012

Date: Fri, 3 Aug 2012 18:06:05 +0800

From: user2@163.com

subject ok

kkele

问题三、任何人都可以向我发邮件(不安全,可能是垃圾邮件)


内网邮件架构_开发工具_18


 


用 windows 下的 outlook express 接收与发送邮件测试 :


 


内网邮件架构_服务器_19



内网邮件架构_运维_20


 


发送邮件!


内网邮件架构_开发工具_21

 解析一下,看看dns是否存在问题:


内网邮件架构_服务器_22

解决三:需要认证: ip认证或账号认证!(下篇详细介绍)

 


转载于:https://blog.51cto.com/liufan0321/1061248