请问基于javamail下载邮件 的邮件收发系统的设计与实现)老师要求一个题目这不就是一个题目吗还要什么样的题目呢?

通过 JavaMail 访问 Hotmail 邮箱
但事实上,JavaMail 只是定义了一组平台无关、独立于通讯协议的邮件程序框架,或者说是接口,它是作为 Java 的可选包存在的。因此可以这样说:JavaMail 并不关心所使用的协议,不管是 POP3、SMTP、IMAP 当然还有 Hotmail 用的 HTTP 协议。对于 JavaMail 的客户端而言也是这样的,下图就是一个最简单的 JavaMail 结构图,通过 Transport 进行邮件的发送,通过 Store 实现对邮件的收取,而不同协议的实现,JavaMail 里的概念叫做 Provider,只需要根据 JavaMail 定义的接口实现自己的 Provider 即可。为了实现通过 JavaMail 访问 Hotmail 邮箱,我们就需要架起 JavaMail 接口与 Hotmail 服务所提供的访问接口之间的桥梁。在这之前我们必须首先了解 Hotmail 所使用的接口协议。Hotmail 通过地址
http://services.msn.com/svcs/hotmail/httpmail.asp 提供基于 HTTP 协议的服务,它不同于我们通过浏览器访问
的这个地址,后面这个地址是提供给用户一个基于浏览器的访问界面以便对邮箱进行操作,你当然可以通过编写 HTTP 客户端程序来解析页面并获取邮件的信息,但是这样做不仅实现的复杂程度非常高,而且每次页面风格发生变化后程序都要做相应的调整,因此不具备通用性,显然是不可行的。而地址 http://services.msn.com/svcs/hotmail/httpmail.asp 则不同,它提供了固定的应用程序接口。当你使用浏览器访问该地址的时候,会弹出下面要求登录的窗体:
而当输入正确的用户名和口令后会再弹出一次或两次该提示窗口,但提示信息不同,操作完成后出现页面无法显示的错误,错误码是 405 (资源不允许)。因此该服务并不允许通过浏览器来访问。事实上 Hotmail 使用的是 WebDAV 来提供基于 HTTP 协议的应用编程接口,WebDAV(Web 分布式创作和版本控制)已经成为重要的 Web 通讯协议。WebDAV 所要解决的问题是:1. 改写保护:HTTP 1.1 无法确保客户端可以保护资源,并且可以在其他客户端同时编辑它们的情况下进行更改。 使用 WebDAV,可以通过多种方式来锁定资源,以便让其他客户端知道您对所讨论的资源感兴趣,或者防止其他客户端访问该资源。2. 资源管理:HTTP 只能直接访问单个资源。 WebDAV 提供一种更有效地组织数据的方法。 WebDAV 引入了可包含资源 的集合(类似于文件系统文件夹)概念。 通过 WebDAV 进行的资源管理包括如下功能:创建、移动、复制和删除集合,以及集合中的资源或文件。3. 文档属性:不同类型的数据具有唯一的属性,这有助于描述数据。 例如,在电子邮件中,这些属性可能是发件人的姓名和接收邮件的时间。 在协作文档中,这些属性可能是文档原始作者的姓名和最后一个编辑者的姓名。 因为人们使用的文档类型各不相同,所以可能的属性类型列表也变得无限大。 XML 是 WebDAV 所需的一种可扩展通讯工具。关于 WebDAV 的更多资料可以参阅本文最后的参考资料。相对于自行解析 Hotmail 的浏览器页面而言,基于特定协议 WebDAV 的接口使 Hotmail 邮件客户端程序的实现更加稳定和可靠。在了解了 JavaMail API 的基本接口以及 Hotmail 所提供接口的协议,本文的题目就变得非常具体了,就是如果编写基于 WebDAV 的 JavaMail Provider(JavaMail 提供者)并使用这个提供者来实现 Hotmail 邮件收发功能,但这题目太大而且已经超过了一篇文章所能叙述的范围,因此我们接下来将引入一个开放源码项目 JDAVMail,并详细介绍如何通过这个项目实现 Hotmail 邮件的收发功能。JDAVMail 是一个开放源码的 JavaMail 的提供者项目,可以通过它来访问基于 WebDAV 协议的邮件服务,有如 Hotmail 邮箱。你可以到
这个网址下载到最新版本的程序。JDAVMail 使用了 Jakarta 上的 commons httpclient 作为 HTTP 客户端组件与服务器进行通讯,同时使用了 jdom 进行 XML 数据的解析,另外由于 httpclient 项目用到了 commons logging 进行日记的输出,因此 commons-logging 也是必须的,这三个组件都可以在 JDAVMail 的压缩包中的 lib 目录中找到,压缩包中同时还包括已编译的 jar 文件以及所有的源码。
为了让大家对 JDAVMail 有个大概的认识,下面我们给出两段代码用于 Hotmail 邮件的收发:1.
邮件收取/*
* 文件名:HotmailDemo.java
* 创建时间:
* 创建者:liudong
package com.clickcom.
import java.util.D
import java.util.P
import javax.mail.F
import javax.mail.M
import javax.mail.S
import javax.mail.S
import javax.mail.T
import javax.mail.internet.InternetA
import javax.mail.internet.MimeM
* Hotmail 邮件的收发器
* @author liudong
public class HotmailDemo {
public static void main(String[] args) {
receive();
* 邮件接收
protected static void receive() {
Properties prop = new Properties();
Session ses = Session.getInstance(prop);
// 使用 JDAVMail Provider
Store store = ses.getStore("davmail");
// 无需指定服务器地址
store.connect(null, "
你的帐号","
if (store.isConnected()) {
Folder inbox = store.getFolder("INBOX");
if (inbox.exists()) {
inbox.open(Folder.READ_ONLY);
int nCount = inbox.getMessageCount();
System.out.println("Inbox contains " + nCount + " messages");
// 依次显示收件箱中的每封邮件
for(int i=1;i&=nCi++){
MimeMessage msg = (MimeMessage) inbox.getMessage(i);
System.out.println("Subject : " + msg.getSubject());
System.out.println("From : " + msg.getFrom()[0].toString());
System.out.println("Content type : " + msg.getContentType());
System.out.println(msg.getContent());
} catch (Exception ex) {
ex.printStackTrace();
}从上面这段代码我们发现除了
Store store = ses.getStore("davmail");这个语句,同时不需要指定服务器地址外,其他的都跟一个普通的 JavaMail 应用程序没有两样,也没有引入任何跟 JDAVMail 有关的类。没有指定服务器地址这个比较容易理解,因为 Hotmail 提供 HttpMail 服务的地址是固定的。事实上仅有 getStore 这个语句跟常规邮件客户端程序有点不同的是它使用 davmail 字符串作为参数,而我们在使用 JavaMail 连接 POP3 服务器的时候指定参数值为 pop3。怎么回事呢?因为 JavaMail 是通过协议名来加载 Provider 类的。打开 JDAVMail.0.9.006.jar 这个 jar 文件就会发现在 META-INF 目录下有一个文件 javamail.providers,该文件内容如下:
protocol= type= class=com.posisoft.jdavmail.JDAVMailS
vendor=Positive S
protocol=davmail_ type= class=com.posisoft.jdavmail.JDAVMailT
vendor=Positive S因此当我们指定协议名为 davmail 时,JavaMail 就会自动加载 com.posisoft.jdavmail.JDAVMailStore 类进行处理,因此通过传入 davmail 字符串所得到的 store 实例实际上是类 com.posisoft.jdavmail.JDAVMailStore 的一个实例,这样我想大家应该了解了前面这段程序的工作原理。我们再来看 JDAVMail 发送邮件的代码片段:/**
* 邮件发送
protected static void send() {
Properties prop = new Properties();
// 邮件发送者地址
prop.setProperty("mail.davmail.from","");
Session ses = Session.getInstance(prop);
// 获得 JDAVMail 的邮件发送实例
Transport transport = ses.getTransport("davmail_xmit");
// 连接到 Hotmail 服务器,请替换为自己的用户名和口令
transport.connect(null, "
// 准备要发送的邮件
MimeMessage txMsg = new MimeMessage(ses);
txMsg.setSubject("This is the subject");
// 邮件发送者地址
InternetAddress addrFrom = new InternetAddress("");
txMsg.setFrom(addrFrom);
// 邮件接收者地址
InternetAddress addrTo = new InternetAddress("", "cdef");
txMsg.addRecipient(Message.RecipientType.TO, addrTo);
// 邮件内容
txMsg.setText("Hello world !");
txMsg.setSentDate(new Date());
// 发送邮件
transport.sendMessage(txMsg, txMsg.getAllRecipients());
} catch (Exception ex) {
ex.printStackTrace();
}同样这段代码使用了 davmail_xmit 协议来获取 JDAVMail 的邮件发送实例,通过前面提到的 javamail.providers 文件不难知道 JDAVMail 使用类 com.posisoft.jdavmail.JDAVMailTransport 进行邮件的发送处理。在实际测试中发现不管是 JDAVMail 还是其他的邮件工具,使用 Hotmail 进行邮件的发送速度比较慢,差不多有几分钟后才能收到相应的信息,因此如果测试中发现该问题请耐心等待。我想通过本文介绍如何利用 JDAVMail 收发 Hotmail 邮件,以及研究 JDAVMail 的源码,不仅可以更加深入了解 JavaMail 的体系结构,对编写 JavaMail Provider 也有更加具体的参照。另外希望为正困挠于如何在 Java 程序中访问 Hotmail 邮件的朋友们排忧解难。同时也非常欢迎通过我的网站
跟我交流在使用中遇到的问题。
相关主题JDAVMail 网站
关于 WebDAV 更详细的资料
无中文困挠的使用 JavaMail 收取邮件
使用 JavaMail 的邮件发送组件
添加或订阅评论,请先或。
有新评论时提醒我
static.content.url=http://www.ibm.com/developerworks/js/artrating/SITE_ID=10Zone=Java technologyArticleID=23212ArticleTitle=通过 JavaMail 访问 Hotmail 邮箱publish-date=基于javamail 的邮件收发系统的设计与实现 请问这个题目实用吗?值得做毕业设计吗_百度知道
基于javamail 的邮件收发系统的设计与实现 请问这个题目实用吗?值得做毕业设计吗
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
采纳数:242
获赞数:243
这个可以,不过还是要根据具体的要求为佳,然后给老师确定下。只要功能那些合适就没问题的。
说说具体诉求,看看能否针对性的给你解答的呢
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。java中javamail收发邮件实现方法
转载 &更新时间:日 14:20:46 & 作者:Victor Zhang
这篇文章主要为大家详细介绍了java中javamail收发邮件实现方法,实例分析了javamail的使用方法与相关注意事项,非常具有实用价值,感兴趣的小伙伴们可以参考一下
1、邮件相关的标准
厂商所提供的 JavaMail 服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括:
SMTP(Simple Mail Transfer Protocol) :即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
POP3(Post Office Protocol – Version 3) :即邮局协议版本 3 ,用于接收电子邮件的标准协议。
IMAP(Internet Mail Access Protocol) :即 Internet 邮件访问协议。是 POP3 的替代协议。
这三种协议都有对应 SSL 加密传输的协议,分别是 SMTPS , POP3S 和 IMAPS 。
MIME(Multipurpose Internet Mail Extensions) :即多用途因特网邮件扩展标准。它不是邮件传输协议。但对传输内容的消息、附件及其它的内容定义了格式。
2、JavaMail 简介
JavaMail 是由 Sun 发布的用来处理 email 的 API 。它并没有包含在 Java SE 中,而是作为 Java EE 的一部分。
mail.jar :此 JAR 文件包含 JavaMail API 和 Sun 提供的 SMTP 、 IMAP 和 POP3 服务提供程序;
activation.jar :此 JAR 文件包含 JAF API 和 Sun 的实现。
JavaMail 包中用于处理电子邮件的核心类是: Properties 、 Session 、 Message 、 Address 、 Authenticator 、 Transport 、 Store 等。
3、邮件传输过程
如上图,电子邮件的处理步骤如下:
创建一个 Session 对象。
Session 对象创建一个 Transport 对象 /Store 对象,用来发送 / 保存邮件。
Transport 对象 /Store 对象连接邮件服务器。
Transport 对象 /Store 对象创建一个 Message 对象 ( 也就是邮件内容 ) 。
Transport 对象发送邮件; Store 对象获取邮箱的邮件。
4、Message 结构
MimeMessage 类:代表整封邮件。
MimeBodyPart 类:代表邮件的一个 MIME 信息。
MimeMultipart 类:代表一个由多个 MIME 信息组合成的组合 MIME 信息。
5、JavaMail 的核心类
JavaMail 对收发邮件进行了高级的抽象,形成了一些关键的的接口和类,它们构成了程序的基础,下面我们分别来了解一下这些最常见的对象。
6、java.util.Properties 类 ( 属性对象 )
java.util.Properties 类代表一组属性集合。
它的每一个键和值都是 String 类型。
由于 JavaMail 需要和邮件服务器进行通信,这就要求程序提供许多诸如服务器地址、端口、用户名、密码等信息, JavaMail 通过 Properties 对象封装这些属性信息。
例: 如下面的代码封装了几个属性信息:
Properties prop = new Properties();
prop.setProperty("mail.debug", "true");
prop.setProperty("mail.host", "[email protected]");
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "true");
针对不同的的邮件协议, JavaMail 规定了服务提供者必须支持一系列属性,
下表是一些常见属性(属性值都以 String 类型进行设置,属性类型栏仅表示属性是如何被解析的):
7、javax.mail.Session 类 ( 会话对象 )
Session 表示一个邮件会话。
Session 的主要作用包括两个方面:
接收各种配置属性信息:通过 Properties 对象设置的属性信息;
初始化 JavaMail 环境:根据 JavaMail 的配置文件,初始化 JavaMail 环境,以便通过 Session 对象创建其他重要类的实例。
JavaMail 在 Jar 包的 META-INF 目录下,通过以下文件提供了基本配置信息,以便 session 能够根据这个配置文件加载提供者的实现类:
javamail.default.providers ;
javamail.default.address.map 。
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
Session session = Session.getInstance(props);
8、javax.mail.Transport 类 ( 邮件传输 )
邮件操作只有发送或接收两种处理方式。
JavaMail 将这两种不同操作描述为传输( javax.mail.Transport )和存储( javax.mail.Store ),传输对应邮件的发送,而存储对应邮件的接收。
getTransport : Session 类中的 getTransport () 有多个重载方法,可以用来创建 Transport 对象。
connect : 如果设置了认证命令—— mail.smtp.auth ,那么使用 Transport 类的 connect 方法连接服务器时,则必须加上用户名和密码。
sendMessage : Transport 类的 sendMessage 方法用来发送邮件消息。
close : Transport 类的 close 方法用来关闭和邮件服务器的连接。
9、javax.mail.Store 类 ( 邮件存储 )
getStore : Session 类中的 getStore () 有多个重载方法,可以用来创建 Store 对象。
connect : 如果设置了认证命令—— mail.smtp.auth ,那么使用 Store 类的 connect 方法连接服务器时,则必须加上用户名和密码。
getFolder : Store 类的 getFolder 方法可以 获取邮箱内的邮件夹 Folder 对象
close : Store 类的 close 方法用来关闭和邮件服务器的连接。
10、javax.mail.Message( 消息对象 )
javax.mail.Message 是个抽象类,只能用子类去实例化,多数情况下为 javax.mail.internet.MimeMessage 。
MimeMessage 代表 MIME 类型的电子邮件消息。
要创建一个 Message ,需要将 Session 对象传递给 MimeMessage 构造器:
MimeMessage message = new MimeMessage(session);
注意:还存在其它构造器,如用按 RFC822 格式的输入流来创建消息。
setFrom :设置邮件的发件人
setRecipient :设置邮件的发送人、抄送人、密送人
三种预定义的地址类型是:
Message.RecipientType.TO :收件人
Message.RecipientType.CC :抄送人
Message.RecipientType.BCC :密送人
setSubject :设置邮件的主题
setContent :设置邮件内容
setText :如果邮件内容是纯文本,可以使用此接口设置文本内容。
10、javax.mail.Address( 地址 )
一旦您创建了 Session 和 Message ,并将内容填入消息后,就可以用 Address 确定信件地址了。和 Message 一样, Address 也是个抽象类。您用的是 javax.mail.internet.InternetAddress 类。
若创建的地址只包含电子邮件地址,只要传递电子邮件地址到构造器就行了。
Address address = new InternetAddress("[email protected]");
Authenticator :认证者
与 java.net 类一样, JavaMail API 也可以利用 Authenticator 通过用户名和密码访问受保护的资源。对于 JavaMail API 来说,这些资源就是邮件服务器。 JavaMail Authenticator 在 javax.mail 包中,而且它和 java.net 中同名的类 Authenticator 不同。两者并不共享同一个 Authenticator ,因为 JavaMail API 用于 Java 1.1 ,它没有 java.net 类别。
要使用 Authenticator ,先创建一个抽象类的子类,并从 getPasswordAuthentication() 方法中返回 PasswordAuthentication 实例。创建完成后,您必需向 session 注册 Authenticator 。然后,在需要认证的时候,就会通知 Authenticator 。您可以弹出窗口,也可以从配置文件中(虽然没有加密是不安全的)读取用户名和密码,将它们作为 PasswordAuthentication 对象返回给调用程序。
Properties props = new Properties();
Authenticator auth = new MyAuthenticator();
Session session = Session.getDefaultInstance(props, auth);
发送文本邮件
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
prop.setProperty("mail.debug", "true");
prop.setProperty("mail.host", MAIL_SERVER_HOST);
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "true");
// 1、创建session
Session session = Session.getInstance(prop);
Transport ts =
// 2、通过session得到transport对象
ts = session.getTransport();
// 3、连上邮件服务器
ts.connect(MAIL_SERVER_HOST, USER, PASSWORD);
// 4、创建邮件
MimeMessage message = new MimeMessage(session);
// 邮件消息头
message.setFrom(new InternetAddress(MAIL_FROM)); // 邮件的发件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(MAIL_TO)); // 邮件的收件人
message.setRecipient(Message.RecipientType.CC, new InternetAddress(MAIL_CC)); // 邮件的抄送人
message.setRecipient(Message.RecipientType.BCC, new InternetAddress(MAIL_BCC)); // 邮件的密送人
message.setSubject("测试文本邮件"); // 邮件的标题
// 邮件消息体
message.setText("天下无双。");
// 5、发送邮件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
发送 HTML 格式的邮件
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
prop.setProperty("mail.debug", "true");
prop.setProperty("mail.host", MAIL_SERVER_HOST);
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "true");
// 1、创建session
Session session = Session.getInstance(prop);
Transport ts =
// 2、通过session得到transport对象
ts = session.getTransport();
// 3、连上邮件服务器
ts.connect(MAIL_SERVER_HOST, USER, PASSWORD);
// 4、创建邮件
MimeMessage message = new MimeMessage(session);
// 邮件消息头
message.setFrom(new InternetAddress(MAIL_FROM)); // 邮件的发件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(MAIL_TO)); // 邮件的收件人
message.setRecipient(Message.RecipientType.CC, new InternetAddress(MAIL_CC)); // 邮件的抄送人
message.setRecipient(Message.RecipientType.BCC, new InternetAddress(MAIL_BCC)); // 邮件的密送人
message.setSubject("测试HTML邮件"); // 邮件的标题
String htmlContent = "&h1&Hello&/h1&" + "&p&显示图片&img src='cid:abc.jpg'&1.jpg&/p&";
MimeBodyPart text = new MimeBodyPart();
text.setContent(htmlContent, "text/charset=UTF-8");
MimeBodyPart image = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("D://[04]Temp//img//1.jpg"));
image.setDataHandler(dh);
image.setContentID("abc.jpg");
// 描述数据关系
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(text);
mm.addBodyPart(image);
mm.setSubType("related");
message.setContent(mm);
message.saveChanges();
// 5、发送邮件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
发送带附件的邮件
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
prop.setProperty("mail.debug", "true");
prop.setProperty("mail.host", MAIL_SERVER_HOST);
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "true");
// 1、创建session
Session session = Session.getInstance(prop);
Transport ts =
// 2、通过session得到transport对象
ts = session.getTransport();
// 3、连上邮件服务器
ts.connect(MAIL_SERVER_HOST, USER, PASSWORD);
// 4、创建邮件
MimeMessage message = new MimeMessage(session);
// 邮件消息头
message.setFrom(new InternetAddress(MAIL_FROM)); // 邮件的发件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(MAIL_TO)); // 邮件的收件人
message.setRecipient(Message.RecipientType.CC, new InternetAddress(MAIL_CC)); // 邮件的抄送人
message.setRecipient(Message.RecipientType.BCC, new InternetAddress(MAIL_BCC)); // 邮件的密送人
message.setSubject("测试带附件邮件"); // 邮件的标题
MimeBodyPart text = new MimeBodyPart();
text.setContent("邮件中有两个附件。", "text/charset=UTF-8");
// 描述数据关系
MimeMultipart mm = new MimeMultipart();
mm.setSubType("related");
mm.addBodyPart(text);
String[] files = {
"D://[04]Temp//img//1.jpg", "D://[04]Temp//img//2.jpg"
// 添加邮件附件
for (String filename : files) {
MimeBodyPart attachPart = new MimeBodyPart();
attachPart.attachFile(filename);
mm.addBodyPart(attachPart);
message.setContent(mm);
message.saveChanges();
// 5、发送邮件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
获取邮箱中的邮件
public class StoreMail {
final static String USER = "robot"; // 用户名
final static String PASSWORD = "password520"; // 密码
public final static String MAIL_SERVER_HOST = "mail.***.com"; // 邮箱服务器
public final static String TYPE_HTML = "text/charset=UTF-8"; // 文本内容类型
public final static String MAIL_FROM = "[email protected]"; // 发件人
public final static String MAIL_TO = "[email protected]"; // 收件人
public final static String MAIL_CC = "[email protected]"; // 抄送人
public final static String MAIL_BCC = "[email protected]"; // 密送人
public static void main(String[] args) throws Exception {
// 创建一个有具体连接信息的Properties对象
Properties prop = new Properties();
prop.setProperty("mail.debug", "true");
prop.setProperty("mail.store.protocol", "pop3");
prop.setProperty("mail.pop3.host", MAIL_SERVER_HOST);
// 1、创建session
Session session = Session.getInstance(prop);
// 2、通过session得到Store对象
Store store = session.getStore();
// 3、连上邮件服务器
store.connect(MAIL_SERVER_HOST, USER, PASSWORD);
// 4、获得邮箱内的邮件夹
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);
// 获得邮件夹Folder内的所有邮件Message对象
Message[] messages = folder.getMessages();
for (int i = 0; i & messages. i++) {
String subject = messages[i].getSubject();
String from = (messages[i].getFrom()[0]).toString();
System.out.println("第 " + (i + 1) + "封邮件的主题:" + subject);
System.out.println("第 " + (i + 1) + "封邮件的发件人地址:" + from);
// 5、关闭
folder.close(false);
store.close();
例:获取指定邮件夹下的第一封邮件并转发
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
prop.put("mail.store.protocol", "pop3");
prop.put("mail.pop3.host", MAIL_SERVER_HOST);
prop.put("mail.pop3.starttls.enable", "true");
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.host", MAIL_SERVER_HOST);
// 1、创建session
Session session = Session.getDefaultInstance(prop);
// 2、读取邮件夹
Store store = session.getStore("pop3");
store.connect(MAIL_SERVER_HOST, USER, PASSWORD);
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);
// 获取邮件夹中第1封邮件信息
Message[] messages = folder.getMessages();
if (messages.length &= 0) {
Message message = messages[0];
// 打印邮件关键信息
String from = InternetAddress.toString(message.getFrom());
if (from != null) {
System.out.println("From: " + from);
String replyTo = InternetAddress.toString(message.getReplyTo());
if (replyTo != null) {
System.out.println("Reply-to: " + replyTo);
String to = InternetAddress.toString(message.getRecipients(Message.RecipientType.TO));
if (to != null) {
System.out.println("To: " + to);
String subject = message.getSubject();
if (subject != null) {
System.out.println("Subject: " + subject);
Date sent = message.getSentDate();
if (sent != null) {
System.out.println("Sent: " + sent);
// 设置转发邮件信息头
Message forward = new MimeMessage(session);
forward.setFrom(new InternetAddress(MAIL_FROM));
forward.setRecipient(Message.RecipientType.TO, new InternetAddress(MAIL_TO));
forward.setSubject("Fwd: " + message.getSubject());
// 设置转发邮件内容
MimeBodyPart bodyPart = new MimeBodyPart();
bodyPart.setContent(message, "message/rfc822");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(bodyPart);
forward.setContent(multipart);
forward.saveChanges();
Transport ts = session.getTransport("smtp");
ts.connect(USER, PASSWORD);
ts.sendMessage(forward, forward.getAllRecipients());
folder.close(false);
store.close();
ts.close();
System.out.println("message forwarded successfully....");
以上就是本文的全部内容,希望对大家学习javamail收发邮件的方法有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 javamail下载附件损坏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信