其实想写JavaMail这一系列的博客已经有一个月之久了,缘起是某次乱逛传智播客官网浏览到相关的视频教程,想起大学时代学过的计算机网络提到邮件相关的协议,但遗憾的是到目前为止还没有接触计算机网络编程,尤其搞Java EE开发之后,底层的网络细节都已经封装好了,并没有接触多少底层的细节,一直以来以为只要与网络协议相关的编程都是C/C++家族特有的功能。看了张孝祥老师的视频之后,发现C/C++能干的事,Java也能干出来,并且一下子就对邮件开发有点兴趣起来。当然看了视频之后还只是懵懵懂懂不能理解透彻,毕竟很有很多细节值得下去咀嚼。于是又买了张孝祥老师的《Java邮件开发详解》来,这才对JavaMail理解明朗起来。

在这感谢张孝祥老师,老师虽然已经辞世,但其技术书籍却普惠了后来人。本系列教程知识点提炼自张孝祥老师的JavaMail视频教程和《Java邮件开发详解》书籍,以及来自JavaMail官方的API文档,是对上诉系列文档的归纳、升华和总结。本系列博客适合刚学完了Java SE的初学者,和正在学习计算机网络编程的在校生,以及已经有工作经验的Java EE开发提供JavaMail方面的参考资料。

本系列博客教程内容大致分为:邮件协议相关协议讲解,JavaMail邮件的发送,电子邮件的组织结构,使用JavaMail生成复杂结构的电子邮件,邮件的接收和解析等。并最总能够向好友发送一封复杂邮件,这封邮件应该包含附件、超链接、HTML格式文本以及内嵌图片,并且邮件的抄送人,密送人也能够正常接收到邮件的内容。

基本概念

邮件服务器

电子邮件的系统抽象简单概括如下图:

从图中可以看出,电子邮件服务器主要有一下功能:

  1. 接收用户投递的邮件;
  2. 将用户投递进来的邮件转发给目标邮件服务器;
  3. 接收其他邮件服务器转发来的邮件,并把邮件存储到其他管理的用户邮箱中;
  4. 为前来读取邮件的用户提供读取服务。

SMTP协议

如果按照相见的传输方向分类,那么邮件协议大概分为两种:SMTP协议和POP3/IMAP协议。前者主要是推送邮件,后者主要是把邮件从服务器上拉到本地来。

SMTP的全称是Simple Mail Transfer Protocol,简单邮件传输协议,它定义了服务器与服务器之间,已经服务器与客户端之间的通信规则,常用端口号是25。

POP3协议

全程是Post Office Protocol,有据协议,它定义了客户端与服务器通信的规则,常用端口号110。

IMAP协议

它全称为Internet Message Access Protocol,Internet消息访问协议,它是对POP3协议的一中扩展,也是定义了邮件客户端与邮件服务器的通信规则。

用户代理

用户代理俗称就是邮件客户端,或者可以称为邮件阅读器。其作用是方便用户阅读、回复、转发、保存和撰写邮件报文。目前流行的邮件客户端有FoxMail,Outlook,Thunderbird等,由于博主操作系统用的是ubuntu,所以实验环境是建立在Thunderbird上的。

DNS

DNS与上诉协议在TCP/IP协议族中处于位置:应用层。DNS是域名解析系统,它的作用是将域名映射成ip地址,将域名转换为IP地址这一过程我们称之为域名解析,除此之外DNS还有域名反向解析的作用。

DNS的解析过程有点复杂,这里不打算详解介绍,DNS为什么要与邮件开发想关联起来?那是因为SMTP协议既与客户端通信,又与服务器通信,服务器判断发送过来的邮件是通过邮件客户端(用户代理)过来的还是某台SMTP服务器发送过来的,是通过判断其计算机名称是否是注册在DNS系统中的计算机名称。

如果你看到这里已经感觉云里雾里,或是嫌弃介绍的概念太过简单粗糙。别着急,下面的篇章将从实际动手为出发点,带你走近JavaMail开发的殿堂。

