为了使用JavaMail API 检查或提取电子邮件列表,需要使用 POP 或 IMAP 服务器。要检查并获取邮件,需要文件夹和存储类,主要的步骤如下:

以下示例:

使用 163 邮件的POP3服务;

import javax.mail.*;
import java.io.IOException;
import java.util.Properties;

public class CheckEmail {
    public static void main(String args[]){
        //邮件服务器参数
        String user = "[email protected]";     //邮箱验证用户名,一般第三方的POP,smtp服务,用户名为发送邮箱地址
        String password = "*************";            //邮箱验证授权码
        String host = "pop.163.com";                  //发送邮箱服务器
        //第三方POP服务器可以不用设置port参数

        //设置邮件服务器参数、服务器端口等参数
        Properties props = new Properties();
        props.put("mail.pop3.host",host);
        props.put("mail.pop3.auth", "true");
        props.put("mail.transport.protocol", "pop3");

        //设置Session对象,同时配置验证方法
        Session session = Session.getDefaultInstance(props,new javax.mail.Authenticator(){
            protected PasswordAuthentication getPasswordAuthentication(){
                return new PasswordAuthentication(user,password);
            }
        });

        try {
            //创建本地储存对象,并进行配置
            Store store = session.getStore("pop3s");
            store.connect(host,user,password);

            //创建文件夹对象,用于读取本地邮件列表
            Folder folder = store.getFolder("INBOX");
            folder.open(Folder.READ_ONLY);

            //从文件夹对象中获取每封邮件的Message对象
            Message[] messages = folder.getMessages();
            System.out.println("The count of the Email is :"+messages.length);

            //输出所有邮件的信息
            int count = 1;
            for(Message message : messages){
                System.out.println("---------------------------------------");
                System.out.println("Email No."+ count++);
                System.out.println("Subject: "+ message.getSubject());
                System.out.println("From: "+ message.getFrom()[0]);
                System.out.println("Text: "+ message.getContent().toString());
            }

            //释放相关资源
            folder.close(false);
            store.close();
            
        } catch (NoSuchProviderException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

如果在读取含有HTML邮件,要想同时将图像保存在本地时,可写一个输出流,读取 MIME 类型邮件的图像部分,将其保存在本地,详见:http://www.yiibai.com/javamail_api/javamail_api_fetching_emails.html