本文旨在建立一个对邮件服务整个流程的初步理解:一个QQ邮箱用户编写一封邮件,发送给一个163邮箱用户,后者接收邮件并阅读,这其间都发生了些什么,都有哪些角色,各自发挥什么作用。 我要说话

从小文笔不好,讲述尽量做到简洁易懂吧。先上王道:

上图中可以看到5个角色:QQ邮箱用户、QQ邮件服务商、163邮件服务商、163邮件用户、邮件客户端。下面分析下这些角色的内部组成和功能。

1 邮件服务商

邮件服务商需要提供邮件发送、邮件存取两大类服务。

1.1 SMTP协议

SMTP协议是一种属于TCP/IP协议族的应用层协议,它使用由TCP提供的可靠的数据传输服务把邮件消息从发信人的邮件服务器传送到收信人的邮件服务器。 我要说话

如上图所示,邮件服务商实现SMTP协议一般需要分别实现客户端和服务端两个服务,当用户使用SMTP协议将邮件发送给邮件服务商时,用户需要访问SMTP Server,若是QQ邮箱用户发送给QQ邮箱用户,这事儿也就完了,但是当QQ邮箱用户发送给163邮箱用户的时候,咋办呢? 此时QQ邮箱服务商需要扮演像一个用户一样的SMTP Client的角色,将用户的邮件内容通过SMTP协议发送给163邮件服务商的SMTP Server。

上图中可以看到,QQ邮箱用户发送邮件的时候,邮件是发给SMTP Server了的。

1.2 IMAP/POP3协议

上一小节提到的SMTP协议负责邮件的发送,那么邮件存取方面的业务咋搞呢?此时就要用到IMAP/POP3协议,这两个协议定义了用户像服务商查询、分组、移动、编辑等方面的操作规范。 我要说话

因此,邮件服务商还需要实现一个IMAP协议的服务器,或者POP3协议的服务器,或者IMAP+POP3。 我要说话

IMAP和POP3有啥区别呢?POP3是比较老的协议,而IMAP稍微新一点(距离现在也很久了…)。 他们之间的区别摘录163邮箱帮助文档中的一段说明。

1.3 IMAP与POP3的区别

POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。

而IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

同时,IMAP像POP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。此外,IMAP 更好地支持了从多个不同设备中随时访问新邮件。

上图中可以看到163邮箱用户读取邮件时,是向163服务商的IMAP/POP3 Server读取的。

总之,IMAP 整体上为用户带来更为便捷和可靠的体验。POP3 更易丢失邮件或多次下载相同的邮件,但 IMAP 通过邮件客户端与webmail 之间的双向同步功能很好地避免了这些问题。

2 邮件客户端

根据上面对邮件服务商各个协议实现的理解,那么邮件客户端要做的工作就一目了然了:实现SMTP客户端,发送邮件

实现IMAP与POP3协议,存取、管理邮件内容

邮件客户端提供的其他高级功能

我这里只是简单列举了一下邮件客户端基本的功能原理,实际上现在的邮件客户端功能都非常繁多和复杂,常用的邮件客户端有Outlook、Firefox等,现在手机上也有非常多的邮件客户端,它们都需要实现上面列举的基本功能~

3 使用163提供的SMTP协议接口发送邮件

邮件服务商实现的SMTP、IMAP、POP3服务都需要向外部提供协议接口,以供邮件客户端使用。

登录163邮箱,进入设置——POP3/SMTP/IMAP:

在163邮箱帮助文档里边可以看到服务的相关信息:

nodejs开源模块nodemailer可用于开发邮件SMTP客户端,代码如下:我要说话 const nodeMailer=require('nodemailer');

let smtpConfig = {

host: 'smtp.163.com',

port: 25,

secure: false,

auth: {

user: 'zouchengzhuo@163.com',

pass: 'your password'

}

};

let transporter = nodeMailer.createTransport(smtpConfig);

var mailOptions ={

from:'zoucz',

to:'zoucz<405966530@qq.com>',

subject:'测试SMTP发送邮件',

text: 'email text content',

html: '

Hello SMTP protocol

'

};

transporter.sendMail(mailOptions,function(error, info){

if(error){

return console.log(error);

}

console.log('Message sent: '+ info.response);

});

复制代码

运行之后,我的QQ邮箱就收到了一封来自于163邮箱的邮件!

End. 上面的内容只是为了扫盲粗浅了解,若有理解错误,烦请指出我来更正~

