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. [codeforces126B]Password

    解题关键:KMP算法中NEXT数组的理解. #include<bits/stdc++.h> #define maxn 1000006 using namespace std; typede ...

  2. JPA entityManagerFactory配置详解

    以下是本人的一些理解 如有误的地方欢迎指出 谢谢! jpa.LocalContainerEntityManagerFactoryBean 与 hibernate的sessionFactory一样都实现 ...

  3. SQL查询语句 [1]

    一.使用字符串作为条件查询 在 Home/controller/UserController.class.php 下插入 <?php namespace Home\Controller; use ...

  4. Spring_02 注入类型值、利用引用注入类型值、spring表达式、与类相关的注解、与依赖注入相关的注解、注解扫描

    注意:注入基本类型值在本质上就是依赖注入,而且是利用的set方式进行的依赖注入 1 注入基本类型的值 <property name="基本类型的成员变量名" value=&q ...

  5. ruby 访问权限

    ##################### # 访问权限 ##################### class HeidSoft ##默认方法 def method1 ##### end prote ...

  6. ps和ai的一些认识

    ps主要是一个后期软件,它很大程度上不是一个创作型的软件,这是它的定位.我觉得李涛老师那句话说的很好,ps是对已有的素材进行加工的.这个已有的素材来源包括但不限于拍照.扫描.数绘板.下载的.如果说你想 ...

  7. BridgePattern(23种设计模式之一)

    生活中的一个例子 就拿汽车在路上行驶的来说.即有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶.这你会发现,对于交通工具(汽车)有不同的类型,然而它们所行驶的环境(路)也在 ...

  8. Excel课程学习第二课单元格格式设置

    今天要讲的是单元格格式的设置,字体字号的设置,边框设置,合并单元格之类的. 下面看看具体的内容: 1.使用单元格格式工具美化表格 1.1设置单元格格式的对话框在哪里? 下图中三个小箭头都能打开设置单元 ...

  9. SuperSocket1.6电子书离线版

    使用离线浏览器制作,格式为chm,本人不对电子书内容具有任何权利!简体中文,适用于.NET开发. 下载地址

  10. android studio 程序员有福了—从layout自动生成viewholder类

    狂点这里下载 超级牛逼的插件啊,比那些使用SparseArray的强太多了! 在android studio 1.0上测试,没有问题. 不说了直接说功能 Android Toolbox Plugin ...