实现这个协议的软件太多,有sendmail,postfix等。不像snmp,基本上是net-snmp一统天下,

yum install nc  nc用来取代telnet

这里我们希望让大家知道网络协议中的一个经验:参数越多,死得越快;参数越少,越能持久。参数太多了,根本不利于使用,无法推广,早晚会被别的协议取代。这也符合科学的基础原理,简单。

postfix

[root@-monitor private]# ps -ef|grep
root Jan22 ? :: /usr/libexec/postfix/master
postfix Jan22 ? :: qmgr -l -t fifo -u
postfix : ? :: pickup -l -t fifo -u
postfix : ? :: cleanup -z -t unix -u
postfix : ? :: local -t unix
[root@-monitor postfix]# pwd
/var/spool/postfix
[root@-monitor postfix]# ls -R
.:
active bounce corrupt defer deferred flush hold incoming maildrop pid private public saved trace ./active: ./bounce: ./corrupt: ./defer: ./deferred: ./flush: ./hold: ./incoming: ./maildrop:
742462B31 DC2AE2B50 E63DD2B51 ECF2F2B52 ./pid:
master.pid unix.bounce unix.cleanup unix.local ./private:
anvil bounce defer discard error lmtp local proxymap proxywrite relay retry rewrite scache smtp tlsmgr trace verify virtual ./public:
cleanup flush pickup qmgr showq ./saved: ./trace:
[root@-monitor postfix]# vi /etc/postfix/master.cf
smtp inet n - n - - smtpd
#submission inet n - n - - smtpd
# -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
#smtps inet n - n - - smtpd
# -o smtpd_tls_wrappermode=yes
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
# inet n - n - - qmqpd
pickup fifo n - n pickup
cleanup unix n - n - cleanup
qmgr fifo n - n qmgr
#qmgr fifo n - n oqmgr
tlsmgr unix - - n ? tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - bounce
defer unix - - n - bounce
trace unix - - n - bounce
verify unix - - n - verify
flush unix n - n ? flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - proxymap
smtp unix - - n - - smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay unix - - n - - smtp
-o smtp_fallback_relay=
# -o smtp_helo_timeout= -o smtp_connect_timeout=
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error

mail客户端

Saved 1 message in mbox 在这里会发现,刚才读的邮件保存到~/mbox内了

Held 2 messages in /var/spool/mail/root 而用户root的邮箱内只有2封邮件了

smtp协议
SMTP也是个请求/响应协议,命令和响应都是基于ASCⅡ文本,并以CR和LF符结束。响应包括一个表示返回状态的三位数字代码。SMTP在TCP协议25号端口监听连续请求。
由于这个协议开始是基于纯ASCⅡ文本的,在二进制文件上处理得并不好。后来开发了用来编码二进制文件的标准,如MIME,以使其通过SMTP来传输。今天,大多数SMTP服务器都支持8位MIME扩展,它使二进制文件的传输变得几乎和纯文本一样简单。

圾邮件仍然是个重要的问题。原始的SMTP协议的局限之一在于它没有为发送方进行认证的功能。因此定义了SMTP-AUTH 扩展。由于SMTP
巨大安装基础的网络效应,广阔地修改SMTP或者完全替代它被认为是不现实的。Internet Mail 2000
就是这样一个为替换而做的建议。IRTF
的反垃圾邮件研究小组正在研究一些提供简单、灵活、轻量级的、可升级的源端认证的建议。最有可能被接受的建议是Sender Policy
Framework 协议。

SMTP协议的邮件路由过程
SMTP服务器基于域名服务DNS中计
划收件人的域名来路由电子邮件。SMTP服务器基于DNS中的MX记录来路由电子邮件,MX记录注册了域名和相关的SMTP中继主机,属于该域的电子邮件
都应向该主机发送。若SMTP服务器 mail.abc.com收到一封信要发到shuer@sh.abc.com,则执行以下过程:
(1)Sendmail 请求DNS给出主机sh.abc.com的CNAME 记录,如有,假若CNAME(别名记录)到shmail.abc.com,则再次请求shmail.abc.com的CNAME记录,直到没有为止。
(2)假定被CNAME到shmail.abc.com,然后sendmail请求@abc.com域的DNS给出shmail.abc.com的MX记录(邮件路由及记录),shmail MX 5 shmail.abc.com10 shmail2.abc.com。
(3)Sendmail组合请求DNS给出shmail.abc.com的A记录(主机名(或域名)对应的IP地址记录),即IP地址,若返回值为1.2.3.4(假设值)。
(4)Sendmail与1.2.3.4连接,传送这封给shuser@sh.abc.com的信到1.2.3.4 这台服务器的SMTP后台程序。

