结构图

目录

邮件的知识体系由三部分组成,邮箱服务器,邮件程序,邮件协议。

邮箱服务器一般都是由公司的网络工程师搭建完成,基本上与程序员没有关系。但是笔者还是亲自尝试,使用Apache James搭建一个简单的邮箱服务器。

邮件程序指通过编程来完成发送邮件,接收邮件等相关功能,这里笔者介绍的是Java Mail,这也是本文的重点。当然并不是只有Java才能实现,其他编程语言也会有相应的功能。

Java Mail 的知识体系由以下三个部分组成:

  • 配置文件:配置文件包含一些重要的信息,其中连接邮箱服务器的相关配置是必须的,例如host邮箱服务器的地址,user邮箱账户,password账户密码,protocol邮箱服务器使用的协议,port邮箱服务器使用的端口号(默认为25)。还有一些常用的配置,如字符集,过期时间,是否打印详细的信息等等。
  • 核心对象:
  1. Provider类似于驱动,提供对特定协议的支持,例如Java Mail 支持SMTP,IMAP,POP3,GMail,其他协议类型的邮件无法发送。 要想发送其他邮件类型,需要使用特殊的Provider,需要下载特定的jar包。
  2. Session连接时创建一个会话,用户断开连接后,session对象会相应被销毁。
  3. Transport传输通道,用来发送邮件,可以在客户端与邮箱服务器之间传输邮件数据。
  4. URLName: 类似于URL,它表示邮箱文件的资源定位符,格式为protocol://username:password @ host/ folderName,其中password不是必需的。
  5. Address: 表示一个邮箱账户地址。它有三个属性,其中address表示邮箱账户,personal表示邮件的标题,charset 表示标题的字符集。Address有两种类型,InternetAddress和NewsAddress。InternetAddress主要用来表示普通邮件类型的账户。NewsAddress表示新闻邮件类型的账户。
  6. Message: 表示一封邮件。邮件有种类,信息,操作三个部分。

    Message是一个抽象类,MIMEMessage继承Message表示内容为MIME类型的邮件,如果内容为其他类型,需要实现自定义的类继承Message。

    邮件由Header和Content两部分组成,其中Header包含一些基本的信息,例如发送邮件的时间,邮件标题,邮件接收人等等。Content表示邮件的内容,它可以是字符串,也可以是一个MultiPart复杂类型,MimeMultiPart表示Mime类型的复杂类型。MultiPart可以包含一个或者多个Multipart,BodyPart。而一个BodyPart又可以包含一个或者多个Multipart,Bodypart。两者的关系类似于JSON中的JSONArray与JSONObject,可以互相嵌套。每一个BodyPart又由三部分组成,Attribute,Header,Content。其中Header和Content的含义大体相同。Attribute包含BodyPart的基本信息,例如size表示大小,description表示描述。

    操作有创建邮件,发送邮件,接收邮件,删除邮件,设置标签,监听邮件事件等等。其中发送邮件可以发送带附件的邮件,也可以对邮件的内容进行加密,转码等操作。

  7. Folder: 表示邮件的文件夹。文件夹有属性,状态,文件夹自身操作与文件夹下包含的邮件操作。文件夹有两种状态,关闭和打开,它是某些文件夹操作的前提,例如删除邮件只能在文件夹关闭的状态下才能进行。文件夹属性有名称,权限等信息。文件夹操作有新增,删除,重命名,移动,复制等操作。文件夹中的邮件操作有新增,拷贝,删除,get&set,搜索,标记等
  8. MailEvent表示邮件的事件。邮件的事件类型有六种,ConnectionEvent,表示连接相关的事件;FolderEvent,当创建,删除,重命名邮件文件夹时会触发此事件;MessageChangedEvent,表示邮件内容被改变,或者设置标签时会触发此事件;MesageCountEvent,当邮件数量改变时,会触发此事件,例如新增邮件,删除邮件;StoreEvent,没有理解;TransportEvent,邮件传输完成,或者是传输失败之后会触发此事件。
  • 功能:
  1. 配置文件:介绍配置文件内容各项的含义。

  2. 发送邮件:发送简单类型的邮件,发送内容带有图片,发送内容具有特定格式的邮件,发送带有附件的邮件。

  3. 接收邮件:获取邮件相关的信息,对邮件或邮件文件夹进行相关的操作。

  4. 监听邮件:处理邮件事件,例如当收到新邮件时发送提示消息,传输失败之后重新发送邮件等等。

邮件的功能不止以上四种,笔者随时用到会随时总结。

邮件协议通常指SMTP,IMAP,POP 3等协议,了解这些协议的概念和意义。对于邮件的开发来说,了解这些协议不是必须的。笔者目前并不了解这些协议,之后会补充。

参考资料

API:https://javamail.java.net/nonav/docs/api/

