JavaMail API - основные классы

API JavaMail состоит из некоторых интерфейсов и классов, используемых для отправки, чтения и удаления сообщений электронной почты. Хотя в JavaMail API много пакетов, мы рассмотрим два основных пакета, которые часто используются в Java Mail API: javax.mail и javax.mail.internet . Эти пакеты содержат все основные классы JavaMail. Они есть:

КлассОписание
javax.mail.SessionКлючевой класс API. Многопоточный объект представляет фабрику соединений.
javax.mail.MessageАбстрактный класс, моделирующий сообщение электронной почты. Подклассы предоставляют фактические реализации.
javax.mail.AddressАбстрактный класс, моделирующий адреса (исходящие и исходящие) в сообщении. Подклассы предоставляют конкретные реализации.
javax.mail.AuthenticatorАбстрактный класс, используемый для защиты почтовых ресурсов на почтовом сервере.
javax.mail.TransportАбстрактный класс, моделирующий механизм передачи сообщений для отправки сообщения электронной почты.
javax.mail.StoreАбстрактный класс, который моделирует хранилище сообщений и его протокол доступа для хранения и извлечения сообщений. Магазин разделен на папки.
javax.mail.FolderАбстрактный класс, представляющий папку почтовых сообщений. Он может содержать подпапки.
javax.mail.internet.MimeMessageСообщение - это абстрактный класс, поэтому он должен работать с подклассом; в большинстве случаев вы будете использовать MimeMessage. MimeMessage - это сообщение электронной почты, которое понимает типы и заголовки MIME.
javax.mail.internet.InternetAddressЭтот класс представляет адрес электронной почты в Интернете с использованием синтаксиса RFC822. Типичный синтаксис адреса имеет вид [email protected] или Personal Name <[email protected]> .

Давайте изучим каждый из этих классов подробно, и в следующих главах мы рассмотрим примеры, использующие каждый из них.

Сессионный класс

Класс Session является основным классом JavaMail API и не имеет подклассов. Объект Session действует как фабрика соединений для JavaMail API, который обрабатывает как настройку конфигурации, так и аутентификацию.

Объект сеанса можно создать следующими способами:

  • Путем поиска администрируемого объекта, хранящегося в службе JNDI.

    InitialContext ctx = new InitialContext();
    Session session = (Session) ctx.lookup("usersMailSession");

    usersMailSession - это объект имени JNDI, используемый в качестве администрируемого объекта для объекта Session. usersMailSession можно создать и настроить с обязательными параметрами в виде пар имя / значение, включая такую ​​информацию, как имя хоста почтового сервера, учетная запись пользователя, отправляющая почту, и протоколы, поддерживаемые объектом Session.

  • Другой метод создания объекта Session основан на программном подходе, в котором вы можете использовать объект java.util.Properties для переопределения некоторой информации по умолчанию, такой как имя почтового сервера, имя пользователя, пароль и другую информацию, которая может быть общий для всего вашего приложения.

Конструктор класса Session является частным . Следовательно, класс Session предоставляет два метода (перечисленных ниже), которые получают объект Session .

  • getDefaultInstance(): Существует два метода получения объекта сеанса с помощью метода getDefaultInstance (). Он возвращает сеанс по умолчанию.

    public static Session getDefaultInstance(Properties props)
    public static Session getDefaultInstance(Properties props,Authenticator auth)
  • getInstance(): Есть два метода получения объекта сеанса с помощью метода getInstance (). Он возвращает новый сеанс.

    public static Session getInstance(Properties props)
    public static Session getInstance(Properties props,Authenticator auth)

Класс сообщения

Создав объект Session, мы переходим к созданию сообщения, которое будет отправлено. Тип сообщения будет javax.mail.Message .

  • Сообщение - это абстрактный класс. Следовательно, в основном используется его подкласс javax.mail.internet.MimeMessage .

  • Чтобы создать сообщение, вам необходимо передать объект сеанса в конструктор класса MimeMessage. Например:

    MimeMessage message=new MimeMessage(session);
  • После создания объекта сообщения нам необходимо сохранить в нем информацию. Класс сообщения реализует интерфейс javax.mail.Part, а javax.mail.internet. MimeMessage реализует javax.mail.internet.MimePart. Вы можете использовать message.setContent () или mimeMessage.setText () для хранения содержимого.

  • Обычно используемые методы класса MimeMessage:

    МетодОписание
    public void setFrom (Адресный адрес)используется для установки поля заголовка from.
    public void addRecipients (тип Message.RecipientType, строковые адреса) используется для добавления данного адреса к типу получателя.
    public void setSubject (тема строки)используется для установки поля заголовка темы.
    public void setText (текстовое сообщение строки) используется для установки текста в качестве содержимого сообщения с использованием типа MIME text / plain.

