三个要点

1.smtp协议
2.搭建本地邮件服务器
3.使用外部邮件服务器 实现邮件功能



1.smtp协议 
         SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
         SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。 

  增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
        SMTP 在 TCP 协议 25 端口监听连接请求。

      此外还有两个协议需要了解IMAP协议、POP3协议
      简单地说,SMTP管‘发’, POP3/IMAP管‘收’。
IMAP协议

IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。
        它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作


  POP3协议

POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

实例:

网易YEAH 邮箱相关服务器信息:

 邮件服务器名称 服务器地址  端口号
  POP3服务器 pop.yeah.net  110
 SMTP服务器 smtp.yeah.net  25
 IMAP服务器 imap.yeah.net  143

下面使用telnet 演示一下 smtp 交互过程
$telnet smtp.163. com 25                      发送连接
       220 163.com Anti-spam GT for Coremail System (163com[20141201])     回应220 服务就绪
helo 66                                                  HELO命令标记自己的身份   
250 OK                                           回应250 请求邮件动作正确,完成

auth login                                               登陆验证
      334 dXNlcm5hbWU6                    要求输入username:
这里输入USERbase64加密后的用户名
      334 UGFzc3dvcmQ6                    要求输入Password:
这里输入PASSbase64加密后的密码
      235 Authentication successful             回应235 :认证通过

MAILFROM:XXX@163 .COM          表示发送者的邮件地址

250 Mail OK

RCPTTO:XXX@163 .COM              标识接收者的邮件地址

250 Mail OK

DATA

354 End data with                            邮件的数据

  .                                                       以一个"."开始的行作为数据部分的结束标识

2.搭建本地邮件服务器
      首先还是三个概念
        Internet的邮件系统是通过几个复杂的部分连接而成的,对于最终用户而言,我们熟悉的Outlook,Foxmai,linux下的mail、mailx、nail  等都是用来收信和发信的,称之为MUA:Mail User Agent,邮件用户代理        
        MUA并非直接将邮件发送至收件人手中,而是通过MTA:Mail Transfer Agent,邮件传输代理代为传递,SendmailPostfix就是扮演MTA的角色。        
        一封邮件从MUA发出后,可能通过一个或多个MTA传递,最终到达MDA:Mail Delivery Agent,邮件投递代理,邮件到达MDA后,就存放在某个文件或特殊的数据库里,我们将这个长期保存邮件的地方称之为邮箱。

结合第一部分所讲内容,一封信件发送时从  MUA到MTA,以及MTA到MTA之间使用的协议就是SMTP协议,而收邮件时,MUA到MDA之间使用的协议最常用的是POP3或IMAP
                  发件人:MUA --发送--> MTA -> 若干个MTA... -> MTA -> MDA <--收取-- MUA:收件人

所以我们搭建本地邮件服务器  要提供 邮件传输代理 和 邮件投递代理 两个服务
          目前比较主流的搭配是Sendmail + Dovecot 来提供这两个服务   
  不过,sendmail的配置十分复杂,因此,也有人使用另外的一些工具,如qmail、postfix等等。 例如使用Postfix + Dovecot

这里主要讲下Sendmail + Dovecot,

2.1     配置域名和网络
          公网ip为1.1.1.1   域名为  yunwei521.top    在dns服务商处添加此解析
           主机记录@   记录类型 MX    记录值 1.1.1.1   这样就可以提供 例如 xxx@yunwei521.top 的邮箱服务。

如果只是想在内网做一个测试,要先创建一台dns服务器(192.168.1.1),并添加解析 将域名解析到192.168.1.2我们要 创建的邮件服务器 。

2.2 安装软件

安装邮件服务器
# yum install sendmail sendmail-cf
    安装pop3/imap服务
# yum install dovecot
      安装用户认证
# yum install cyrus-sasl
# yum install cyrus-sasl-md5
# yum install cyrus-sasl-plain
# yum install cyrus-sasl-lib

打开防火墙25(smtp)、143(imap)端口,关闭SELINUX

2.3软件配置
   配置sendmail

进入/etc/mail
# cd /etc/mail

3.1 配置access
# vi /etc/mail/access
通常情况下,Sendmail不会为邮件服务Relay信息,这样可以防止一些有恶意的人利用别人的邮件服务器乱发邮件,所以,access保持默认配置即可
内容如下
Connect:localhost.localdomain           RELAY
Connect:localhost                       RELAY
Connect:127.0.0.1                       RELAY
当然也可针对某段IP或某个IP做修改,如要禁止某个ip发信,则可添加
    192.168.0.2   deny
保存文件后运行下面命令进行编译
    # makemap hash access.db < access

