首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

天极网 > 开发频道>通过JavaMail访问Hotmail邮箱

通过JavaMail访问Hotmail邮箱

2005-02-12 10:40作者:zhaozexin出处:blog责任编辑:方舟

  为了让大家对JDAVMail有个大概的认识,下面我们给出两段代码用于Hotmail邮件的收发:

  1. 邮件收取

/*
* 文件名:HotmailDemo.java
* 创建时间:2004-9-14
* 创建者:liudong
*/
package com.clickcom.mail;

import java.util.Date;
import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
* Hotmail邮件的收发器
* @author liudong
*/
public class HotmailDemo {
 public static void main(String[] args) {
  receive();
 }

 /**
 * 邮件接收
 */

  protected static void receive() {
  try {
   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<=nCount;i++){
      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=davmail;
type=store; class=com.posisoft.jdavmail.JDAVMailStore;
vendor=Positive Software;
protocol=davmail_xmit;
type=transport;
class=com.posisoft.jdavmail.JDAVMailTransport;
vendor=Positive Software;

  因此当我们指定协议名为davmail时,JavaMail就会自动加载com.posisoft.jdavmail.JDAVMailStore类进行处理,因此通过传入davmail字符串所得到的store实例实际上是类com.posisoft.jdavmail.JDAVMailStore的一个实例,这样我想大家应该了解了前面这段程序的工作原理。

  我们再来看JDAVMail发送邮件的代码片段:

/**
* 邮件发送
*/
protected static void send() {
 try {
  Properties prop = new Properties();
  //邮件发送者地址
  prop.setProperty("mail.davmail.from","abc@hotmail.com");
  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("abc@hotmail.com");
  txMsg.setFrom(addrFrom);

  //邮件接收者地址
  InternetAddress addrTo = new InternetAddress("cdef@hotmail.com", "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邮件的朋友们排忧解难。同时也非常欢迎通过我的网站 http://www.javayou.com 跟我交流在使用中遇到的问题。

关注此文的读者还看过:

返回开发频道首页

共2页。 上一页12

软件频道最新更新

热点推荐

天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络