JavaMail开发教程01开山篇的更多相关文章

  1. Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录

    一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...

  2. [051] 微信公众平台开发教程第22篇-怎样保证access_token长期有效

    为了使第三方开发人员能够为用户提供很多其它更有价值的个性化服务,微信公众平台开放了很多接口,包含自己定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等,开发人员在调用这些接口时.都须要 ...

  3. EnjoyingSoft之Mule ESB开发教程第三篇:Mule message structure - Mule message结构

    目录 1. 探索Mule Message结构 2. Mule Message的Payload 3. Mule Message的Property 4. Mule Message的Attachment 5 ...

  4. EnjoyingSoft之Mule ESB开发教程第四篇:Mule Expression Language - MEL表达式

    目录 1. MEL的优势 2. MEL的使用场景 3. MEL的示例 4. MEL的上下文对象 5. MEL的Variable 6. MEL访问属性 7. MEL操作符 本篇主要介绍Mule表达式语言 ...

  5. EnjoyingSoft之Mule ESB开发教程第六篇:Data Transform - 数据转换

    目录 1. 数据转换概念 2. 数据智能感知 - DataSense 3. 简单数据转换组件 3.1 Object to JSON 3.2 JSON to XML 3.3 JSON to Object ...

  6. [039] 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)

    引言及内容概要 距离写上一篇文章<自定义菜单的创建及菜单事件响应>整整过了两个月的时间,那时公众平台还没有开放view类型的菜单.在不久前,微信公众平台悄悄开放了view类型的菜单,却没有 ...

  7. 谷歌浏览器web开发教程之开始篇:使用sublime

    你的代码编辑器是主要的开发工具:你使用它去编辑和保存代码段.你可以通过学习编辑器快捷键和以及安装关键插件来好而快的写出代码. 目录 安装sublime文本编辑器 为什么使用包管理器? 安装插件 摘要 ...

  8. JNI/NDK开发指南(开山篇)

    转载请注明出处:http://blog.csdn.net/xyang81/article/details/41759643 相信很多做过Java或Android开发的朋友经常会接触到JNI方面的技术, ...

  9. [033] 微信公众帐号开发教程第9篇-QQ表情的发送与接收(转)

    我想大家对QQ表情一定不会陌生,一个个小头像极大丰富了聊天的乐趣,使得聊天不再是简单的文字叙述,还能够配上喜.怒.哀.乐等表达人物心情的小图片.本文重点要介绍的内容就是怎样在微信公众平台使用QQ表情, ...

随机推荐

  1. underscore源码解析(一)

    留存root // Establish the root object, `window` (`self`) in the browser, `global` // on the server, or ...

  2. struts2摘抄

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互.struts使 ...

  3. java内存模型个人理解总结

    现阶段线程之间的通讯主要有两种:内存共享和消息传递,而且在java中是采用的内存共享.简单说下内存共享: 假设现在有a线程和b线程,在a和b线程之间的通讯是依靠a线程将相关数据刷新到共享内存,然后b线 ...

  4. poj - 1185 炮兵阵地 状压DP 解题报告

    炮兵阵地 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 21553   Accepted: 8363 Description ...

  5. SYSAUX表空间使用率高问题处理

    SYSAUX表空间做为SYSTEM表空间的辅助表空间,主要存放EM相关的内容以及表统计信息,AWR快照,审计信息等,而假设SYSAUX表空间在默认条件下你假设不做不论什么配置,随着时间的推移.会膨胀的 ...

  6. Oracle集合操作

    在Oracle中提供了三种类型的集合操作: 并(UNION).交(INTERSECT).差(MINUS) UNION:将多个查询的结果组合到一个查询结果之中,并去掉反复值 UNION ALL:将多个查 ...

  7. jQuery 插件 Magnify 开发简介(仿 Windows 照片查看器)

    前言 因为一些特殊的业务需求,经过一个多月的蛰伏及思考,我开发了这款 jQuery 图片查看器插件 Magnify,它实现了 Windows 照片查看器的所有功能,比如模态窗的拖拽.调整大小.最大化, ...

  8. CentOS 7 安装.NET Core 2.0

    一.添加dotnet产品Feed 在安装.NET Core之前,您需要注册Microsoft产品Feed. 这只需要做一次. 首先,注册Microsoft签名密钥,然后添加Microsoft产品Fee ...

  9. 增加tomcat的缓存

    起因是我做了一个批量压缩图片的功能,在服务器上跑这个功能的时候,发现服务器有警告.警告的内容大概如下.  XX....  to the cache because there was insuffic ...

  10. CS:APP3e 深入理解计算机系统_3e C Programming Lab实验

    queue.h: /* * Code for basic C skills diagnostic. * Developed for courses 15-213/18-213/15-513 by R. ...