JavaMail开发教程01开山篇
序
其实想写JavaMail这一系列的博客已经有一个月之久了,缘起是某次乱逛传智播客官网浏览到相关的视频教程,想起大学时代学过的计算机网络提到邮件相关的协议,但遗憾的是到目前为止还没有接触计算机网络编程,尤其搞Java EE开发之后,底层的网络细节都已经封装好了,并没有接触多少底层的细节,一直以来以为只要与网络协议相关的编程都是C/C++家族特有的功能。看了张孝祥老师的视频之后,发现C/C++能干的事,Java也能干出来,并且一下子就对邮件开发有点兴趣起来。当然看了视频之后还只是懵懵懂懂不能理解透彻,毕竟很有很多细节值得下去咀嚼。于是又买了张孝祥老师的《Java邮件开发详解》来,这才对JavaMail理解明朗起来。
在这感谢张孝祥老师,老师虽然已经辞世,但其技术书籍却普惠了后来人。本系列教程知识点提炼自张孝祥老师的JavaMail视频教程和《Java邮件开发详解》书籍,以及来自JavaMail官方的API文档,是对上诉系列文档的归纳、升华和总结。本系列博客适合刚学完了Java SE的初学者,和正在学习计算机网络编程的在校生,以及已经有工作经验的Java EE开发提供JavaMail方面的参考资料。
本系列博客教程内容大致分为:邮件协议相关协议讲解,JavaMail邮件的发送,电子邮件的组织结构,使用JavaMail生成复杂结构的电子邮件,邮件的接收和解析等。并最总能够向好友发送一封复杂邮件,这封邮件应该包含附件、超链接、HTML格式文本以及内嵌图片,并且邮件的抄送人,密送人也能够正常接收到邮件的内容。
基本概念
邮件服务器
电子邮件的系统抽象简单概括如下图:

从图中可以看出,电子邮件服务器主要有一下功能:
- 接收用户投递的邮件;
- 将用户投递进来的邮件转发给目标邮件服务器;
- 接收其他邮件服务器转发来的邮件,并把邮件存储到其他管理的用户邮箱中;
- 为前来读取邮件的用户提供读取服务。
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开山篇的更多相关文章
- Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录
一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...
- [051] 微信公众平台开发教程第22篇-怎样保证access_token长期有效
为了使第三方开发人员能够为用户提供很多其它更有价值的个性化服务,微信公众平台开放了很多接口,包含自己定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等,开发人员在调用这些接口时.都须要 ...
- EnjoyingSoft之Mule ESB开发教程第三篇:Mule message structure - Mule message结构
目录 1. 探索Mule Message结构 2. Mule Message的Payload 3. Mule Message的Property 4. Mule Message的Attachment 5 ...
- EnjoyingSoft之Mule ESB开发教程第四篇:Mule Expression Language - MEL表达式
目录 1. MEL的优势 2. MEL的使用场景 3. MEL的示例 4. MEL的上下文对象 5. MEL的Variable 6. MEL访问属性 7. MEL操作符 本篇主要介绍Mule表达式语言 ...
- EnjoyingSoft之Mule ESB开发教程第六篇:Data Transform - 数据转换
目录 1. 数据转换概念 2. 数据智能感知 - DataSense 3. 简单数据转换组件 3.1 Object to JSON 3.2 JSON to XML 3.3 JSON to Object ...
- [039] 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)
引言及内容概要 距离写上一篇文章<自定义菜单的创建及菜单事件响应>整整过了两个月的时间,那时公众平台还没有开放view类型的菜单.在不久前,微信公众平台悄悄开放了view类型的菜单,却没有 ...
- 谷歌浏览器web开发教程之开始篇:使用sublime
你的代码编辑器是主要的开发工具:你使用它去编辑和保存代码段.你可以通过学习编辑器快捷键和以及安装关键插件来好而快的写出代码. 目录 安装sublime文本编辑器 为什么使用包管理器? 安装插件 摘要 ...
- JNI/NDK开发指南(开山篇)
转载请注明出处:http://blog.csdn.net/xyang81/article/details/41759643 相信很多做过Java或Android开发的朋友经常会接触到JNI方面的技术, ...
- [033] 微信公众帐号开发教程第9篇-QQ表情的发送与接收(转)
我想大家对QQ表情一定不会陌生,一个个小头像极大丰富了聊天的乐趣,使得聊天不再是简单的文字叙述,还能够配上喜.怒.哀.乐等表达人物心情的小图片.本文重点要介绍的内容就是怎样在微信公众平台使用QQ表情, ...
随机推荐
- 【luogu P1186】玛丽卡
https://www.luogu.org/problem/show?pid=1186 考虑暴力,枚举图上每一条边删去后跑Dijkstra,取M次的最大值. 仔细想想就会发现删除最短路以外的边对最短路 ...
- 来自Ext的UI边界识别函数constrain
//constrain函数 var min = 1 var max = 3; var num = 4; var result = Math.min(Math.max(num,min),max); co ...
- SSIS中循环遍历组件[Foreach Loop Container]
背景 每月给业务部门提取数据,每个分公司都要提取一般,先跑SQL,再粘贴到Excel中,然后发邮件给相关的人员.费时费力,还容易粘贴错位.因此,需要通过一个程序完成这些步骤.我首先想到的是通过SSIS ...
- POJ 2127 最长公共上升子序列
动态规划法: #include <iostream> #include <cstdio> #include <fstream> #include <algor ...
- Delphi语言怎样对自己定义类进行持久化保存及恢复 (性能远比json/xml高)
Delphi的RTL自身就带有一套非常好的资源持久化保存(IDE设计窗口时,保存为DFM格式及编译到EXE里面的资源文件)及恢复机制(EXE启动时对窗口资源的载入),那么应不是必需再额外用xml/js ...
- Android查缺补漏--Activity生命周期和启动模式
一.生命周期 onCreate():启动Activity时,首次创建Activity时回调. onRestart():再次启动Activity时回调. onStart():首次启动Activity时在 ...
- 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)
作者:陈希章 发表于 2017年6月25日 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Micro ...
- MyBatis_通过resultMap解决不一致的问题
- redis的hash类型
1.简单描述 hash是一个string类型的field和value的映射表.添加和删除操作都是O(1)(平均)的复杂度.hash类型特别适合用于存储对象.在field的数量在限制的范围内以及valu ...
- 《微软的软件测试之道》【PDF】下载
<微软的软件测试之道>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382291 内容简介 书的第三部分探讨某些我们工作中使用过的 ...