Учебники

JavaMail API — Основные классы

JavaMail API состоит из некоторых интерфейсов и классов, используемых для отправки, чтения и удаления сообщений электронной почты. Хотя в 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] или Личное имя <[email protected]> .

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

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

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

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

  • Просматривая администрируемый объект, хранящийся в сервисе JNDI

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

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

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

Просматривая администрируемый объект, хранящийся в сервисе JNDI

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)

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

getInstance () : есть два метода для получения объекта сеанса с помощью метода getInstance (). Возвращает новый сеанс.

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

Создав объект 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 (Address address) используется для установки поля заголовка from.
    public void addRecipients (тип Message.RecipientType, строковые адреса) используется для добавления указанного адреса к типу получателя.
    public void setSubject (String subject) используется для установки поля заголовка темы.
    public void setText (String textmessage) используется для установки текста в качестве содержимого сообщения с использованием типа MIME text / plain.

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

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

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

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

Адресный класс

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

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

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

Другой способ создания адреса — передать имя alog с адресом электронной почты:

Вы также можете установить поля To, From, CC, BCC, как показано ниже

message.setFrom (адрес)

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

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

Message.RecipientType.TO

Message.RecipientType.CC

Message.RecipientType.BCC

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

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

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

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

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

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

Ниже приведен пример использования 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();

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

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

Другой способ отправить сообщение — получить конкретный экземпляр из сеанса для вашего протокола, передать имя пользователя и пароль (пусто, если не нужно), отправить сообщение и закрыть соединение:

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

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

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

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 возвращает именованную подпапку. После того, как чтение почты завершено, закройте соединение Store и Folder.

Мы можем видеть отношение магазина и папки на изображении ниже:

JavaMail API Store и связь с папками

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