1.电子邮件

电子邮件是目前网络上使用最多的服务,电子邮件的应用越来越广泛
正常的通信往来
账号注册时,找回密码时等
一般发送的邮件主要可以分解成2大部分
一部分是发信人、接信人、主题等邮件标头
另外一部分是邮件内容,有可能带附件

邮件传输协议:

SMTP
简单邮件传输协议(SimpleMailTransferProtocol,SMTP)由RFC821定义,是一种TCP协议支持的提供可靠且有效电子邮件传输的应用层协议
SMTP服务器会中转消息给接收方SMTP服务器以便最终让用户经由POP或者IMAP获得邮件内容
POP
邮局协议(Post Office Protocol) ,目前的版本是3,故又称为POP3协议,是由RFC1939定义的
POP协议是允许电子邮件客户端下载服务器上的邮件的协议

IMAP
是更高级的用户接收邮件的协议,是由RFC2060定义的
IMAP全称是因特网消息访问协议(Internet Message Access Protocol),目前用的版本是4,故又称为IMAP4协议

MIME
多用途互联网邮件扩展类型(MultipurposeInternetMailExtensions),它不是邮件传输协议,但是对于传输的内容的消息、附件以及其他的内容定义了格式。可以理解成一个定义格式的标准。

2.JavaMail介绍

JavaMail是sun公司发布的,在Java程序中处理Email的API
JavaMail是开发人员在应用程序中实现邮件发送和接收功能的一套标准开发类库,支持常用的邮件协议,如SMTP、POP3、IMAP

所需Jar包

JavaMail目前没有被加在标准的JDK中,使用JavaMail必须另行下载,mail.jar
http://www.oracle.com/technetwork/java/javamail/javamail145-1904579.html
JAF框架,activation.jar
http://www.oracle.com/technetwork/java/javase/downloads/index-135046.html

JavaMail主要组件

Session
Session 类定义了一个基本邮件会话(session),是Java Mail API最高层入口类。所有其它类都是经由这个session 才得以生效
Message
定义邮件信息,比如内容、标题等,Message是抽象类,更常用的是javax.mail.internet.MimeMessage类
Address
用于设置邮件的发件人和收件人地址,常用的是其子类javax.mail.internet.InternetAddress
Authenticator
授权者类,以用户名、密码的方式访问邮件服务器
Transport
Transport类实现了发送邮件的协议(通常为SMTP)

发送邮件:

使用JavaMail发送普通邮件
设定所使用的Mail服务器和所使用的传输协议
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", smtphost);
props.put("mail.smtp.auth", "true");
创建新的Session服务
Session.getInstance(props, new Authenticator())
创建一个Message对象
New MimeMessage(session)
设定发、收件人地址,邮件标题、内容等
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("Hello JavaMail");
message.setText("Welcome to JavaMail");
使用Transport将邮件发出
Transport.send(message);

某些网站有电子期刊的功能,通常会使用HTML格式来表现丰富的内容
发送HTML格式内容的邮件与普通邮件的不同点为:
使用MimeBodyPart类的setContent方法设定邮件的MIME类型(text/plain或text/html)

new MimeBodyPart().setContent(          messageText,”text/html;charset=gb2312”);
new MimeMultipart().addBodyPart( mimeBodyPart);
message.setContent(mimeMultipart);

发送带附件的邮件

将邮件内容存入MimeBodyPart对象中
将附件文件存入另一个MimeBodyPart对象中
把两个MimeBodyPart对象添加到MimeMultipart对象中
合二为一地加入Message对象中送出

在C/S结构的程序里可以方便的增加附件
在B/S结构应用中需要实现文件上传功能

接收邮件:

使用JavaMail接收普通邮件
设定所使用的Mail服务器和所使用的传输协议
props.setProperty("mail.store.protocol", protocol);
props.setProperty("mail.pop3.host", pop3Server);
创建Session对象
Session session = Session.getDefaultInstance(props, null);
使用Session得到Store,并连接
Store store = session.getStore("pop3");
store.connect(pop3Server,username,password);
从Store中取得收件箱,并打开,获取邮件信息
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();

小结:

邮件传输的基本原理
邮件服务中常用的协议
SMTP协议
POP协议
IMAP协议
JavaMail进行邮件的收发
接收邮件
发送邮件

17.JavaMail的更多相关文章

  1. javaEE(17)_邮件原理与JavaMail开发

    一.Java邮件开发介绍 为什么要学习javamail开发 •现在很多WEB应用在开发时都需要集成邮件发送功能,例如: •给新注册的用户自动发送一封包含其注册信息的欢迎E-Mail. •给过生日的注册 ...

  2. Spring JavaMail发送邮件

    JavaMail的介绍 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.   虽然JavaMail是 ...

  3. 使用JavaMail发送邮件

    一.邮件的相关概念 邮件协议.主要包括: SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件 POP3协议:Post Office Prot ...

  4. JavaMail和James

      JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开发出类似于Micr ...

  5. JavaMail和James的秘密花园

    JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开发出类似于Micros ...

  6. web应用中使用JavaMail发送邮件

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  7. 使用JavaMail创建邮件发送邮件

    一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...

  8. (转载)JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件

    博客源地址:http://www.cnblogs.com/xdp-gacl/p/4220190.html 现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件 ...

  9. (转载)JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件

    博客源地址:http://www.cnblogs.com/xdp-gacl/p/4216311.html 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封 ...

随机推荐

  1. Template Method模式和Strategy模式有何异同

    Template Method模式和Strategy模式有何异同 博客分类: 设计模式 Java  Template Method模式很容易理解,就是由基类提供一个模板,将各子类中不变的行为提取到基类 ...

  2. 使用Eclipse的常见问题整理

    我在Eclipse里新建一个android工程的时候附带着产生了一个名字为appcompat_v7的工程,这个工程是干什么用的啊?为何我新建的工程都出错了,错误信息提示为: error: Error ...

  3. Swing简介

    ---------------siwuxie095                         Swing 简介:     Java Swing 是 Java Foundation Classes ...

  4. koa2 原生链接mysql

    1.安装mysql $ npm install mysql 2.代码示例: const mysql = require("mysql"); // mysql.Promise = g ...

  5. C++结构体的定义、初始化和引用

    定义: 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构. 声明一个结构体类型的形式是: struct Student{ //声明一个结构体类型Student in ...

  6. Tensorflow学习—— AdamOptimizer

    import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data #载入数据集mnist = inpu ...

  7. matlab rand(3,5)

    rand()函数在(0,1)上创建均匀分布的随机数的数组 >> rand(3,5) ans = 0.8147 0.9134 0.2785 0.9649 0.9572 0.9058 0.63 ...

  8. Linux 大页面使用与实现简介(转)

    引言 随着计算需求规模的不断增大,应用程序对内存的需求也越来越大.为了实现虚拟内存管理机制,操作系统对内存实行分页管理.自内存“分页机制”提出之始,内存页面的默认大小便被设置为 4096 字节(4KB ...

  9. 算法Sedgewick第四版-第1章基础-025-用队列实现unix下的Directory命令

    package algorithms.util; /************************************************************************** ...

  10. Luogu 4281 [AHOI2008]紧急集合 / 聚会

    BZOJ 1832 写起来很放松的题. 首先发现三个点在树上一共只有$3$种形态,大概长这样: 这种情况下显然走到三个点的$lca$最优. 这种情况下走到中间那个点最优. 这种情况下走到$2$最优. ...