如何编写java程序以从任何电子邮件ID中读取新电子邮件

时间:2010-05-13 10:06:57

标签: java email javamail

您好我想写一个java程序,我将提供我的电子邮件ID和密码。我想阅读所有到达该电子邮件ID的新未读邮件。我不知道如何为此编写程序。

以下程序适用于Gmail。但它不适用于yahoomail,因为没有配置yahoo pop3。我想要一个适用于所有电子邮件ID的通用代码。

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

public class ReadMail {

    public static void main(String args[]) throws Exception {



//        String host = "pop.gmail.com";
//        String user = "xyz";
//        String password = "12345";

        // Get system properties
       Properties properties = System.getProperties();

        // Get the default Session object.
        Session session = Session.getDefaultInstance(properties, null);

        // Get a Store object that implements the specified protocol.
        Store store = session.getStore("pop3s");

        //Connect to the current host using the specified username and password.
        store.connect(host, user, password);

        //Create a Folder object corresponding to the given name.
        Folder folder = store.getFolder("inbox");

        // Open the Folder.
        folder.open(Folder.READ_ONLY);

        Message[] message = folder.getMessages();

        // Display message.
        for (int i = 0; i < message.length; i++) {

            System.out.println("------------ Message " + (i + 1) + " ------------");

            System.out.println("SentDate : " + message[i].getSentDate());
            System.out.println("From : " + message[i].getFrom()[0]);
            System.out.println("Subject : " + message[i].getSubject());
            System.out.print("Message : ");

            InputStream stream = message[i].getInputStream();
            while (stream.available() != 0) {
                System.out.print((char) stream.read());
            }
            System.out.println();
        }

        folder.close(true);
        store.close();
    }
}

4 个答案:

答案 0 :(得分:1)

您需要javax.mail包及其文档。阅读文档。那你知道吗

答案 1 :(得分:1)

您需要了解的不仅仅是login-pass。例如邮件服务器地址邮件服务器类型连接端口等。 您应该查看Java Mail APICommons Email

<强> UPD:

使用Session方法创建Session.getDefaultInstance()(使用连接Properties对象和身份验证器),使用{{1}从此Store获取Session方法,使用Session.getStore()方法从该商店获取Folder,使用Store.getFolder("FOLDER_NAME")方法打开Folder,并使用{{1}之类的内容获取所有消息}

这就是您要找的东西吗?

<强> UPD2:

使用服务器路径,用户ID和密码,根本无法编写可与任何邮件提供商一起使用的通用程序。因为不同的邮件服务器配置不同。他们在不同的端口上讨论不同的协议(imap / pop3 / pop3 ssl)。总有一些人将他的邮件服务器配置为仅在31337端口上通过ssl与imap通话,所有其他端口和协议都被禁止。这家伙打破了你的计划。因此,您必须在Folder.open(Folder.READ)对象中指定所有这些属性。查看here的属性,您必须指定。

<强> UPD3:

第二个想法,你实际上有一个选择。只需尝试使用不同的协议连接到服务器。如果这没有帮助,请开始迭代端口。适合的是您的配置。 如果这真的是你想要的。

答案 2 :(得分:0)

有两种方法可以做到:

1)Google提供API来访问您可以使用该库的邮件,该库可以更好地控制您的邮件。见这里:http://code.google.com/apis/gmail/。以同样的方式尝试其他电子邮件提供商。

2)简单的邮件客户端(您可以轻松地使用谷歌搜索),但您需要查看标题以识别哪些邮件是已读/未读等。

答案 3 :(得分:0)

您需要一个注册表,您可以在其中获取给定邮件服务的属性。

例如,您可以指定包含主机,端口,协议等的.properties文件的名称,而不是指定pop3主机...

如果您的.properties文件包含协议,例如mail.store.protocol = pop3,您可以使用session.getStore()(不带参数),相同的代码可以用于pop3,imap,pop3s, IMAPS。