Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/Lin

發郵件錯誤Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputSt

(本文基於MyEclipse6.5其他IDE不知)
 接收郵件:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
當出現以上錯誤時,恭喜您已經離接收郵件不遠了,否則請您解決好所有的異常後再來看這個帖子。

javax.mail和javax.activation這兩個包已經在javaEE5當中屬於基礎包了,就是JDK中自帶了已經,但是裏面的方法與現在外面的mail.jar和activation.jar有一些出入,所以初學者在直接copy別人代碼的時候往往會出現上面的錯誤。
廢話不多說下面是解決方法
進到

X:\Program Files\MyEclipse 6.5\myeclipse\eclipse\plugins\com.genuitec.eclipse.j2eedt.core_6.5.0.zmyeclipse650200806\data\libraryset\EE_5

這個路徑裏,可以看到javaee.jar,用rar把這個文件打開,然後進到javax文件夾裏,刪除mail.jar和activation.jar(我的javaee.jar裏,這兩個東西是文件夾,總之刪掉就OK,不過要注意備份一下)

刪掉之後運行下面的代碼,經行簡單的修改以後就可以實現接收郵件的功能了!我已經測試過完全可行。


package com.oa.mail;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Properties;

import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;

import sun.misc.BASE64Decoder;

public class MailReceiver{

    public static void main(String[] args){

        MailReceiver receiver = new MailReceiver();
        receiver.setHost("pop3.pchome.com.tw");
        receiver.setUsername("xxxxxx");//您的郵箱賬號
        receiver.setPassword("yyyyyy");//您的郵箱密碼
        receiver.setAttachPath("f:\\email");//您要存放附件在什麼位置?絕對路徑
        try{
            receiver.reveiveMail();
        } catch (Exception e){
            e.printStackTrace();
        }
    }

    public void reveiveMail() throws Exception {

        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);
        Store store = session.getStore("pop3");
        store.connect(getHost(), getUsername(), getPassword());

        Folder folder = store.getFolder("INBOX");
        folder.open(Folder.READ_ONLY);
        Message message[] = folder.getMessages();
        System.out.println("Messages''s length: " + message.length);

        //FetchProfile profile = new FetchProfile();
        //profile.add(FetchProfile.Item.ENVELOPE);
        //folder.fetch(message, profile);
       
        for (int i = 0; i < message.length; i++) {
           
            //message[i].setFlag(Flags.Flag.DELETED, true);//必須先設置:folder.open(Folder.READ_WRITE);
            handleMultipart(message[i]);
        }
        if (folder != null) {
            folder.close(true);
        }
        if (store != null) {
            store.close();
        }
    }

    private void handleMultipart(Message msg) throws Exception {
   
        String disposition;
        Multipart mp = (Multipart) msg.getContent();
        int mpCount = mp.getCount();
        for (int m = 0; m < mpCount; m++) {
            handle(msg);
            BodyPart part = mp.getBodyPart(m);
            disposition = part.getDisposition();
            if (disposition != null && disposition.equals(Part.ATTACHMENT)) {
                saveAttach(part, getAttachPath());
            } else {
                System.out.println(part.getContent());
            }
        }
    }

    private static void handle(Message msg) throws Exception {
       
        System.out.println("郵件主題:" + msg.getSubject());//測試
        System.out.println("郵件作者:" + msg.getFrom()[0].toString());
        System.out.println("發送日期:" + msg.getSentDate());
    }

    private static void saveAttach(BodyPart part, String filePath) throws Exception {

        String temp = part.getFileName();
        String s = temp.substring(8, temp.indexOf("?="));
        String fileName = base64Decoder(s);
        System.out.println("有附件:" + fileName);

        InputStream in = part.getInputStream();
        FileOutputStream writer = new FileOutputStream(new File(filePath+"\\" + fileName));
        byte[] content = new byte[255];
        while ((in.read(content)) != -1) {
            writer.write(content);
        }
        writer.close();
        in.close();
    }

    private static String base64Decoder(String s) throws Exception {
       
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] b = decoder.decodeBuffer(s);
       
        return (new String(b));
    }

    private String host = null;
    private String username = null;
    private String password = null;
    private String attachPath = null;
   
    public String getAttachPath() {
        return attachPath;
    }

    public void setAttachPath(String attachPath) {
        this.attachPath = attachPath;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

 

--文章轉自http://hi.baidu.com/576699909/item/c42b4e1461b20923f6625c8d

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章