Адрес Класс

Теперь, когда у нас есть объекты Session и Message (с сохраненным в нем содержимым), нам нужно адресовать письмо с помощью объекта Address .

  • Адрес - это абстрактный класс. Следовательно, в основном используется его подкласс javax.mail.internet.InternetAddress .

  • Адрес можно создать, просто передав адрес электронной почты:

    Address address = new InternetAddress("[email protected]");
  • Другой способ создания адреса - передать name alog с адресом электронной почты:

    Address address = new InternetAddress("[email protected]", Manisha);
  • Вы также можете установить поля To, From, CC, BCC, как показано ниже.

    • message.setFrom(address)

    • message.addRecipient (тип, адрес)

    • Три предопределенных типа адресов являются объектами с одним из следующих значений:

      • Message.RecipientType.TO

      • Message.RecipientType.CC

      • Message.RecipientType.BCC

Класс аутентификатора

Класс Authenticator представляет объект, который знает, как получить аутентификацию для сетевого подключения. Обычно это делается путем запроса информации у пользователя.

  • Authenticator - это абстрактный класс. Вы создаете подкласс PasswordAuthentication , передавая его конструктору имя пользователя и пароль.

  • Вы должны зарегистрировать аутентификатор в сеансе при создании объекта сеанса.

Ниже приводится пример использования Authenticator :

Properties props = new Properties();
//Override props with any customized data
PasswordAuthentication auth = new PasswordAuthentication("manisha", "pswrd")
Session session = Session.getDefaultInstance(props, auth);

Транспортный класс

Транспортный класс используется как механизм передачи сообщений. Этот класс обычно использует протокол SMTP для отправки сообщения.

  • Это абстрактный класс.

  • Вы можете использовать версию класса по умолчанию, просто вызвав статический метод send () :

    Transport.send(message);
  • Другой способ отправить сообщение - получить конкретный экземпляр из сеанса для вашего протокола, передать имя пользователя и пароль (пусто, если не требуется), отправить сообщение и закрыть соединение:

    message.saveChanges(); // implicit with send()
    //Get transport for session
    Transport transport = session.getTransport("smtp");
    //Connect
    transport.connect(host, username, password);
    //repeat if necessary
    transport.sendMessage(message, message.getAllRecipients());
    //Done, close the connection
    transport.close();

Класс магазина

Абстрактный класс, который моделирует хранилище сообщений и его протокол доступа для хранения и извлечения сообщений. Подклассы предоставляют фактические реализации. Store расширяет класс Service , который предоставляет множество общих методов для присвоения имен хранилищам, подключения к хранилищам и прослушивания событий подключения.

Клиенты получают доступ к хранилищу сообщений, получая объект Store, который реализует протокол доступа к базе данных. Большинство хранилищ сообщений требуют, чтобы пользователь прошел аутентификацию, прежде чем они разрешат доступ. Метод подключения выполняет эту аутентификацию.

Store store = session.getStore("pop3");
store.connect(host, username, password);

Папка Класс

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

После подключения к Магазину вы можете получить папку, которую необходимо открыть, прежде чем вы сможете читать сообщения из нее.

Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();

Метод getFolder (String name) для объекта Folder возвращает именованную подпапку. По завершении чтения почты закройте соединение с хранилищем и папкой.

На изображении ниже мы можем увидеть отношения между хранилищем и папкой:

Как мы видим, для каждой учетной записи пользователя на сервере есть хранилище, в котором хранятся сообщения пользователя. Хранилище разделено на папки, и папка «Входящие» является основной папкой, содержащей сообщения электронной почты. Папка может содержать как сообщения, так и подпапки.