3.2 配置TLS(支持加密连接LLS)
首先生成sendmail.pem文件
# cd /etc/pki/tls/certs
# make sendmail.pem
Country Name (2 letter code) [GB]:ch   
State or Province Name (full name) [Berkshire]:sh
Locality Name (eg, city) [Newbury]:sh
Organization Name (eg, company) [My Company Ltd]:test.
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname)[]:server110.com
E-mail Address []:test@server110.com

3.3 配置sendmail.mc
# vi /etc/mail/sendmail.mc
添加:
define(`confAUTH_OPTIONS', `A p y')dnl
define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl
define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl
define(`confSERVER_CERT', `/etc/pki/tls/certs/sendmail.pem')dnl
define(`confSERVER_KEY', `/etc/pki/tls/certs/sendmail.pem')dnl
如果有,则默认被dnl注释,删除前面的dnl注释即可
取消如下两行的注释(删除开头的dnl)
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
修改SMTP的监听IP为 0.0.0.0
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
不要改
dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea’)dnl
这句话!保持注释状态。
上面那句话,网上好多文章都说把Port=submission,改成Port=25,说是强制所有用户在25端口
上做认证。
我不知道sendmail以前的版本是怎么样设置smtp认证的。sendmail8.13不用这么设置,这句话
人家sendmail的意思是:取消注释后,一旦当25号端口被重定向或者被屏蔽,或者在25号端口
打不开的情况下,马上使用587备用端口给用户做认证。
本来人家sendmail就已经打开了25端口(Port=smtp了已经),你却在这里还Port=25,把备用
端口也改成25,这不是让sendmail的sm-client认
证进程和sendmail的主进程抢端口么….
生成配置(如果语法有错误是不能执行的)
# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

4、配置dovecot
# vi /etc/dovecot/dovecot.conf
找到
#protocols = imap pop3 lmtp
将之改为
protocols = imap pop3 lmtp
添加域名
# vi /etc/mail/local-host-names
添加域名如:server110.com //每个域名一行

5、配置cyrus sasl
vi /etc/sysconfig/saslauthd
将MECH=pam
改为
MECH=shadow

6、停止postfix
# service postfix stop

7、设置开机启动
# chkconfig sendmail on
# chkconfig dovecot on
# chkconfig saslauthd on

8、重启服务
# service sendmail restart
# service dovecot restart
# service saslauthd restart

9、测试SMTP验证
# useradd mailtest
# passwd mailtest //添加邮箱帐号
# vi /etc/passwd
修改bash为/sbin/nologin,这样添加的用户名就没有了shell,只能收发信而不能登录到服务器运行其他程序
测试
# saslauthd -v
看结果支不支持 pam或shadow
# testsaslauthd -u mailtest -p mailtest
如果显示0: OK “Success.”则表明saslauthd工作正常
查看sendmail队列:mailq
察看邮件系统的状态:mailstats
查看暂时存储邮件:ls -l /var/spool/mail |more
/*****************高级功能,可以不用配置
查看映射用户
# sasldblistusers2
运行 saslpasswd2 添加用户
# saslpasswd2 -u server110.com -c mailtest
# sasldblistusers2
# mailtest@server110.com: userPassword
删除用户
# saslpasswd2 -d mailtest@server110.com
注意:为什么没有设定foxmail中的smtp服务器需要验证,也可以发送E-mail?
要用OUTLOOK来测试,Foxmail似乎可以自动地进行smtp认证。OUTLOOK在smtp服务器验证失败后,有拒绝提示
工具->;帐户->;邮件->;属性->;服务器->;我的服务器要求身份验证(选上)->;设置->;(选择)登录方式->;帐户名:(用saslpasswd2建立的),密码(用saslpasswd2建立的)->;确定.
另外:接收邮件服务器的帐户名与密码应该是系统里的用户名与密码.
saslauthd -v 看结果支不支持 pam或shadow
smtp验证测试: testsaslauthd -u test -p 123456
sasldblistusers2 检查已经增加的smtp验证用户
saslpasswd2增加smtp验证用户:saslpasswd2 -u cencn.com -c test

/******************
10、验证Sendmail 的SMTP 认证功能
telnet localhost 25 后输入ehlo localhost 验证Sendmail 的SMTP 认证功能
 [root@localhost CentOS]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 localhost.localdomain ESMTP Sendmail 8.13.8/8.13.8; Thu, 6 Jan 2011 11:06:19 +0800
ehlo localhost
250-localhost.localdomain Hello localhost.localdomain [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5
250-DELIVERBY
250 HELP
quit
221 2.0.0 localhost.localdomain closing connection
Connection closed by foreign host.
telnet localhost 110
 [root@localhost CentOS]# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Dovecot ready.
quit
+OK Logging out
Connection closed by foreign host.

3.使用外部邮件服务器 实现邮件功能
bin/mail会默认使用本地sendmail发送邮件,这样要求本地的机器必须安装和启动Sendmail服务,配置非常麻烦,而且会带来不必要的资源占用。
        而通过修改配置文件可以使用外部SMTP服务器,可以达到不使用sendmail而用外部的smtp服务器发送邮件的目的。
关闭sendmial服务,修改mail的配置文件

/etc/mail.rc,增加一下类似N行,指定外部的smtp服务器地址、帐号密码等。
   # vi /etc/mail.rc
  set from=发件地址@qq.com
  set smtp=smtp.qq.com
  set smtp-auth-user=?????
  set smtp-auth-password=????
  set smtp-auth=login

然后通过命令来发送邮件

echo  hello word | mail -s " title" @qq.com

最后讲下mail命令的用法(新版本为mailx)
  1. Usage: mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] to-addr ...
  2. [-- sendmail-options ...]
  3. mail [-iInNv] -f [name]
  4. mail [-iInNv] [-u user]

使用mail命令发送邮件,有如下三种方式:

1、直接使用shell当编辑器

  1. mail -s "Hello from mzone.cc by shell" admin@mzone.cc
  2. hello,this is the content of mail.
  3. welcome to www.mzone.cc

第一行是输入的命令,-s表示邮件的主题,后面的admin@mzone.cc则是邮件的接收人,输入完这行命令后回车,会进入邮件正文的编写,我们可以输入任何文字,比如上面的两行。当邮件正文输入完成后,需要按CTRL+D结束输入,此时会提示你输入Cc地址,即邮件抄送地址,没有直接回车就完成了邮件的发送。

2、使用管道进行邮件发送

  1. echo "hello,this is the content of mail.welcome to www.mzone.cc" | mail -s "Hello from mzone.cc by pipe" admin@mzone.cc

使用管道直接敲入这行命令即可完成邮件的发送,其中echo后的是邮件正文。

3、使用文件进行邮件发送

  1. mail -s "Hello from mzone.cc by file" admin@mzone.cc < mail.txt

使用上面的命令后,我们就可以把mail.txt文件的内容作为邮件的内容发送给admin@mzone.cc了。

使用上述三种方式都可以给外部邮箱进行邮件发送,但因为前面2中都是直接在shell中敲入邮件内容,因此无法输入中文,即使我们使用粘贴的方式输入了中文,那么收到的邮件也是乱码的。但第3种方式,我们可以在window下编辑好邮件内容后,放到linux下,再进行发送,这样就可以正常发送中文了。不过目前邮件的中文标题暂时没有找到解决办法。

因为mail程序本身就是调用sendmail来进行邮件发送的,因此我们可以在mail命令中使用sendmail的参数进行配置,比如我想使用特定的发件人发送邮件,可以使用如下命令:

  1. mail -s "Hello from mzone.cc with sender" admin@mzone.cc -- -f user@mzone.cc<mail.txt

上面的命令中,我们使用了– -f user@mzone.cc这样的参数,这是sendmail的选项,其中-f表示邮件的发送人邮件地址。更多sendmail参数请查看这里http://www.courier-mta.org/sendmail.html,或者在shell中man sendmail进行帮助获取。

很多情况下,我们也需要使用邮件来发送附件,在linux下使用mail命令发送附件也很简单,不过首先需要安装uuencode软件包,这个程序是对二进制文件进行编码使其适合通过邮件进行发送,在CentOS上安装该软件包如下:

  1. yum install sharutils

安装完成后我们就可以来进行附件的发送了,使用如下命令:

  1. uuencode test.txt test | mail -s "hello,see the attachement" admin@mzone.cc<mail.txt

完成后就可以把text.txt文件作为邮件的附件发送出去了。uuencode有两个参数,第一个是要发送的文件,第二个是显示的文件名称。

这里我主要介绍的是在CentOS下使用mail发送电子邮件的一些使用方法,需要的要求是你的linux必须安装了sendmail并开启了,同时保证可以连接外网。另外,文章中提到的命令本人都经过亲自测试,保证完全可用,不过你需要将命令中的电子邮件地址换成自己的电子邮件地址。

Linux 邮件服务相关推荐

  1. Linux网络服务_邮件服务器-Redhat Enterprise 5.9

    Linux网络服务_邮件服务器-Redhat Enterprise 5.9 案例环境: 邮件服务器:mail.tarena.com192.168.1.100 邮件域:@tarena.com 邮件账号: ...

  2. Linux下巧妙使用邮件服务器之postfix(认证+web)

    简介 一. postfix邮件服务的安装 Red Hat Enterprise Linux 提供了sendmail和postfix两种STMP邮件服务软 件,让用户可以随意地选择其中一种!不过,默认情 ...

  3. Linux下架构安全邮件服务器之Sendmail

    简介 一  .E-mail  概述 Internet最基本的服务,也是最重要的服务之一,就是电子邮件 服务.据统计Internet上百分之三十以上的业务量是电子邮件,仅 次于WWW服务.与传统的邮政信 ...

  4. linux下重启邮件服务,Linux的postfix邮件服务

    一.postfix邮件服务 Postfix 是一种电子邮件服务器,postfix提供smtp协议用来投递邮件 默认端口25 /var/log/maillog    服务日志 mail root@wes ...

  5. 《Linux菜鸟入门2》空壳邮件服务

    ●空壳邮件 1.引入空壳邮件的意义 邮件服务器直接暴露在网络环境下安全性会大大降低,所以引入"空壳服务器"是为了保证真正服务器的安全,空壳服务器的功能就是将受到的邮件转发(双向的) ...

  6. Linux网络服务与shell脚本——Postfix邮件服务器搭建

    Postfix邮件系统 1.电子邮件系统基础 (1)邮件系统角色.邮件协议 ①邮件系统的角色 1)MTA(Mail Transfer Agent,邮件传输代理):邮件服务器软件 2)MUA(Mail ...

  7. Linux环境邮件服务报错:Couldn‘t connect to host, port: smtp.qq.com, 25; timeout -1;

    在Windows环境下邮件服务能够正常使用,但是在Linux环境下,邮件服务报错,无法发送邮件. 具体报错信息如下: com.sun.mail.util.MailConnectException: C ...

  8. Postfix邮件服务搭建

    最近发现邮件发送服务还是挺重要的.可能对于每天只有一百来封的邮件发送需求的个人博主来说,一个免费的邮箱提供的免费SMTP邮件发送服务就可以满足了,但是对于一些大型的网站.论坛和平台,每天的邮件发送量可 ...

  9. linux 邮件客户端 n1,N1:下一代开源邮件客户端

    N1 Open Source email client 当我们谈论到Linux中的邮件客户端,通常 Thunderbird.Geary 和 Evolution 就会出现在我们的脑海.作为对这些大咖们的 ...

最新文章

  1. android 47 service绑定
  2. 转:微软未公开的几个过程介绍及用法
  3. 运动检测(前景检测)之(二)混合高斯模型GMM
  4. python-用Map, Filter, Reduce代替For循环
  5. [Python]no encoding declared 错误解决方法
  6. 客户端与服务器端地址的区别
  7. ACM-ICPC 2018 徐州赛区网络预赛 I. query 树状数组
  8. python聚类分析案例_深度解读|如何构建用户分级体系实现精细化运营?附案例实操...
  9. 决策树-Cart算法二
  10. “无法为保留分区分配驱动器号”的解决
  11. 计算机桌面是快捷方式,我的电脑桌面上的图标都变成快捷方式了怎么处理?
  12. 计算机桌面壁纸在哪个文件夹,系统桌面背景在哪个文件夹
  13. 服务器2008系统安全狗,win2008 r2 服务器安全设置之安全狗设置图文教程
  14. java实现rabbitmq_RabbitMQ搭建(2)-Java简单实现
  15. python列表lambda表达式排序sort(key=lambda x:x[1])
  16. ViT/vit/VIT详解
  17. (数字通信)星座图 平均功率 峰值功率 峰均比 练习题;16-QAM 星座图 格雷编码
  18. SolidWorks2020绘制XT60PW-M模型
  19. RTB 广告投放流程详解
  20. 【Scratch二次开发】05-翻译国际化

热门文章

  1. 苹果显示itunes store无法连接服务器,ipad无法连接itunes store的图文解决办法
  2. 苹果6怎么显示itunes store无法连接服务器,iPhone6 plus无法连接iTunes Store的原因和解决教程...
  3. iOS AudioQueue实现音频的录制和播放(附Demo)
  4. dockerfile以alpine为基础镜像构建nginx镜像
  5. 最新运营级WiFi大师专业版源码
  6. html 导航栏设计,在网页中设计导航菜单的三个原则(附案例)
  7. 关于Web前端div中<p>等块状标签位置问题
  8. java中decrement,Java LongAdder decrement()用法及代碼示例
  9. WDS+MDT部署Windows7操作系统2—;导入启动映像和安装映像
  10. webrtc Native C++视频旋转/裁减/绿屏问题