结构图

目录

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

邮箱服务器一般都是由公司的网络工程师搭建完成,基本上与程序员没有关系。但是笔者还是亲自尝试,使用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. webkit 技术内幕 笔记 三

    浏览器内核及特性 在浏览器中,一个很重要的模块,是将页面转变成可视化的图像结果,这就是浏览器的内核,通常被称作渲染引擎.渲染:就是根据描述或者定义构建数学模型,通过模型生成图像的过程.浏览器的渲染引擎 ...

  2. bugku_web_变量1(CTF)

    这道题考察php全局变量GLOBALS的用法,同样是个php审计题. 看一下代码: flag In the variable ! <?php error_reporting(0); includ ...

  3. 牛客寒假6-F十字阵列

    链接:https://ac.nowcoder.com/acm/problem/201986来源:牛客网 题目描述 小 Q 新学会了一种魔法,可以对一个 N行M列 的网格上的敌人造成伤害 第 i 次使用 ...

  4. 在mac下初次使用pygame踩坑纪实(卡死)

    初次使用pygame实现绘图功能就踩坑 直接上代码 import pygame pygame.init() # 创建游戏的窗口 480 * 700screen = pygame.display.set ...

  5. 850. Dijkstra求最短路 II(堆优化模板)

    给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行 ...

  6. 用数学解赌博问题不稀奇,用赌博解数学问题才牛B

    有一个经典的概率问题:平均需要抛掷多少次硬币,才会首次出现连续的 n 个正面?它的答案是 2^(n+1) – 2 .取 n=2 的话,我们就有这样的结论:平均要抛掷 6 次硬币,才能得到两个连续的正面 ...

  7. Android_Activity的生命周期、跳转方式及参数传递、启动模式。

    Activity的生命周期: onCreat ,onStart,onResume,onPause,onRestart,onStop,onDestroy Activity之间的跳转分为显式跳转和隐式跳转 ...

  8. Codeforces Round #619 (Div. 2) A~D题解

    最近网课也开始了,牛客上一堆比赛题目也没补,所以就D题后面的也懒得补了 A.Three String 水题 #include <cstdio> #include <cstring&g ...

  9. H5 使用input标签上传图片给后台

    html代码: <div class="hpk-showimg"> <!-- 营业执照 --> <div class="idcardup&q ...

  10. Selenium3+python自动化009-iframe定位

    iframe 一.frame:HTML页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素: 二.操作Frame中的页面元素 定位元素: 1.id定位driver.switch_to.fr ...