Как написать Java-программу для чтения новых писем с любого emailid - PullRequest
0 голосов
/ 13 мая 2010

Привет, я хочу написать Java-программу, в которой я сообщу свой адрес электронной почты и пароль. и я хочу прочитать все новые непрочитанные сообщения, поступившие на этот электронный идентификатор. Я не знаю, как написать программу для этого.

Приведенная ниже программа отлично работает для gmail. но для yahoomail это не работает, потому что для yahoo pop3 не настроен. Я хочу общий код, который будет работать для всех идентификаторов электронной почты.

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 ]

1 голос
/ 13 мая 2010

Вам нужно знать больше, чем просто логин-пароль. Такие вещи, как адрес почтового сервера , тип почтового сервера , порт для соединений и т. Д. Вам, вероятно, стоит проверить Java Mail API или Commons Email .

UPD:

Вы создаете Session, используя метод Session.getDefaultInstance() (который принимает соединение Properties объект и аутентификатор), получаете Store из этого Session, используя Session.getStore() метод, получаете Folder из этого хранилища используя метод Store.getFolder("FOLDER_NAME"), откройте этот Folder, используя метод Folder.open(Folder.READ), и получите все сообщения, используя что-то вроде Message[] messages = inboxFolder.getMessages();

Это то, что вы искали?

UPD2:

Нет просто никакого способа написать общую программу, которая будет работать с любым почтовым провайдером, используя только путь к серверу, ID пользователя и пароль. Потому что разные почтовые серверы настроены по-разному. Они используют разные протоколы (imap / pop3 / pop3 ssl) на разных портах. Всегда есть какой-то парень, который настроил свой почтовый сервер для работы с imap через ssl только через порт 31337, все остальные порты и протоколы запрещены. И этот парень нарушает вашу программу. Итак, вам нужно будет указать все эти свойства в вашем properties объекте. Посмотрите здесь для свойств, вы должны будете указать.

UPD3:

Если подумать, у вас действительно есть один вариант. Просто попробуйте подключиться к серверу, используя разные протоколы. Если это не помогает, начните перебирать порты. То, что подходит, это ваша конфигурация. Если это действительно то, что вы хотите.

1 голос
/ 13 мая 2010

Вам нужен пакет javax.mail и документация к нему. Прочитайте документацию. Тогда ты знаешь.

0 голосов
/ 14 мая 2010

Вам нужен реестр, где вы можете получить свойства для данной почтовой службы.

Например, вместо указания хоста pop3, вы можете указать имя файла .properties, который будет содержать хост, порт, протокол и т. Д. *

Если ваш файл .properties содержит протокол, например mail.store.protocol = pop3, вы можете использовать session.getStore () (без аргументов), и тот же код можно использовать для pop3, imap, pop3s, IMAPS.

0 голосов
/ 13 мая 2010

Есть два способа сделать это:

1) Google предоставляет API для доступа к почте, вы можете использовать эту библиотеку, которая обеспечивает больший контроль над вашей почтой. См. Здесь: http://code.google.com/apis/gmail/. Таким же образом попробуйте для других поставщиков электронной почты.

2) Простой почтовый клиент (вы можете легко его найти), но вам нужно посмотреть на заголовки, чтобы определить, какие письма читаются / не читаются и т. Д.

...