{
Properties props = System.getProperties(); //获取系统变量 Authenticator auth = new Email_Autherticator(); props.put(\props.put(\
Session session = Session.getDefaultInstance(props,auth); //建立session Store store = session.getStore(\store.connect(host,username,password);
//After connecting to the Store,you can get a Folder,which must be opened before you can read messages from it:
Folder folder = store.getFolder(\连接到Store后,取得一个文件夹,一般默认的是INDEX
folder.open(Folder.READ_WRITE);//READ_ONLY为打开方式 Message message[] = folder.getMessages();//从文件夹获取邮件信息
//可以用两种方式去获得邮件信息,getContent()用来获得邮件的主体信息。而WriteTo()可以用来获得邮件的全部信息,包括头部信息
// System.out.println(((MimeMessage)message).getContent()); for (int i=0,n=message.length;i { String out_from_person =
((InternetAddress)message[i].getFrom()[0]).getPersonal(); String out_from_address =
((InternetAddress)message[i].getFrom()[0]).getAddress(); System.out.println(\System.out.println(\String out_subject = message[i].getSubject(); System.out.println(\//以下代码用来获得邮件的正文信息 Part messagePart = message[i];
Object out_content = messagePart.getContent(); if (out_content instanceof Multipart) {
messagePart = ((Multipart)out_content).getBodyPart(0); System.out.println(\}
String out_content_type = messagePart.getContentType(); System.out.println(\if (out_content_type.startsWith(\out_content_type.startsWith(\{
InputStream ipstm = messagePart.getInputStream(); BufferedReader bufreader = new BufferedReader(new InputStreamReader(ipstm));
String thisLine = bufreader.readLine(); while (thisLine != null) {
System.out.println(\thisLine = bufreader.readLine(); } }
System.out.println(\message[i].setFlag(Flags.Flag.DELETED,true);//最后删除服务器端的邮件 }
//DELETED,ANSWERED,DRAFT,FLAGGED,RECENT,SEEN,USER
folder.close(true);//true的话,彻底删除已经标记为DELETE的邮件,如果为false的话,就不删除
store.close();//关闭 }
catch(Exception ej2) {
System.out.println(ej2); } }
void jButton4_actionPerformed(ActionEvent e) { try
{//该程序为回复邮件
Properties props = System.getProperties(); //获取系统变量
Authenticator auth = new Email_Autherticator(); //取得?uFFFD衿魅现? props.put(\props.put(\
Session session = Session.getDefaultInstance(props,auth); //建立session Store store = session.getStore(\store.connect(host,username,password); Folder folder = store.getFolder(\folder.open(Folder.READ_WRITE);
Message message[] = folder.getMessages(); for (int i=0,n=message.length;i { // String out_from_person =
((InternetAddress)message[i].getFrom()[0]).getPersonal();//获取邮件发信人的署名
String out_from_address =
((InternetAddress)message[i].getFrom()[0]).getAddress(); System.out.println(out_from_address);
Message forward = new MimeMessage(session); forward.setSubject(\forward.setFrom(new InternetAddress(mail_to)); forward.addRecipient(Message.RecipientType.TO,new InternetAddress(out_from_address));
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(\Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(message[i].getDataHandler()); multipart.addBodyPart(messageBodyPart); forward.setContent(multipart); Transport.send(forward);
message[i].setFlag(Flags.Flag.DELETED,true);//DELETED,ANSWERED,DRAFT,FLAGGED,RECENT,SEEN,USER }
folder.close(true); store.close();//关闭 }
catch(Exception ej2) {
System.out.println(ej2); } }
void jButton5_actionPerformed(ActionEvent e) { try {
Properties props = new Properties();
Authenticator auth = new Email_Autherticator(); props.put(\props.put(\
Session session = Session.getDefaultInstance(props,auth);
MimeMessage message = new MimeMessage(session); message.setContent(\message.setSubject(mail_subject); message.setText(mail_body);
message.setHeader(mail_head_name,mail_head_value); message.setSentDate(new Date());
message.setFrom(new InternetAddress(mail_from,\man
CNBIE BLOG
-------------------------------------------------------------------------------- JavaMail的标题的中文问题最新版已经解决 原文:JavaMail的标题的中文问题最新版已经解决
记得老版本的标题(发送/接收)中有中文会出现编码的问题,现在用新的JavaMail版本没有这个问题了。
另外如果内容为HTML的话,一般要设置编码为GBK,即在addPart的时候要addPart(part, \
CNBIE BLOG
-------------------------------------------------------------------------------- JavaMail访问Hotmail邮箱 原文:JavaMail访问Hotmail邮箱
相信许多人都有MSN聊天工具的帐号,例如abc@hotmail.com ,这个账号其实也是一个邮件地址,可以进行正常的邮件收发功能,你可以通过网址http://www.hotmail.com 来访问和操作这个邮箱进行邮件的收发。但是这个邮箱有一个限制就是它并不提供POP3或者SMTP服务,也就是说一般的邮件客户端工具无法使用这个邮箱,虽然现在有不少的邮件工具可以支持Hotmail邮箱,但是如果我们需要在我们的Java项目中增加对Hotmail邮箱的支持,那往往会不知从什么地方开始入手,因为SUN公司提供的JavaMail 本身并不提供对除了POP3/IMAP以及SMTP外其他协议的支持。
但事实上,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://www.hotmail.com 的这个地址,后面这个地址是提供给用户一个基于浏览器的访问界面以便对邮箱进行操作,你当然可以通过编写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邮件的收发功能。