QQ邮箱服务器协议,理解邮件服务流程——SMTP、IMAP、POP3 协议相关推荐

  1. 使用qq邮箱服务器来实现laravel的邮件发送

    本文来自pilishen.com----原文链接; 欢迎作客我们的php&Laravel学习群:109256050 在我们的Laravel底层核心技术实战揭秘 视频中,我们带领大家使用了专业的 ...

  2. qq邮箱日历同步服务器,科技教程:qq邮箱客户端怎么使用exchange服务同步日历?...

    如今越来越多的小伙伴对于qq邮箱客户端怎么使用exchange服务同步日历?这方面的问题开始感兴趣,看似平静的每一天,在每个人身上都在发生着各种各样的故事,因为大家现在都是想要了解到此类的信息,那么既 ...

  3. java qq邮箱服务器端口_spring mail借助qq邮箱服务器发送邮件

    spring mail封装了javaMail的邮件服务,让邮件服务使用起来更简单,下面以qq邮箱服务器为例,用spring mail服务来发送邮件 配置qq邮箱,"设置"--&qu ...

  4. 注意:qq邮箱不要开通CardDAV/CalDAV服务

    注意:qq邮箱不要开通CardDAV/CalDAV服务, 因为一旦设置,登录第三方客户端时,就要在密码框请输入"授权码"进行验证, 很麻烦,每次都要用发短信验证! 发短信:配置邮件 ...

  5. java mail 接受QQ邮箱未读的邮件

    案例代码如下 //创建属性对象Properties p = new Properties();p.put("mail.imap.auth.login.disable", " ...

  6. qq邮箱服务器发信怎么配置,WordPress网站实现使用QQ邮箱作为SMTP发信服务器配置教程...

    一般WordPress网站都需要进行邮件发送,比如常见的找回密码.验证码等功能,我们经常会推荐使用SMTP发送邮件.今天小编就想跟大家讨论一下WordPress网站实现使用QQ邮箱作为SMTP发信服务 ...

  7. 通过Telnet连接QQ邮箱服务器发送电子邮件

    一.QQ邮箱设置独立密码,并且开启SMTP功能.获取授权码 二.使用Telnet登录QQ邮件服务器 #QQ邮件服务器地址 TCP25端口号 telnet smtp.qq.com 25 #客户端&quo ...

  8. QQ邮箱无法收到系统邮件的问题处理

    2019独角兽企业重金招聘Python工程师标准>>> 此问题在之后已经通过更换SMTPS协议465端口完美解决,方式请参考我的另一篇博文<阿里云ECS发送邮件时SMTP协议2 ...

  9. linux telnet qq邮箱,windows命令行下:telnet访问163邮箱服务器和qq邮箱服务器发送邮件...

    对163邮箱来说,它可以不使用ssl加密,访问服务器的25端口  但是对于qq邮箱服务器,得使用ssl访问587端口  另外邮箱设置一定要开启smtp服务 163: telnet smtp.163.c ...

  10. java qq邮箱服务器端口_[Java教程]javamail 利用qq邮箱做邮箱服务器,简单小demo

    [Java教程]javamail 利用qq邮箱做邮箱服务器,简单小demo 0 2016-07-12 10:00:10 首先maven:javax.mailmail1.4.1 用户名密码验证:1 pu ...

最新文章

  1. 代码改变世界_改变世界,一次只写一行代码
  2. 如何为WPF添加Main()函数
  3. python线程,进程,协程
  4. java bean 监听_事件监听器?将JavaBeans接通起来的方法
  5. 物理服务器备份系统,物理备份和逻辑备份区别
  6. visio对象放入word显示不全_办公人士必学visio技能 手把手教你使用visio绘制项目全景图!...
  7. hello, noip2017!
  8. poi导出excel日期格式问题
  9. vue+element ui 走马灯添加图片+图片自适应
  10. 【参考文献】支气管上皮细胞培养方法
  11. 增强现实中的光学透射式头盔显示器的标定初步
  12. C#异步执行方法的几种方式
  13. dell 2u服务器型号,DELL服务器规格参数
  14. html时间轴横向自动播放,利用jQuery实现日期时间轴自动播放代码
  15. VUE项目--Floor组件
  16. 解决XAMPP中无法勾选/无服务/modules无反应/Service灰框/无✓X/提供虚拟服务器
  17. tensorflow教程——tf.GraphKeys
  18. 【Java】工作流框架JBPM
  19. 浅谈几种网络攻击及攻防原理
  20. Http详解,2021年是做Android开发人员的绝佳时机

热门文章

  1. 【前端三剑客二】CSS手术刀剖析第一篇
  2. java获取本机外网ip
  3. 网络安全—DDoS攻防
  4. 计算机网络识别慢,win7系统开机后识别网络速度特别慢的解决方法
  5. startup_stm32xxxx.s文件问题
  6. quartus软件使用—error:top-level design entity “xxx” is undefined
  7. 使用人工智能加快海底数据处理-从粗略过滤到精细智能数据筛选
  8. JSP常用内置对象方法
  9. 实习周记----第三周
  10. 十五年学不会英语的原因