-- sendmail MUA (mail user agent 邮件用户代理),用于用户端发送邮件或者阅读邮件 linux有mutt这个工具 MTA (mail tranfer agent 邮件传输代理 ),相当于一个邮局,server端的软件,主要的功能有,接收MUA发来的邮件和把邮件发送给下一个MTA,可以说是一个邮件路由(mail router),server端的软件就属于MTA,现在开源的有sendmail,postfix,qmail等 MDA (mail devilery agent 邮件投递代理),主要是将MTA所接受的邮件,依照邮件的目的地将此邮件放到本机账号下或者是给下一个MTA,一般就是指mail这样的命令 邮件的协议: 发信: SMTP (simple mail tranfer protocol 简单邮件传输协议) 端口号 TCP的25端口,在发信时,MUA会主动连接MTA的port 25,然后经由SMTP协议发送出去,SMTP分为接受SMTP和发送SMTP,它不管两端主机的配置或者系统等,只要两边SMTP协议OK就可以发送邮件 收信: POP (post office protocol 邮局协议),来连接到MTA,以读取或者下载邮件,现在常用的版本是POP3,端口为110 IMAP (internet message access protocol 网络报文件协议),能在下载邮件前先下载邮件头信息,以可以让用户选择性下载 端口 143 软件包 yum install sendmail* yum install dovecot sendmail.i386 --邮件服务器端 MTA sendmail-cf.i386 --配置文件包 sendmail-devel.i386 --开发包 sendmail-doc.i386 --文档包 dovecot.i386 --(鸽舍) ,pop邮件服务端 MDA m4.i386 --处理配置文件的包 端口 : smtp (25) pop3 (110) imap (143) 协议: TCP 服务启动脚本: /etc/init.d/sendmail /etc/init.d/dovecot 配置文件: /etc/mail/sendmail.cf --sendmail邮件服务启动时读取的主配置文件 /etc/mail/sendmail.mc --管理员修改sendmail服务器功能时的配置文件 /etc/mail/local-host-names --配置支持发送邮件时使用短域名形式 /etc/mail/virtusertable --虚拟用户列表 /etc/aliases --用户别名 /etc/mail/access --邮件中继 /etc/init.d/sendmail restart [root@li ~]# netstat -ntl |grep 25 --看到默认是只监听了127.0.0.1的回环地址 tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN --发送邮件方法一: [root@li ~]# mail -s "mail" root@li.cluster.com --用此命令发送邮件 -s后接邮件主题 1111 --写邮件内容 . --“." 点号表示结束 Cc: --直接回车退出 [root@li ~]# mail -s 'yyyy' a@li.cluster.com < /etc/grub.conf --还可以这样把/etc/grub.conf的内容直接发送给a用户 --查看邮件方法一: cat /var/mail/root cat /var/spool/mail/root --查看这两个一样的 这样是可以查看到刚才发送的邮件,因为一个是自己发送给自己用的127.0.0.1这个回环地址,这种情况不需要DNS的MX支持 --发送邮件方法二: [root@li ~]# telnet 127.0.0.1 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; Sat, 29 May 2010 11:30:09 +0800 helo li.cluster.com --定义来访者,可以用help去查看支持哪些命令集,用help+命令来看单个命令如何使用 250 li.cluster.com Hello localhost.localdomain [127.0.0.1], pleased to meet you mail from:aa@sina.com --定义一个发送者,这里可以随便定义 250 2.1.0 aa@sina.com... Sender ok rcpt to:a@li.cluster.com --定义接收者,这里是我本机的a用户 250 2.1.5 a@li.cluster.com... Recipient ok data --表示下面要写邮件内容 354 Enter mail, end with "." on a line by itself 4444444444 --随便写上你要发送的邮件的内容 . --"." 点号表示结束 250 2.0.0 o4T3U9l1026581 Message accepted for delivery quit --quit退出,有时候一次退不出,就多敲几次quit 221 2.0.0 li.cluster.com closing connection Connection closed by foreign host. yum install mutt mutt --是一个在unix-like系统下小巧但强大的基于文本的一个能发送和阅读邮件的工具(MUA) --查看邮件方法二: 直接在root用户下使用mutt命令,可以看到root用户的收信箱 如果要看普通的邮件,就要先su - 普通用户名 切换到普通用户再使用mutt命令查看 --发送邮件方法三: [root@li ~]# mutt a@li.cluster.com --可以直接使用这样的命令发送给a@li.cluster.com ,会提示用户写内容,还有附件等功能 --发送邮件方法四: [root@li ~]# cat /etc/rc.local |sendmail -v a@li.cluster.com ------------------------- 下面先把DNS的MX记录给配置好 [root@li mail]# vim /var/named/chroot/var/named/data/master.cluster.com.zone $TTL 86400 @ IN SOA li.cluster.com. root.cluster.com. ( 2010051605 60 60 360 86400) IN NS li.cluster.com. IN MX 0 li.cluster.com. --MX是邮件交换记录,0是代表优先级别,可以写多个,数字越小优先级越高 li IN A 10.1.1.35 pop IN A 10.1.1.35 smtp IN A 10.1.1.35 /etc/init.d/named reload vim /etc/resolv.conf --DNS指向改为本机 [root@li mail]# nslookup --验证MX记录的方法 > set type=mx > cluster.com Server: 10.1.1.35 Address: 10.1.1.35#53 cluster.com mail exchanger = 0 li.cluster.com. --看到这样的信息表示成功 最好把时间同步也配好 [root@li mail]# echo 'while :; do ntpdate 10.1.1.1> /dev/null 2>&1; sleep 10; done'>> /etc/rc.local --每十秒同步一次10.1.1.1,放到/etc/rc.local里,开机自动运行 把邮件客户端软件claws-mail拷过去装好 ls /share/soft/soft/mail_client/ tar xvf /share/soft/soft/mail_client/claws-mail-3.5.0.tar.gz -C /usr/src/ tar xvf /share/soft/soft/mail_client/libetpan-0.57.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 例一:让smtp协议监听所有端口 vim /etc/mail/sendmail.mc DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl --把127.0.0.1改为0.0.0.0,或者是把中间那一小段去掉 保存退出 m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf --如果没有装m4.i386这个包,就需要使用m4命令去生成sendmail.cf配置文件,装了就不需要,重启sendmail服务自动生成 /etc/init.d/sendmail restart [root@li claws-mail-3.5.0]# netstat -ntl|grep 25 tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN [root@li claws-mail-3.5.0]# telnet 10.1.1.35 25 --对本机的IP(非回环地址)做smtp协议的测试是可以做的,如果只监听127.0.0.1,就不能这样用IP测试 Trying 10.1.1.35... Connected to li.cluster.com (10.1.1.35). Escape character is '^]'. 220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 13:47:01 +0800 helo li.cluster.com 250 li.cluster.com ................. 例二:用claws-mail收发邮件 用claws-mail 发送一封邮件给本机用户,能写,但点收信时会报连接到pop.cluster.com:110失败 原因检验: [root@li /]# nslookup pop.cluster.com --先查看DNS,能解析 Server: 10.1.1.35 Address: 10.1.1.35#53 Name: pop.cluster.com Address: 10.1.1.35 netstat -ntl |grep 110 --再查看端口,发现没有110端口,表示pop3协议没有配置 所以要去配置dovecot服务 [root@li /]# vim /etc/dovecot.conf protocols = imap imaps pop3 pop3s --在20行找到有一行注释,打开注释,或者写一行,表示支持pop3和imap协议 /etc/init.d/dovecot restart --重启服务后,就可以看到监听143和110端口打开了 [root@li /]# netstat -ntlup |grep 143 tcp 0 0 :::143 :::* LISTEN 21674/dovecot [root@li /]# netstat -ntlup |grep 110 tcp 0 0 :::110 :::* LISTEN 21674/dovecot 然后就可以收邮件了 例三:使用支持短域名来发送邮件 [root@li /]# mail -s '222' a@cluster.com --使用短域名 222222 . Cc: [root@li /]# tail /var/mail/a --查看时看不到,表示不支持短域名 [root@li /]# tail /var/mail/root --可以看到扔到root的邮箱去了 配置方法: [root@li /]# vim /etc/mail/local-host-names --写上下面两句 本服务器主机名 本服务器域名 /etc/init.d/sendmail reload 再用短域名发送并测试发现是可以成功的 例四:邮件别名,邮件转发,邮件群发 [root@li /]# vim /etc/aliases 加上 a: b --表示发送给a用户的邮件,发给了b用户,a用户自己收不到 c: d,e,f --表示发送c用户的邮件,发给了d,e,f三个用户,a用户自己收不到 salegroup: :include:/etc/mail/salegroup --还可以这样写,把一些用户分组,注意/etc/mail/salegroup是不存在的,要手动建立并把这个组的成员写进去,一行一个用户;测试时发给的用户名要写成salegroup,例如:mail -s '7777' salegroup@cluster.com /etc/init.d/sendmail reload 例五:邮件的虚拟账号,虚拟用户表格 [root@li /]# vim /etc/mail/virtusertable a@cluster.com b@cluster.com --把b@cluster.com的账号虚拟成a@cluster.com账号 @cluster.com c --所有发往cluster.com域的邮件都会发到本地的c用户的mailbox /etc/init.d/sendmail reload 例五:邮件中继 保持上面的配置不变的情况下,用另一台电脑做测试 [root@dns ~]# telnet 10.1.1.35 25 --另一台电脑测试35这台服务器上的smtp协议 Trying 10.1.1.35... Connected to 10.1.1.35 (10.1.1.35). Escape character is '^]'. 220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 15:39:36 +0800 helo dns.lu.com 250 li.cluster.com Hello [10.1.1.218], pleased to meet you mail from:sdfsa@baidu.com 250 2.1.0 sdfsa@baidu.com... Sender ok rcpt to:sfsadfa@qq.com 550 5.7.1 sfsadfa@qq.com... Relaying denied. --可以看到中继拒绝 [root@li /]# vim /etc/mail/access --默认是只允许127.0.0.1中继 Connect:10.1.1.218 OK --非常信任的主机可以用OK Connect:10.1.1 RELAY --表示允许10.1.1.0网段中继 FROM:sina.com REJECT --表示从sina.com来的邮件都拒绝 TO:baidu.com discard --到baidu.com的邮件丢弃 --reject和discard的区别,discard是直接丢弃,reject还要返回一个错误或者警告 我在这里加上了 Connect:10.1.1 RELAY /etc/init.d/sendmail reload 再用刚才的另一台电脑来测试(要是10.1.1.0网段,因为上面我只允许这个网段relay) [root@dns ~]# telnet 10.1.1.35 25 Trying 10.1.1.35... Connected to 10.1.1.35 (10.1.1.35). Escape character is '^]'. 220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 15:51:35 +0800 helo dns.lu.con 250 li.cluster.com Hello [10.1.1.218], pleased to meet you mail from:sfsafa@163.com 250 2.1.0 sfsafa@163.com... Sender ok rcpt to:sdfsadf@gmail.com 250 2.1.5 sdfsadf@gmail.com... Recipient ok --这次测试没有报relay deny的错误 ------------------------------------------------------------------- 使用smtp验证 yum install cyrus-sasl* vim /etc/mail/sendmail.mc --把下面三行注释打开 TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl /etc/init.d/sendmail restart /etc/init.d/dovecot restart /etc/init.d/saslauthd restart [root@li /]# telnet 10.1.1.35 25 Trying 10.1.1.35... Connected to li.cluster.com (10.1.1.35). Escape character is '^]'. 220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 16:42:54 +0800 ehlo li.cluster.com --注意这里是ehlo 不是 helo 250-li.cluster.com Hello li.cluster.com [10.1.1.35], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN --看到这里有login plain验证信息表示支持smtp验证 250-DELIVERBY 250 HELP 验证: [root@li /]# telnet 10.1.1.35 25 Trying 10.1.1.35... Connected to li.cluster.com (10.1.1.35). Escape character is '^]'. 220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 16:45:12 +0800 helo li.cluster.com 250 li.cluster.com Hello li.cluster.com [10.1.1.35], pleased to meet you mail from:fsfafa@baidu.com 250 2.1.0 fsfafa@baidu.com... Sender ok --这里没有要求验证 原因:是因为smtp验证默认只是在587端口,而不是25端口,所以你还是直接telnet 10.1.1.35 25 就避开了使用smtp验证 vim /etc/mail/sendmail.mc 把下面这句 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验证 /etc/init.d/sendmail restart [root@li /]# telnet 10.1.1.35 25 Trying 10.1.1.35... Connected to li.cluster.com (10.1.1.35). Escape character is '^]'. 220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 16:55:58 +0800 helo li.cluster.com 250 li.cluster.com Hello li.cluster.com [10.1.1.35], pleased to meet you mail from:sfsafsa@sina.com 530 5.7.0 Authentication required --现在就会看到需要验证 auth login --开始验证 334 VXNlcm5hbWU6 a --输入用户名,会报错,因为这里是用base64位编码 501 5.5.4 cannot decode AUTH parameter a auth login 334 VXNlcm5hbWU6 YQ== --这就是a的base64位编码 334 UGFzc3dvcmQ6 MTIz --这是123的base64位编码 235 2.0.0 OK Authenticated --验证成功,可以发送邮件了 mail from:sdfasfas@sina.com 250 2.1.0 sdfasfas@sina.com... Sender ok rcpt to:b@cluster.com 250 2.1.5 b@cluster.com... Recipient ok data 354 Enter mail, end with "." on a line by itself last test . 250 2.0.0 o4T8twFU025598 Message accepted for delivery quit 221 2.0.0 li.cluster.com closing connection Connection closed by foreign host. cat /var/mail/b 是可以看到发送的邮件 --------------- 用claws-mail来验证 点设置--目前账号的偏好设置--发送--把SMTP鉴权(SMTP AUTH)前面的勾打上--鉴权方式选PLAIN--用户ID和密码写上本机的一个普通名和其密码就OK 再发送信件等都是经过了SMTP验证的 ------------------- 下面是一个base64编码在线转换的一个网页 http://www.motobit.com/util/base64-decoder-encoder.asp
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