SMTP命令是发送于SMTP主机之间的ASCⅡ信息,可能使用到的命令如下表所示。

SMTP协议命令
命令
描述
DATA
开始信息写作
EXPN<string>
验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
HELO<domain>
向服务器标识用户身份,返回邮件服务器身份
HELP<command>
查询服务器支持什么命令,返回命令中的信息
MAIL FROM<host>
在主机上初始化一个邮件会话
NOOP
无操作,服务器应响应OK
QUIT
终止邮件会话
RCPT TO<user>
标识单个的邮件接收人;常在MAIL命令后面可有多个rcpt to:
RSET
重置会话,当前传输被取消
SAML FROM<host>
发送邮件到用户终端和邮箱
SEND FROM<host>
发送邮件到用户终端
SOML FROM<host>
发送邮件到用户终端或邮箱
TURN
接收端和发送端交换角色
VRFY<user>
用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令

ehlo是对helo的扩展,即extend helo,可以支持认证,即用户认证。

HELO是普通SMTP,不带身份验证也可以继续MAIL FROM下去,直到成功发送邮件,也就是可以伪造邮件啦!
EHLO是ESMTP,带有身份验证,所以没法伪造。

从远程发送到另一个远程也是可以的

[root@109-com1 log]# nc mail.sohu.com 25
220 zw_71_21 ESMTP ready
ehlo mail.sohu.com            表明自己需要身份验证
250-zw_71_21
250-AUTH PLAIN LOGIN
250 STARTTLS
auth login                    表明身份验证开始
334 VXNlcm5hbWU6            经过base64编码过的Username:
Y3JlYXRleXVhbg==            经过base64编码过的用户名
334 UGFzc3dvcmQ6            经过base64编码过的Password:
MmQ0NTY3ODkt                经过base64编码过的密码
235 2.0.0 OK
mail from:createyuan@sohu.com        声明邮件发送人
250 2.1.0 Ok
rcpt to:createyuan1@163.com        声明邮件接收人
250 2.1.5 Ok
data                            邮件开始
354 End data with <CR><LF>.<CR><LF>    下面是邮件头标识,与投递无关,服务器表明以点结束  在SMTP转发的邮件中包括信封和内容这两种东西。
subject:test mailfj                主题
from:createyuan@sohu.com        在邮件头中声明邮件来源,仅在outlook与foxmail中显示,与投递无关
to:createyuan1@163.com            这两个from与to无所谓,可以随便写

wo shi he da                      空一行,标识邮件头与内容
sfj
please delete it.    
.                              以点结束
250 2.0.0 Ok: queued as 256062628456
quit
221 2.0.0 Bye
[root@109-com1 log]#

从本地发送邮件到指定邮箱是可以的

[root@109-com1 log]# nc localhost 25
220 109-com1.localdomain ESMTP Postfix
helo localhost
250 109-com1.localdomain
ehlo localhost
250-109-com1.localdomain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:root@109-com1.localdomain
250 2.1.0 Ok
rcpt to:createyuan1@163.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
wwwwwwww
wweeeeeeeee
rrrrrrrrrrr
.
250 2.0.0 Ok: queued as 14C5A80612
quit
221 2.0.0 Bye
[root@109-com1 log]#

linux下发邮件

自架邮件服务器麻烦还容易被拦截,可以使用Linux下mail命令连接到第三方邮件服务器商的smtp服务器发送邮件。事先把发信人地址写入到/etc/mail.rc中才可以用mail去发邮件
#/bin/bash
mailaddr=createyuan1@126.com  发件人地址
smtpserver=smtp.126.com
user=createyuan1
passwd=*******
cat <<EOF >/etc/mail.rc
set from=$mailaddr
set smtp=$smtpserver
set smtp-auth=login
set smtp-auth-user=$user
set smtp-auth-password=$passwd
EOF

发送邮件:3种方式
    mail -v -s "主题" createyuan@sohu.com #Enter键后输入正文  收件人地址
    mail -v -s "主题" createyuan@sohu.com < file #file内容为正文  
    echo "正文"|mail -v -s "主题" createyuan@sohu.com #以重定向输入为正文

