邮件服务器
网易 coremail
开源
sendmail postfix qmail
MUA mail user agent 邮件用户代理 用于客户端发送邮件和阅读邮件
MTA mail tranfer agent 邮件传输代理 服务端软件,相当于是一个邮局,接收MUA发送过来的邮件,如果不是本地邮件,则发送给下一个MTA.
MDA mail delivery agent 邮件投递代理 将MTA所接收到的邮件,依照邮件的目的地将此邮件放到本机账号
SMTP 允许中继
MTA 网易---------- MTA 新浪
| |
| |
|SMTP | MDA
| |
xxx@126.com xxx@sina.com
邮件协议:
发信:
SMTP simple mail transfer protocol 简单邮件传输协议 端口号 TCP 25
sendmail
收信:
POP3 post office protocol 邮局协议 ,连接到MTA,读取或者下载邮件. 端口号 110
IMAP internet message access protocal 网络报文访问协议 能在下载邮件前先下载邮件头信息,以供用户选择性的下载 端口号 143
dovecot 鸽舍
软件包
sendmail.i386 --邮件server端
sendmail-cf.i386 --配置文件包
sendmail-devel.i386 --开发包
sendmail-doc.i386 --文档包
m4.i386 --处理配置文件
yum install sendmail*
yum install m4
配置文件
/etc/mail/sendmail.cf --sendmail邮件服务启动时读取的主配置文件
/etc/mail/sendmail.mc --修改配置一般修改这个配置文件,如果有安装M4包的话,会自动把修改处理到sendmail.cf;如果没有安装m4包,就要手动处理/etc/mail/local-host-names --支持短域名
/etc/mail/virtusertable --虚拟用户列表
/etc/mail/access --邮件中继
/etc/aliases --用户别名
[root@36 ~]# /etc/init.d/sendmail restart
[root@36 ~]# netstat -ntlup |grep 25
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 6301/sendmail: acce
--上面看到只监听本地,现在只能自己发信给自己
--发送邮件方法一
[root@36 ~]# mail -s 'hello' root@36.web.com --s参数是定义主题
1111111111111111 --邮件正文
. --点号表示结束
Cc: --抄送,这里我直接回车表示结束
查看邮件
cat /var/spool/mail/root
cat /var/mail/root
[root@36 ~]# mail -s 'hello2' root@36.web.com < /etc/fstab
--把/etc/fstab的内容做为邮件的正文来发
发邮件方法二:
[root@li ~]# telnet 127.0.0.1 25 --对25端口也就是smtp协议进行验证
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Fri, 3 Sep 2010 10:31:00 0800
helo li.cluster.com --介绍自己,用help命令查看支持的命令集,help helo查看helo的用法
250 li.cluster.com Hello localhost.localdomain [127.0.0.1], pleased to meet you
mail from:abc@qq.com --定义发送者,在这里随便定义
250 2.1.0 abc@qq.com... Sender ok
rcpt to:root@li.cluster.com --定义接收者,在这里是本机的root用户
250 2.1.5 root@li.cluster.com... Recipient ok
data --表示后面写的是邮件内容
354 Enter mail, end with "." on a line by itself
test mail from qq.com --邮件正文
. --点号表示内容结束250 2.0.0 o832V0tl004576 Message accepted for delivery
quit --quit退出
221 2.0.0 li.cluster.com closing connection
发邮件方法三:
mutt 一个linux下的文本的MUA工具
[root@36 ~]# mutt user1@36.web.com --使用root用户给user1用户发送邮件,并且有发送附件等功能
su - user1
mutt去查看
发送邮件方法四:
[root@36 ~]# cat /etc/rc.local | sendmail -v user1@36.web.com
发送邮件方法五:
[root@li ~]# mail a --也是调用mail命令
Subject: hello a
i am root
.
Cc: b
发送邮件方法六:
安装别的软件,进行软件收发
====================================================================
邮件发送也需要DNS的支持,并且,DNS要配置邮件交换记录
linux客户端 DNS服务器 sendmail服务器 dovecot服务器
2.2.2.35----------2.2.2.35--------2.2.2.244
|
|
|
客户端 windows xp
2.2.2.187
先在244上把主机名和域定义好
#hostname mail.cluster.com
#vim /etc/hosts
2.2.2.244 mail.cluster.com
#vim /etc/sysconfig/network
HOSTNAME=mail.cluster.com
下面在2.2.2.35上做DNS
[root@li ~]# vim /var/named/chroot/etc/named.conf
options {
directory "/var/named";
};
zone "cluster.com" IN {
type master;
file "data/master.cluster.com.zone";
};
[root@li ~]# vim /var/named/chroot/var/named/data/master.web.com.zone
$TTL 86400
@ IN SOA li.cluster.com. root. (
201107260160
30
3600
86400 )
IN NS li.cluster.com.
IN MX 0 li.cluster.com. --加上这一句,MX是邮件交换记录,0代表优先级别,0-20,0代表优先级最高
mail IN A 2.2.2.244 --这里指向的244为sendmail服务器的IP
/etc/init.d/named restart
再在xp2.2.2.187上把DNS指向35,然后进行验证
--下面的验证是linux上做的,但是在XP的cmd命令行模式也是一样的命令来验证
[root@li ~]# nslookup mail.cluster.com --验证域名OK
Server: 2.2.2.35
Address: 2.2.2.35#53
Name: mail.cluster.com
Address: 2.2.2.244
[root@li ~]# nslookup --验证邮件交换记录
> set type=mx
> web.com --这里写域,不是域名
Server: 2.2.2.35
Address: 2.2.2.35#53
web.com mail exchanger = 0 mail.cluster.com
>
安装图形邮件客户端,这里使用claws-mail
[root@li ~]# ls /share/soft/soft/mail_client/
claws-mail-3.5.0.tar.gz libetpan-0.57.tar.gz
tar xvf libetpan-0.57.tar.gz -C /usr/src/ --IMAP4和NNTP支持,要先装这个包才能编译claws-mail
tar xvf claws-mail-3.5.0.tar.gz -C /usr/src/
cd /usr/src/libetpan-0.57/
./configure ;make ;make install
cd /usr/src/claws-mail-3.5.0/
./configure && make && make install
--安装完成后,使用claws-mail &命令来打开,如果报找不到libetpan.so.13这个库文件,则使用下面的命令做一个软链接
# ln -s /usr/local/lib/libetpan.so.13 /lib/libetpan.so.13
====================================================
# vim /etc/mail/sendmail.mc
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
# /etc/init.d/sendmail restart
# netstat -ntlup |grep 25
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 4274/sendmail: acce
# netstat -ntl |grep 25 --发现监听所有端口了
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
然后使用linux客户端对服务器的用户进行发邮件测试
# telnet 2.2.2.244 25 --去发一封邮件,测试,是可以收到的
# mail -s "2222" a@mail.cluster.com --可以收到
=====================================================
例二:
使用outlook或claws-mail收发邮件
发送一份邮件给本机用户,点收信时会报连接到mail.cluster.com:110失败
还没有配置pop3,imap服务器
--现在的情况上sendmail 配置OK了,两边可以互发,邮件可以在sendmail服务器上查看到,但是两边客户端不能下载下来
--在244邮件服务器上安装
# yum install dovecot -y --安装此软件包
vim /etc/dovecot.conf --主配置文件
protocols = imap imaps pop3 pop3s --打开这一行
/etc/init.d/dovecot restart
# /etc/init.d/dovecot restart
# netstat -ntlup |grep 110
tcp 0 0 :::110 :::* LISTEN 4363/dovecot
# netstat -ntlup |grep 143
tcp 0 0 :::143 :::* LISTEN 4363/dovecot
--再来进行测试,发现使用邮件客户端收邮件也OK
我这里用了二个账号,注意这两个用户都是在sendmail服务器上的,与客户端有没有此用户无关
拥有帝国一切,皆有可能。欢迎访问phome.netzhangsan@mail.cluster.com --用来登录35这个客户端的claws-mail软件
lisi@mail.cluster.com --用来登录187这个客户端的outlook软件
在claws-mail这个软件上的账号编辑要注意不要写错
主要注意的不要乱写的地方
mail address : zhangsan@mail.cluster.com
server for receiving : mail.cluster.com
smtp server (send) : mail.cluster.com
User ID : zhangsan Password: *** --密码为zhangsan用户的系统密码
outlook的配置省略
实现zhangsan和lisi用户的互发
==========================================================
实现短域名互发
# vim /etc/mail/local-host-names
mail.cluster.com
cluster.com
# vim /etc/mail/sendmail.mc --如果是rhel5.5版本,做了上面那步还不行的话,尝试还把下面一句改为自己的域
155 LOCAL_DOMAIN(`cluster.com')dnl
# /etc/init.d/sendmail restart
还要把244(也就是sendmail服务器)的DNS指向为35这台DNS服务器
# vim /etc/resolv.conf
search cluster.com
nameserver 2.2.2.35
===========================================================
例四;邮件别名,邮件转发,邮件群发
vim /etc/aliases
a: b --发给a用户的邮件,转发给b用户了,a用户自己不收的
c: d,e --发给c用户的邮件,转发给d和e用户了,c用户自己不收的
it: :include:/etc/mail/it --发给it用户(这个it用户在系统上可以不存在)的邮件会群发给/etc/mail/it这个文件里的所有用户
vim /etc/mail/it --定义的文件不存在,要手动建立,并写上群发的用户名,一行写一个
a --这个比较特殊,发给it的会群发给a用户,但a用户上面配置了转发给b用户,a用户还是收不到的,还是由b用户收到了
====================================
例五:邮件的虚拟账号,虚拟用户表格 --后面的postfix课程里会使用一台邮件服务器配置多个虚拟域
一般来说账号分为本地用户账号(系统用户)和虚拟用户账号(一般放在数据库里)
为什么需要虚拟账号?
以前一台邮件服务器只能用来配置一个域;那么如果企业有多个域,或者是服务商要管理多个域,那么这样就需要多台服务器,成本高.就产生了虚拟账号和虚拟域等概念
配置前先把例四的改动给去掉
vim /etc/mail/virtusertable
ccc@cluster.com c@cluster.com --把ccc@cluster.com 虚拟成c@cluster.com,ccc这个用户是系统不存在的,只是虚拟出来的
vim /etc/mail/virtusertable
@cluster.com a --把所有*@cluster.com虚拟成a用户,也就是发送到a用户的邮箱
mail -s 'dsfajfas' sdgjasgajfwjeq@cluster.com --这样随便使用一个不存在的用户名,发现也是把邮件发到a用户去了
=========================================================
邮件中继
中继就是让你的MTA能够把邮件发送到外面的网络
默认情况下,只允许本机把邮件发送到外面的网络,拒绝别的机器登录过来的用户发送外部邮件(防止被利用做为垃圾邮件中转站)
--在sendmail邮件服务器本机上telnet发外部邮件
[root@mail ~]# telnet 2.2.2.244 25
Trying 2.2.2.244...
Connected to mail.cluster.com (2.2.2.244).
Escape character is '^]'.
220 mail.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Tue, 26 Jul 2011 16:02:29 0800
mail from:aaa@gmail.com
250 2.1.0 aaa@gmail.com... Sender okrcpt to:bbb@qq.com --指定一个外部邮箱
250 2.1.5 bbb@qq.com... Recipient ok (will queue) --这里为OK,表示允许本机发外部邮件
--在linux客户端35上通过sendmail服务器发送外部邮件
[root@li ~]# telnet 2.2.2.244 25
Trying 2.2.2.244...
Connected to mail.cluster.com (2.2.2.244).
Escape character is '^]'.
220 mail.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Tue, 26 Jul 2011 16:04:04 0800
mail from:aaa@gmail.com
250 2.1.0 aaa@gmail.com... Sender ok
rcpt to:bbb@qq.com ... Relaying denied. IP name possibly forged [2.2.2.35] --报中继拒绝
--解决方法:
# vim /etc/mail/access
Connect:2.2.2 RELAY --表示允许2.2.2网段的发送外部邮件
/etc/mail/access的一些写法
FROM:sina.com REJECT --拒绝从@sina.com来的邮件
TO:gmail.com discard --发往@gmail.com的丢弃
Connect:10.1.1.160 OK --非常信任的主机可以用OK
--reject拒绝并返回错误信息,discard直接丢弃
=============================================================
实现 两个不同域的短域名互发
1,两个域要能互相解析,并且要有MX记录,互相做转发,能够解析对方
2,两个服务器都/etc/mail/local-host-names 写上自己的主机名和域名
3, 允许中继
=======================================================
squirrelmail --基于php的webmail程序
一个简单的webmail安装测试
--在邮件服务器上做下面操作
# yum install httpd* php php-devel squirrelmail -y
# vim /etc/squirrelmail/config.php
$provider_uri = 'http://mail.cluster.com/';
# /etc/init.d/httpd restart
然后通过firefox 使用http://mail.cluster.com/webmail进行登录界面使用用户名:lisi
密码 :******
登录后和zhangsan进行邮件互发
==================================================================
smtp 验证
假设一个用户要公司是可以自由收发邮件,但如果在家里,或者笔记本用户,IP经常会变动,那这种情况,/etc/mail/access的规则就显得死板
使用smtp验证,只要提供正确的账号和密码,就不受/etc/mail/access的规则限制
# yum install cyrus-sasl* --安装验证有关的软件包
simple authention and security layer
vim /etc/mail/sendmail.mc
把下面三行的注释打开,并且注意要顶格
搜索MD5关键字
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
搜索submission关键字
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
把下面这句
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
改为
DAEMON_OPTIONS(`Port=25, Name=MSA, M=Ea')dnl
然后还要
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl --把这名注释掉,注意注释时用dnl,不用#
--表示强制使用smtp验证
[root@li ~]# /etc/init.d/sendmail restart
[root@li ~]# /etc/init.d/dovecot restart
[root@li ~]# /etc/init.d/saslauthd restart
======================================
用claws-mail验证
点设置-目前账号的偏好设置-发送-把SMPT授权打勾-授权方式选plain-用户ID写本机的一个普通用户名和密码就OK
outlook验证设置
点工具-账号-对应用户的属性-服务器-我的服务器要求身份验证