书籍:JavaMail API(O'REILLY),下载地址:http://freepdf-books.com/javamail-api/

Jar包下载地址(Maven):http://mvnrepository.com/artifact/javax.mail/javax.mail-api

初篇——目录(JavaMail)的更多相关文章

  1. 数据库程序接口——JDBC——初篇——目录

    目录 建立连接 核心对象 Driver DriverManager Connection DataSource 常用功能 第一个程序 C3P0数据源 DBCP数据源 事务之Spring事务 执行SQL ...

  2. 后端工具——Maven——初篇——目录

    目录 Maven的知识体系包括四个部分.Maven的配置文件,Maven命令,Maven生命周期,Maven插件.在介绍Maven之前,首先需要介绍如何安装Maven. 安装:介绍Maven在Linu ...

  3. JNI的使用总结初篇

    前言:以下内容是个人在写JNI Demo前后进行查找理解总结得出的一些结论,如有错误的地方希望路过的朋友能够指正. 一.JNI是Java native interface的简称,目前就我所知这类方法的 ...

  4. javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)

    引言: JavaMail 是一种可选的.能用于读取.编写和发送电子消息的包 JavaMail jar包下载地址:http://java.sun.com/products/javamail/downlo ...

  5. VB6.0编程笔记——(1)篇外篇&目录

    从计算机专业毕业到进入IT行业,说来也有些年头了.相比较而言算是幸运,也有很多的同学进入了其他行业,也有一些朋友又想进入这个行业.现在回想自己的一路历程,总结一下,也是一份记忆. 基于以上的原因,希望 ...

  6. Elastic Stack初篇-Logstash

     一.Logstash简介      Logstash是一个开源数据收集引擎,具有实时管道功能.Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地. 二.Log ...

  7. 与《YII框架》不得不说的故事—5篇目录

    与<YII框架>不得不说的故事—基础篇 第1章 课程目标 1-1 课程目标 (00:54) 第2章 课前知识准备 2-1 YII的启动和安装 (05:12) 2-2 YII请求处理流程 ( ...

  8. Mysql--开篇&目录

    Mysql 现在是互联网公司中使用得非常广泛的数据库产品了,开源.免费.小巧.易用等诸多特性奠定了其夯实的基础.自己从事 JavaWeb 也有一段时间了,工作中也是用的 Mysql,也会涉及到分析.慢 ...

  9. Go语言初篇

    Go语言初篇 目录 Go-开发环境 Go-语言基础 Go-标准库 Go-面向对象 Go-并发 Go-数据库 Go-web框架 Go语言开发文档:https://studygolang.com/pkgd ...

随机推荐

  1. gulp常用插件之gulp-imagemin使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-imagemin这是一款缩小PNG,JPEG,GIF和SVG图像的插件. 更多使用文档请点击访问gulp-imagemin工具官网. 安 ...

  2. Linux之docker搭建

    1.docker运行环境 CentOS7(64-bit),要求系统为64位,系统内核版本为3.10以上 查看系统版本:cat /etc/centos-release 查看系统内核版本:uname -a ...

  3. java集合框架备忘

    List,Set,Map三者的区别? List(对付顺序的好帮手): List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象 Set(注重独一无二的性质): 不允许重复的集合.不会有多 ...

  4. 安装CPULimit到Linux(源码)

    运行环境 适用系统:所有Linux系统 当前版本:无 硬件要求:无 安装过程 1.安装依赖 root@localhost:~# apt-get -y install git 2.从GitHUB中克隆源 ...

  5. 如何实现 List 集合的线程安全

    在实际项目开发中,List 集合较为常用,相比于数组,其提供了更多的方法,便于遍历.搜索.添加与移除.常见的有 ArrayList.Vector等.   关于ArrayList 中所周知,ArrayL ...

  6. Android_内部存储文件的读写

    内部存储文件即raw和assets项目文件夹下的文件,项目卸载时被删除. 四种文件操作模式 文件存储: public void save(String filename, String filecon ...

  7. PHPstorm主题、插件等相关推荐

    自己想升级PHPstorm,但是一直升级不了,捣腾一下午,终于它over掉了. 重新下载安装,发现应该把自己喜欢的插件.主题配色等记录一下. material theme UI主题插件 不知道为啥,看 ...

  8. Docker最全教程——从理论到实战(十六)

    前言 与其他语言相比,Go非常值得推荐和学习,真香!为什么?主要是可以直接编译成机器代码(性能优越,体积非常小,可达10来M,见实践教程图片)而且设计良好,上手门槛低.本篇主要侧重于讲解了Go语言的优 ...

  9. 为什么SSL证书要设有效期?

    1.首先是为了安全考虑,CA机构不能保证一个网站永远是合法的,因此它需要定期检查网站. 2.其次,以往CA证书都非常贵,签发证书的机构通过设置期限来收费,是一种商业途径. 3.最后,还有最重要的原因就 ...

  10. early-stopping的使用

    early-stopping的使用 待办 https://blog.csdn.net/qq_37430422/article/details/103638681 github对应类导入,直接放在项目更 ...