三个要点

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,邮件传输代理 
代为传递,Sendmail和Postfix就是扮演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 邮件服务搭建

    Linux 邮件服务搭建 邮件服务针对,在大型企业使用的比较多,一般小型企业都会买一些邮件服务,或者使用一些免费的邮件服务,达到我们使用的需求,并且不需要自己维护,下面我就来简单安装一下两个邮箱的案例 ...

  2. Linux邮件服务入门

    前言 想定期查询天气并提示我,很容易想到了创建定时任务然后给我自己发邮件,进而学习了linux如何发邮件,下面就开始吧. 开启邮件服务(Ubuntu) 首先执行mail命令看有没有安装,没有的话会提示 ...

  3. linux邮件服务

    linux本地常见邮件服务有: Centos5:默认使用sendmail邮件服务,开启方式/etc/init.d/sedmail start Centos6:默认使用postfix邮件服务,开启方式/ ...

  4. 教你如何架设linux邮件服务器postfix

    检查linux是否有安装postfix和dovecot 检查命令如下: Rpm  -qa |grep  postfix; Rpm –qa |grep dovecot; 如果没有显示任何数据,表明没有安 ...

  5. Linux 常用服务总结

    使用linux有一段时间了,把自己在身边经常听到,使用linux经常遇到的linux常见服务总结出来,这样遇到问题会有更多的解决问题的办法,听别人摆这些专业术语时,才不会不知所云. 服务: 1.NFS ...

  6. linux邮件服务器postfix配置实例

    linux邮件服务器postfix配置实例(超级详细!!!) 2013-03-13 13:30:21 标签:邮件服务器 linux 1. 系统安装:1)centos4.3 选上MAIL组件里的全部.2 ...

  7. <邮件服务postfix+mysql>MAIL第二篇

    环境:本服务是建立在第一篇的基础之上的,最好搭建好第一篇 玩此服务的前提是你的系统装好了msql和postfix服务. Postfix+mysql主要是把邮件服务的发与mysql结合使用.当然mysq ...

  8. Linux Postfix 服务

    Linux Postfix 服务 postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)开源软件.能够很好地兼容 Sendmail服务程序,可以方便 Sendm ...

  9. postfix 邮件服务的安装及详解

    该实验系统:cetnos 6.5 sendmail:性能好,设置复杂,适合老手 qmail:体积小260+k ,模块化.需要做二次开发,适合对邮件性能有要求的 postfix:前身是sendmail, ...

随机推荐

  1. hdu - 4990

    Read the program below carefully then answer the question.    #pragma comment(linker, "/STACK:1 ...

  2. NPOI导出Excel生成多个sheet

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  3. 使用git将本地文件提交到github存储库

    1.首先你要安装git https://git-for-windows.github.io/ 去官网自行下载对应版本 2.安装好git服务器后,找到你项目的文件夹,右键git bash here打开命 ...

  4. 自定义博客cnblogs样式的必备前端小知识——js、jq

    JQ.JS相关小知识 任意元素自动点击 $(".editicon").trigger('click') 添加子元素 append() - 在被选元素的结尾插入内容 prepend( ...

  5. electron教程(番外篇二): 使用TypeScript版本的electron, VSCode调试TypeScript, TS版本的ESLint

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...

  6. [洛谷P4178] Tree (点分治模板)

    题目略了吧,就是一棵树上有多少个点对之间的距离 \(\leq k\) \(n \leq 40000\) 算法 首先有一个 \(O(n^2)\) 的做法,枚举每一个点为起点,\(dfs\) 一遍可知其它 ...

  7. JS-09-数组

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. linux---> siege压力测试工具使用

    siege压力测试工具使用 安装 下载地址 : http://download.joedog.org/siege/ CaodeMacBook-Pro:local root# tar -xzvf sie ...

  9. vscode打开文件,中文显示乱码(已解决)

    之前使用vscode打开keil的文件后,发现显示乱码,网上查找资料发现大多是这种方法:将files.autoGuessEncoding改为true,但是并没有用. 发现第二种方法为:在vscode中 ...

  10. POI导出excel的三种方式

    原文链接:https://www.cnblogs.com/zhaoblog/p/7661245.html poi导出excel最常用的是第一种方式HSSFWorkbook,不过这种方式数据量大的话会产 ...