使用Main方法和其他一些Thread的JavaMail连接

时间:2016-08-18 05:35:58

标签: java javamail

我正在尝试连接到gmail收件箱以使用JavaMail api监听邮件。通过main方法运行程序时,我可以很好地连接到邮箱。但是,当我创建一个单独的线程并使用其他类运行它时,似乎我得到以下异常。

javax.mail.MessagingException: null; nested exception is:
    java.io.IOException
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:298)
    at javax.mail.Service.connect(Service.java:234)
    at javax.mail.Service.connect(Service.java:135)
    at com.emdi.sl3.server.emailConnector.EmailListenerAcknowledge.run(Email ListenerAcknowledge.java:92)
    at java.lang.Thread.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)`

我连接邮箱的代码如下,

import java.util.*;
import javax.mail.*;
import javax.mail.event.*;

import com.sun.mail.imap.*;

public class EmailListenerAcknowledge implements Runnable {

    private Store store;
    private Folder folder;
    String host;
    String user;
    String password;

    public void run() {

        try {
            // TODO: Set email protocol, username and password.
            host = "imap.gmail.com";
            user = "fdsfds";
            password = "sdfsff";

            String mbox = "inbox";

            String frequency = "1";

            System.out.println("\nTesting monitor\n");

            Properties props = new Properties();
            props.setProperty("mail.imap.ssl.enable", "true");
            props.setProperty("mail.imap.port", "993"); 

            // Get a Session object
            Session session = Session.getInstance(props);

            // Get a Store object
            store = session.getStore("imap");

            // Connect
            store.connect(host, user, password);
            System.out.println("Connected!!!");

            // Open a Folder
            folder = store.getFolder(mbox);
            if (folder == null || !folder.exists()) {
                System.out.println("Invalid folder");
                System.exit(1);
            }

            folder.open(Folder.READ_ONLY);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

我还注意到当我删除行props.setProperty("mail.imap.port", "993")时,我得到一个不同的异常(再次从main方法运行程序工作正常),

javax.mail.MessagingException: Connection timed out: connect; nested exception is:java.net.ConnectException: Connection timed out: connect
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:298)
    at javax.mail.Service.connect(Service.java:234)
    at javax.mail.Service.connect(Service.java:135)
    at com.emdi.sl3.server.emailConnector.EmailListener.run(Email ListenerAcknowledge.java:92)
    at java.lang.Thread.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)`

我似乎不明白为什么从main方法运行程序工作正常,而从单独的线程运行程序不起作用。

0 个答案:

没有答案