Реализация от Sun Microsystems. Типичный forkflow:
0) Установка параметров подключения
1) Получение сессии
2) Получение объект хранилища
3) Получиние объекта папки с входящими сообщениями
4) Поиск нужных сообщений
5) Разбор сообщения
6) Закрытие папки и хранилища.
Страница на сайте Oracle, посвященная JavaMail API находится здесь.
0) Установка параметров подключения
1) Получение сессии
2) Получение объект хранилища
3) Получиние объекта папки с входящими сообщениями
4) Поиск нужных сообщений
5) Разбор сообщения
6) Закрытие папки и хранилища.
Страница на сайте Oracle, посвященная JavaMail API находится здесь.
0) В параметрах указываются данные необходимые для подключения к почтовому серверу:
Properties props = new Properties();
props.put("mail.imaps.host", "imap.gmail.com");
props.put("mail.imaps.port", "993");
props.put("mail.imaps.user", "name@gmail.com");
props.put("mail.store.protocol", "imaps");
Реализация от Sun поддерживает pop3, imap, smtp, а также их безопасных "братьев" pop3s, imaps, smtps.
Полный список параметров и их описание есть в javadoc.
1) Сообщения доступны только в рамках сессии. Для получение сессии нужны свойства, описанные в 0, а также объект Authenticator:
private class GmailAuthenticator extends Authenticator {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("name@gmail.com", "password");
}
}
Теперь можно открыть сессию:
Session.getInstance(props, new GmailAuthenticator());
2) Объект Store хранит папки с сообщениями, получить его можно из сессии:
Store store = session.getStore();
Но этого мало, нужно к нему подключиться:
store.connect();
В этот момент происходит аутентификация на почтовом сервере.
3) Вся почта хранится в папках, Folder, которые в свою очередь хранятся в корневой папке.
Объект Store хранит ссылку на корневую папку. Для работы с папкой её нужно открыть.
Folder defaultFolder = store.getDefaultFolder();
Folder inbox = defaultFolder.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
4) У папки есть метод search для поиска сообщений. На вход он принимает объекты классов реализующих абстрактный SearchTerm. Можно реализовать свой или воспользоваться теми, что входят в реализацию API:
Message[] unread = inbox.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false));
Message[] subjPatternMathed = inbox.search(new SubjectTerm("Реестр"), unread);
В данном примере я нашел все непрочитанные сообщения, а уже в них нашел сообщения с заголовком содержащим слово "Реестр".
5) Интерфейс Message, то есть всё, что можно сделать с сообщением описан в спецификации и javadoc.
6) После того, как над сообщениями была сделана работа у объектов Store и Session надо вызвать метод close(), так как эти объекты предоставляю доступ к ресурсам за пределами JVM. В противном случае они не будут собраны Garbage Collector'ом.
inbox.close(false);
store.close();
Properties props = new Properties();
props.put("mail.imaps.host", "imap.gmail.com");
props.put("mail.imaps.port", "993");
props.put("mail.imaps.user", "name@gmail.com");
props.put("mail.store.protocol", "imaps");
Реализация от Sun поддерживает pop3, imap, smtp, а также их безопасных "братьев" pop3s, imaps, smtps.
Полный список параметров и их описание есть в javadoc.
1) Сообщения доступны только в рамках сессии. Для получение сессии нужны свойства, описанные в 0, а также объект Authenticator:
private class GmailAuthenticator extends Authenticator {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("name@gmail.com", "password");
}
}
Теперь можно открыть сессию:
Session.getInstance(props, new GmailAuthenticator());
2) Объект Store хранит папки с сообщениями, получить его можно из сессии:
Store store = session.getStore();
Но этого мало, нужно к нему подключиться:
store.connect();
В этот момент происходит аутентификация на почтовом сервере.
3) Вся почта хранится в папках, Folder, которые в свою очередь хранятся в корневой папке.
Объект Store хранит ссылку на корневую папку. Для работы с папкой её нужно открыть.
Folder defaultFolder = store.getDefaultFolder();
Folder inbox = defaultFolder.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
4) У папки есть метод search для поиска сообщений. На вход он принимает объекты классов реализующих абстрактный SearchTerm. Можно реализовать свой или воспользоваться теми, что входят в реализацию API:
Message[] unread = inbox.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false));
Message[] subjPatternMathed = inbox.search(new SubjectTerm("Реестр"), unread);
В данном примере я нашел все непрочитанные сообщения, а уже в них нашел сообщения с заголовком содержащим слово "Реестр".
5) Интерфейс Message, то есть всё, что можно сделать с сообщением описан в спецификации и javadoc.
6) После того, как над сообщениями была сделана работа у объектов Store и Session надо вызвать метод close(), так как эти объекты предоставляю доступ к ресурсам за пределами JVM. В противном случае они не будут собраны Garbage Collector'ом.
inbox.close(false);
store.close();
Комментариев нет:
Отправить комментарий