linux服务之smtp的更多相关文章

  1. 第11章 Linux服务管理

    1. 服务分类 (1)Linux的服务 ①Linux中绝大多数的服务都是独立的,直接运行于内存中.当用户访问时,该服务直接响应用户,其好处是服务访问响应速度快.但不利之处是系统中服务越多,消耗的资源越 ...

  2. 在 CentOS7 上将自定义的 jar 包注册为 linux 服务 service

    在 CentOS7 上将自定义的 jar 包注册为 linux 服务 service 1.在 /etc/rc.d/init.d/ 目录下创建一个名字和服务名完全相同的 shell 脚本文件 joyup ...

  3. linux笔记:linux服务管理

    linux服务的分类: 启动和自启动: 查询已经安装的服务: RPM包的默认安装路径: 独立服务的启动: 独立服务的自启动: 基于xinetd的服务的管理: xinetd服务的自启动: 源码包安装服务 ...

  4. Linux学习笔记(19) Linux服务管理

    1. 服务的分类 Linux服务可分为RPM包默认安装的服务和源码包安装的服务.前者可细分为独立的服务(直接作用于内存中)和基于xinetd服务.xinetd本身是独立的服务,其唯一的功能是管理其他服 ...

  5. [Linux]服务管理:rpm包, 源码包

    --------------------------------------------------------------------------------------------------- ...

  6. linux服务器之LVS、Nginx和HAProxy负载均衡器对比

    linux服务器之LVS.Nginx和HAProxy负载均衡器对比. LVS特点:  1.抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生:  2.稳定性.可靠性好,自身 ...

  7. 《如何将windows上的软件包或文件上传到linux服务上》

    昨天晚上朋友让我帮他简单的搭建个环境,他公司让他做款软件测试温度的,他自己搞的是嵌入式,在公司担任的是软件工程师,应届毕业生.也可能他们搞嵌入式的对这个linux系统不太熟,不会把windows上的软 ...

  8. linux服务端的网络编程

    常见的Linux服务端的开发模型有多进程.多线程和IO复用,即select.poll和epoll三种方式,其中现在广泛使用的IO模型主要epoll,关于该模型的性能相较于select和poll要好不少 ...

  9. Linux服务的管理

    1.Linux服务的介绍 系统服务 --某些服务的服务的对象是Linux系统本身,或者Linux系统系统用户,这类服务我们称为系统服务(System Service) 网络服务 --提供给网络中的其他 ...

随机推荐

  1. 简单学习:repo入门

    一:关于repo repo是Google开发的用于管理Android版本库的一个工具,repo并不是用于取代git,而是用Python对git进行了一定的封装,简化了对多个Git版本库的管理.对于re ...

  2. Interview---一道有趣的推理题

    题目描述: 一个岛上有100个人,他们的眼睛只有两种颜色,蓝色和红色.95个人是黑色,其余5人是红色. 他们有个宗教信仰,从不照镜子,所以他们自己不知道自己的眼睛的颜色.但是能看到其他人的眼睛. 他们 ...

  3. 20145210 《Java程序设计》第09周学习总结

    教材学习内容总结 第十六章 整合数据库 •JDBC(Java DataBase Connectivity) •JDBC是用于执行SQL的解决方案 •JDBC全名Java DataBase Connec ...

  4. HDU 3351

    http://acm.hdu.edu.cn/showproblem.php?pid=3351 乍一看很像经典的括号匹配问题,其实不然,因为操作并非增加括号,而是翻转括号 只需记录多余的左括号的数量即可 ...

  5. 【转】CSS3 transition规范的实际使用经验

    原文转自:http://blog.jobbole.com/56243/ 本篇文章主要讲述CSS3 transition规范和在不同浏览器之间的使用差异,关于具体解决方法或如何规避问题的意见可以参考另一 ...

  6. this的指向及应用

    this的指向: //this 指的是调用 当前方法 (函数) 的那个对象 function fn1(){ this; } //fn1(); this => window //obj.oncli ...

  7. Selenium Waits

    Selenium高级功能包含查找等待, Selenium的查找等待有两种方式, 隐式等待(Implicit Waits)和显示等待(Explicit Waits): 这里写下我对两者的理解, 1. 隐 ...

  8. BOOL布尔类型

    1.BOOL数据类型,是一种表示非真即假的数据类型,布尔类型的变量只有YES和NO两个值.YES表⽰示表达式结果为真,NO表示表达式结果为假. 2.在C语言中,认为非0即为真. 3.分⽀支语句中,经常 ...

  9. Threads Events QObjects

    Events and the event loop Being an event-driven toolkit, events and event delivery play a central ro ...

  10. 一步一步理解GB、GBDT、xgboost

    GBDT和xgboost在竞赛和工业界使用都非常频繁,能有效的应用到分类.回归.排序问题,虽然使用起来不难,但是要能完整的理解还是有一点麻烦的.本文尝试一步一步梳理GB.GBDT.xgboost,它们 ...