JavaMail是API,是一个标准的Java扩展,它是J2EE的范畴,在J2EE开发过程中可能会需要用到这个API。在学习JavaMail之前,有必须要对现在的互联网的邮件协议进行有个大体的了解。
邮件协议
在Internet中,常用的邮件操作相关的协议有3个—SMTP、POP、IMAP。
简单邮件传输协议(simple mail transferprotocol,SMTP),这个协议是邮件服务器之间相互发送邮件的协议,也是客户端利用该协议向邮件服务器端发送邮件的协议。一般一个邮件首先会被传送到某一个邮件服务器,再被邮件服务器分发到一个或多个目标邮件服务器。
邮局协议第3版(postoffice protocol version 3,POP3),协议主要用于从邮件服务器检索以得到新的邮件,大量的客户机从邮件服务器接收邮件就是使用POP3协议。
因特网消息访问协议(internet messager accessprotocol,IMAP),该协议比POP3功能更加强大,它可在接收邮件时,把邮件保存在邮件服务器中,既可在服务器中保留邮件也可把邮件下载
安装与配置JavaMail
由于JavaMail是一个扩展的部分,要进行发送接收邮件,需要两个包:
一个是JavaMail,这个包含了对SMTP、POP3、IMAP提供了支持,封装了电子邮件功能中的邮件对象、发送功能、身份认证、接收等。当前最新的版本是1.5
一个是JAF(JavaBeans Activation Framework),主要用来描述和显示邮件中的相关内容的,当前最新的版本是1.1.1
具体所需要的包,可以在本文的附件中直接下载。
邮件发送与接收
JavaMail包中的类比较多,主要用到的有会话类、地址类、邮件类、邮件发送类、邮件接收类和邮件文件夹类这些常用的类。
会话类(Session),主要用来创建邮件对象、实现邮件对象中数据的封装并可指定邮件服务器认证的客户端属性。它表示程序与某一个邮件服务器即将建立通信,在建立的过程可以进行口令认证。
地址类(Address),这个地址类主要是表示邮件发送人和邮件接收人的地址,一般主要用的是InternetAddress。
邮件类(Message),邮件消息的主要类,它包含了邮件中的所有部分,继承自一个接口Part,一般在使用的过程中直接是利用它的子类MimeMessage
邮件发送类(Transport),一般是从一个会话中获取一个邮件发送类的实例,将已经写好的邮件利用SMTP协议发送到指定的邮件服务器,在发送的过程中,首先根据指定口令连接到邮件服务器,再发送邮件。
邮件接收类(Store),这个其实就是邮件服务器中的存储库,里面放着所有的邮件文件夹
邮件文件夹类(Folder),该文件夹就是消息的具体所在文件夹,默认的邮件均在INBOX文件中。
发送邮件
基本步骤:
1 利用Properties来设置Session,一般主要设置两个mail.smtp.host和mail.smtp.auth,第一个主要是设置邮件服务器名,第二个是设置口令true或者false
2 利用Session.getInstance(Properties)启动一个与邮件服务器的连接
3 根据获取的Session来传建一个消息Message
4 定义消息的发信人地址InternetAddress和消息的收信人地址。
5 设置消息发送的主题和内容
6 利用Message.saveChanges()来存储填写的邮件信息
7 根据Session.getTransport("smtp")获取邮件发送类
8 利用发送人的用户名和密码连接到指定的邮件服务器
9 将该消息发送
注意:发送消息最重要的是要正确的找到发送消息的邮件服务器名,至于收信人的邮箱无所谓,可以是任意正确的邮件,譬如发送人是163邮件,可以发送给搜狐邮箱,新浪邮箱,QQ邮箱。
示例代码:
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class JaveMailTest {
public static void main(String[] args) {
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");//必须 普通客户端
props.setProperty("mail.transport.protocol", "smtp");//必须选择协议
Session session = Session.getDefaultInstance(props);
session.setDebug(true);//设置debug模式 在控制台看到交互信息
Message msg = new MimeMessage(session); //建立一个要发送的信息
try {
msg.setSubject("第一个JavaMail例子");//设置主题
msg.setFrom(new InternetAddress("123@qq.com"));//发件人邮箱号
//下面是模拟发送带附件的邮件
//新建一个MimeMultipart对象用来存放多个BodyPart对象
Multipart mtp=new MimeMultipart();
//------设置信件文本内容------
//新建一个存放信件内容的BodyPart对象
BodyPart mdp=new MimeBodyPart();
//给BodyPart对象设置内容和格式/编码方式
mdp.setContent("hello","text/html;charset=gb2312");
//将含有信件内容的BodyPart加入到MimeMultipart对象中
mtp.addBodyPart(mdp);
//设置信件的附件(用本地机上的文件作为附件)
mdp=new MimeBodyPart();
FileDataSource fds=new FileDataSource("f:/PiOnecalBO.class");
DataHandler dh=new DataHandler(fds);
mdp.setFileName("PiOnecalBO.class");//可以和原文件名不一致
mdp.setDataHandler(dh);
mtp.addBodyPart(mdp);
//把mtp作为消息对象的内容
msg.setContent(mtp);
Transport transport = session.getTransport();//发送信息的工具
transport.connect("smtp.exmail.qq.com", 25, "123@qq.com", "123");//发件人邮箱号 和密码
transport.sendMessage(msg, new Address[] { new InternetAddress(
"321@qq.com") });//对方的地址
transport.close();
} catch (AddressException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
测试过程中出现错误:NoClassDefFoundError: com/sun/mail/util/LineInputStream
解决方案:http://mrhouzhibin.blog.163.com/blog/static/19459624120121921546959/
注意:
用QQ邮箱发邮件时,需要把发送邮箱设置下如下:
同时需要两个jar包:mail-1.4.3.jar和activation-1.1.jar
- 大小: 29.1 KB
分享到:
相关推荐
在这个主题“javaMail学习(七)——使用javaMail发复杂邮件”中,我们将深入探讨如何使用 JavaMail API 发送包含多种附件、HTML 内容和其他复杂元素的邮件。在提供的文件列表中,我们看到一系列名为 MailUtils 的类,...
JavaMail 是Java平台上的一个强大的邮件处理API,它允许开发者创建和管理邮件,无论是发送还是接收,都无需关心底层的传输协议。JavaMail API的设计是跨平台和协议无关的,这意味着它可以灵活地处理多种邮件服务协议...
### JavaMail技术详解 #### 一、JavaMail概述 JavaMail是Sun Microsystems(现已被Oracle收购)开发的一套用于处理电子邮件的API集合,其主要功能是提供一套平台无关且独立于具体邮件传输协议的编程接口,使Java...
JavaMail 是一个开源的 Java 库,用于处理电子邮件的发送、接收和其他相关操作。它提供了丰富的 API,使得开发者能够在 Java 应用程序中方便地实现邮件功能。在本文中,我们将深入探讨 JavaMail 的基本使用,包括...
2. **JavaMail学习PPT** PPT通常包含关于JavaMail的教程和演示,涵盖了基础知识如创建`Properties`对象以设置SMTP服务器信息,创建`Session`对象,构建`MimeMessage`对象来定义邮件内容,以及如何使用`Transport....
JavaMail 是一个强大的开源库,用于在Java应用程序中实现电子邮件的发送和接收功能。...通过研究这个项目,你可以学习到如何使用JavaMail API进行邮件通信,以及如何构建一个功能完善的邮件客户端。
JavaMail 是一个开源的Java库,它为Java程序员提供了处理电子邮件的...通过学习和使用这些资源,开发者可以熟练掌握如何使用JavaMail和JAF来实现复杂的邮件操作,例如发送带附件的邮件、处理邮件事件、读取IMAP邮箱等。
9. **源码分析**:张孝祥老师的视频源码可能会包含上述功能的实现,通过对源码的学习,我们可以更深入地理解 JavaMail 的内部工作原理和最佳实践。 10. **实战应用**:课程可能还会涵盖如何将 JavaMail 集成到实际...
首先,`JavaMail 开发手册.pdf` 提供了官方的详细文档,对于学习和理解 JavaMail 的使用至关重要。手册通常会涵盖以下内容: 1. **安装与配置**:介绍如何将 JavaMail 添加到项目中,包括 Maven 或 Gradle 的依赖...
在 JavaMail 1.6.0 的官方例子中,我们可以学习到以下几个关键知识点: 1. **MIME 处理**:JavaMail 支持 Multipurpose Internet Mail Extensions (MIME),这使得我们能够发送包含文本、图片、音频、视频等多种类型...
通过阅读提供的英文帮助文档,开发者可以深入理解如何利用这些工具进行邮件处理,并且可以学习到如何处理认证、SSL/TLS加密、多部分消息、邮件过滤等高级特性。对于Java开发者而言,熟悉并熟练运用JavaMail API是...
JavaMail 是一个开源库,用于在Java应用程序中处理电子邮件。...项目提供的`doc`文档、`lib`库文件和`demo`示例是学习和使用这个封装的关键资源。理解并实践这些内容,将帮助你有效地在Java应用程序中实现邮件功能。
2. **Demo 应用**:可能包含演示如何使用 JavaMail API 的示例代码,这些示例可以帮助开发者快速理解和学习如何使用 JavaMail 发送和接收邮件。 3. **文档**:如 `API 文档`(通常为 HTML 或 PDF 格式)提供了详细类...
版本1.4.3是JavaMail的一个历史版本,尽管现在可能有更新的版本,但这个版本仍具有学习和研究的价值。 JavaMail 的源码包含了用于实现邮件功能的核心类和接口,例如`Message`、`Session`、`Store`和`Transport`。...
1. **学习和研究**:查看源代码有助于学习JavaMail的内部工作机制,提高编程技能。 2. **调试和修复**:遇到问题时,可以直接查看源代码定位问题,甚至修改源代码以解决特定问题。 3. **扩展和定制**:开发者可以...
JavaMail 是一个开源的 Java API,它允许 Java 程序员通过 SMTP、POP3、IMAP 协议发送、接收和管理电子邮件。这个压缩包包含的资源可能是一系列的教程、示例代码以及相关的文档,旨在帮助学习者掌握如何在 Java 应用...
JavaMail 是一个开源的 Java 库,用于处理电子邮件通信。...JavaMail 1.5.2 版本的 JAR 包和源码文件,为开发者提供了实现邮件功能的工具和学习资料,无论你是新手还是经验丰富的开发者,都能从中受益。
这个资源包含的“javaMail1.4.3 API 文档和源代码”是开发者学习和使用 JavaMail 的宝贵材料。以下将详细介绍 JavaMail 1.4.3 版本中的核心概念、功能以及如何使用。 1. **JavaMail API**: - JavaMail API 提供了...
这个“javamail开发和学习”主题涵盖了许多关键知识点,特别是针对使用网易邮箱通过SMTP服务发送邮件的实践应用。 1. **JavaMail API**:JavaMail是Java平台上的一组API,它提供了与邮件服务器交互的能力,包括创建...
总之,这个实例是Java开发者学习和使用JavaMail API 的宝贵资源,它可以帮助你快速理解和实现电子邮件的发送功能。只需将JAR包导入项目,根据提供的代码示例进行适当修改,就能适应自己的邮件需求。