首页 > 编程语言 >【Java邮件开发】3.邮件协议总结与邮件服务器的工作原理

【Java邮件开发】3.邮件协议总结与邮件服务器的工作原理

时间:2023-03-19 11:00:44浏览次数:36  
标签:Java smtp 邮件 服务器 我们 输入 客户端


我们来对邮件协议进行总结,并探讨邮件服务器的工作原理



一、邮件协议剖析


1.指令过程描述


记得上一篇总结,我们手动敲指令发邮件的时候,登录smtp服务器的第一句话是:


ehlo emailtest3842

这是通知邮件服务器我们即将要登录。


在第一代通信协议当中(smtp的低版本),我们使用的是helo,后来smtp升级之后,


变成了第二代协议,为了区分第一代和第二代,新版的指令变为ehlo。



输入上面的信息之后,服务器一般会回复我们:


auth login plain

这就代表了smtp服务器要求我们进行权限验证(登录),选择登录方式是login还是plain。



接着我们输入:


auth login

代表我们使用login登录的方式进行授权。



然后smtp服务器让我们输入账号和密码:


base64 username
xxxxxx
base64 password
xxxxxx

我们的邮件服务器需要我们输入Base64加密之后的账号和密码。



下面我们输入:


mail from:<[email protected]>

表明发邮件的账号。



smtp服务器回复OK之类的信息。



下面我们输入:


rcpt to:<[email protected]>

表明收件人的账号。



smtp服务器回复OK之类的信息。



然后我们输入:


data

代表我们要编辑邮件的信息。



接下来我们编辑邮件内容(from和to等代表的信息,这里可以随便填写):


from:xxxx
to:xxxx
subject:xxxx
date:

content!!!

.


打点“.”之后就结束编辑邮件。



输入quit就推出smtp邮件服务器。




二、邮件服务器的工作原理


我们使用邮件客户端(如outlook),输入邮件smtp服务器信息和pop3服务器信息,


之后输入账号密码就可以进行邮件的收发了。此时有一个问题,当我们从客户端


登录126的smtp服务器的时候,是需要输入账号密码的,但是sina向126的smtp服务器


发送请求和传递邮件的时候,是不需要sina输入账号密码的,这个时候126怎么知道


什么时候放开smtp服务器?



其实每个smtp服务器区别邮件客户端的请求和其它smtp请求的方法是,当接受到


ehlo请求的时候,只要判定一下后面跟着的用户名用DNS域名解析之后的ip是不是请求方


的ip即可,如果不是,那说明是邮件客户端的请求,就要求输入账号密码进行验证。


如果是,说明是邮件服务器的请求,就放行。



这里以新浪的Smtp处理服务器为例:


【Java邮件开发】3.邮件协议总结与邮件服务器的工作原理_dns


区别客户端和其它smtp服务器的方法就是上面说的DNS解析区分。



处理客户端的smtp服务器的ip绝对不能注册到DNS中。


题外话:DNS域名解析过程:

【Java邮件开发】3.邮件协议总结与邮件服务器的工作原理_smtp_02



标签:Java,smtp,邮件,服务器,我们,输入,客户端
From: https://blog.51cto.com/u_16012040/6131021

相关文章

  • java8新特性-引用流-reduce
    reduce操作用于对数据进行聚合,比如求和等。一、reduce(BinaryOperatoraccumulator) 例子:List<User>users=newArrayList<>();users.add(newUser("张三",30));u......
  • Nginx与Tomcat作为前端服务器的性能比较
    Nginx与Tomcat作为前端服务器的性能比较摘要最近总遇到使用tomcat还是使用nginx进行前端文件访问的争论想着出差周末在酒店,可以自己进行一下简单的测试.希望能够对......
  • 【JavaScript】DOM结构介绍和方法预览
    DOM1.DOM介绍DOM是DocumentObjectModel文档对象模型的缩写。根据W3CDOM规范,DOM是一种与浏览器,平台,语言无关的接口,使得你可以访问页面其他的标......
  • Java: The number of bits of an integer is solved
    /***版权所有2022涂聚文有限公司*许可信息查看:*描述:1-100累加值但要求跳过所有包含有3的数*公用类库公共所需要用的操作函数或方法**历史版本:JDK......
  • Java中的finally一定会被执行吗?
    肯定不是。首先,如果程序连try块都执行不到,那么finally块自然就不会执行到了。有两个场景:在执行try块之前直接return在执行try块之前制造一个错误只要进入try块,不管......
  • Java Web中端口被占的问题
    使用win+r打开命令行,输入下列代码查询被占用的端口netstat-ano|findstr8080 发现该端口被PID(进程ID)为20792的进程占用。打开任务管理器,点击详情信息,找到并结束该......
  • Java synchronized的实现原理
    通常在多线程执行的过程中,我们需要考虑一些线程安全的问题,而线程安全问题中最常用的解决策略之一就是“锁”。加锁的本质,就是为了解决在多线程场景中对于共享数据访问的......
  • 如何将Lync/Skype服务器KHI数据导入到SQL Server数据库
    介绍关键运行状况指标KHI(KeyHealthIndicators)是具有阈值的性能计数器,旨在揭示用户体验问题。通常,当我们看到Lync语音质量问题或性能问题(速度慢/掉线等)时,我们会查看性能......
  • java学习日记20230317-多态
    多态方法和对象爱过你具有多种形态,是面向对象的第三大特征,多态是建立在封装和继承的基础上;方法的重载体现多态方法的重写体现多态对象的多态一个对象的编译类型和......
  • java学习第一天
    java学习第一天第一个代码helloworld用cmd指令编译和运行Java文件Javac加Java文件名,编译javac编译文件会生成class文件Java运行class文件(无后缀)java程序运行机......