Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Архитектура JavaMail и основные классы
Хотя в API JavaMail имеется множество классов и пакетов, изучив основные классы, вы убедитесь в том, что эти API — несложный, но очень мощный инструмент для оснащения ваших Java-приложений возможностями работы с электронной почтой. В следующем разделе описаны некоторые из основных классов API JavaMail (рис. 14.2). Однако в данной главе обсуждаются не все эти классы. Дополнительную информацию по этой теме можно получить, посетив сайт http://Java.sun.com/products iavamail/index.html.
Java Activation Framework Работа JavaMail ощутимо зависит от API Java Activation Framework (JAF). JAF обеспечивает возможность стандартным образом работать с данными самых разных типов (например, с изображениями, аудио- и видеоданными). Когда приложению нужно обработать данные определенного типа, эти объекты JAF можно "активизировать" и использовать для обработки. JavaMail пользуется JAF для работы с присоединенными файлами. Когда клиентская программа JavaMail получает почтовое сообщение, она может воспользоваться технологиями JAF для создания экземпляров компонентов JavaBean, которые могут обеспечить выполнение всех команд, необходимых клиенту для прочтения, просмотра, печати и любой другой обработки содержимого сообщения. JAF предоставляет следующие услуги для приложения: в Определение типа содержимого сообщения. Создание набора команд, или операций, которые могут выполняться над содержимым сообщения. Создание экземпляра JavaBean, предоставляющего доступ к данным. Другими словами, этот компонент выполняет команды, или операторы. javax.mail.Session Класс javax.mail.Session является отправной точкой API JavaMail. Этот класс обеспечивает для приложения возможность задавать такие свойства, как транспортный механизм и почтовый сервер, а также загружать классы, представляющие реализации провайдеров для различных почтовых протоколов и управления ими. Ниже приведены описания некоторых наиболее широко используемых методов. Static Session getDefaultlnstance(Properties props, Authenticator authenticator) Метод getDefaultInstance() возвращает ссылку на экземпляр объекта Session в зависимости от указанных свойств и аутентификатора (authenticator). При первом вызове этого метода в JVM создается экземпляр Session и возвращается ссылка на него. При последующих вызовах этого метода ссылки на Session возвращаются только в том случае, если значение свойства Authenticator не отличается от отправленного с вызовом, создавшим этот экземпляр Session. Если же значение свойства Authenticator отличается от первого, генерируется исключение SecurityException.
Session getlnstance(Properties props, Authenticator authenticator) Метод getlnstance() создает и возвращает новый экземпляр Session в зависимости от указанных значений Properties и Authenticator. Store getStore(Java.lang.String protocol) throws NoSuchProviderException Метод getStore() возвращает экземпляр объекта Store для указанного протокола (например, getStore("РОРЗ") для INBOX протокола РОРЗ). Объекты Properties и Session Объект Properties, использующийся для получения экземпляра объекта Session, создается следующим образом: Java.util.Properties props = System.getProperties(); props.put("mail, store.protocol", "рорЗ"); props.put("mail.рорЗ.host", "mail.mydomain.com"); Session sess = Session.getlnstance(props, null); В табл. 14.2 приведены описания возможных свойств объекта Session.
Javax.mail.Store Класс javax.mail.Store реализуется провайдером и обычно представляет почтовый ящик пользователя. Основное предназначение данного класса — выступать в роли контейнера для объектов Folder. Не забывайте о том, что РОРЗ может работать только с одной папкой. Этот класс позволяет клиентскому приложению производить считывание, запись, мониторинг и поиск по определенному почтовому протоколу. Ниже приведены описания некоторых наиболее часто применяемых методов: Folder getDefaultFolder() throws MessagingException
Метод getDefaultFolder() возвращает экземпляр объекта Folder, представляющий собой корневую папку Store. Внимание: для работы с РОРЗ этот метод не используется. Folder getFolder(Java.lang.String name) throws MessagingException Метод getFolder() возвращает экземпляр объекта Folder для указанного имени (например, getFolder("INBOX") - для РОРЗ).
Javax.mail.Folder Провайдер услуг реализует и класс javax.mail.Folder. Этот класс содержит сообщения и вложенные папки в виде иерархии, подобно используемой в Windows Explorer. Помните, что РОРЗ может работать только с одной папкой INBOX. Имя INBOX заре-ервировано, оно является признаком корневой папки. Эта папка, закрытая по умолчанию, может быть открыта в режимах READONLY (только для чтения) или READWR1TE (для чтения и записи). Ниже приведены описания некоторых наиболее часто применяемых методов: boolean create(int type) throws MessagingException Метод create() создает в архиве папку указанного типа. В случае успеха операции метод возвращает значение true, и false — в случае неудачи. В табл. 14.3 приведен:лисок типов создаваемых папок.
boolean delete(boolean recurse) throws MessagingException Метод delete() позволяет удалить из архива Store закрытую папку. При успешном удалении он возвращает значение true, и false — при возникновении ошибки. Если аргументу recurse задано значение true, все вложенные папки вместе с содержащимися в них сообщениями также удаляются. Если же значение этого аргумента — false, а в папке содержатся вложенные папки, удалены они не будут (сообщения же, в зависимости от реализации метода, могут удаляться или нет). Message[] expunge() throws MessagingException Метод expunge() уничтожает все сообщения, помеченные как удаленные, и возвращает массив удаленных объектов Message. Message[] getMessages() throws MessagingException Метод getMessages() считывает все содержащиеся в папке сообщения. Если сообщений в папке нет, возвращается пустой массив. void open(int mode) throws MessagingException Метод open() открывает папку в указанном режиме. Режим может принимать значения Folder. READ_ONLY или Folder. READWRITE. Этот метод может использоваться только при работе с папками, способными содержать сообщения (т.е. тип которых — Folder.HOLDSMESSAGES). boolean renameTo(Folder f) throws MessagingException Метод renameTo() переименовывает закрытые папки. В качестве аргумента этому методу передается объект Folder, представляющий новое имя папки. Message[] search(SearchTerm term) throws MessagingException Метод search() производит в папке поиск сообщений, соответствующих указанному критерию. Метод возвращает массив, содержащий найденные сообщения или пустой массив, если совпадений поискового контекста не обнаружено. Поиск производится путем применения метода search (term, getMessages()) ко всем сообщениям папки. Message[] search(SearchTerm term, Message[] msgs) throws MessagingException Эта форма метода search() позволяет произвести контекстный поиск в массиве выбранных сообщений. Метод возвращает массив, содержащий найденные сообщения или пустой массив, если совпадений поискового контекста не обнаружено. Поиск производится путем циклического обхода массива сообщений и вызова метода match() с указанным контекстом поиска.
void setFlags(Message[] msgs, Flags flag, boolean value) throws MessagingException Метод setFlags() присваивает меткам указанного массива сообщений указанное значение (существуют переопределенные версии этого метода, позволяющие выбирать сообщения по-другому). Указанные объекты Message должны относиться к одной папке. Список используемых меток приведен в табл. 14.4.
Javax.mail.search Критерии поиска в JavaMail указываются в виде дерева поисковых терминов. В табл. 14.5 приведены классы пакета search.
Ниже приведен пример кода, в котором используется пакет javax.mail.search: if (msg-in.match(new AndTerm( new SubjectTerm("стандарты разработки"), new BodyTerm("отправить")))) { Message msg-out = msg-in.reply(); msg-out.setText("Стандарты разработки: запрос получен."); Transport.send(msg-out); }
Javax.mail.Address Класс javax.mail.Address — абстрактный класс, определяющий адрес сообщения. В большинстве случаев вы будете сталкиваться с такими реализациями этого класса, как javax.mail.internet.InternetAddress (см. ниже). javax.mail.internet.lnternetAddress javax.mail.internet.InternetAddress является реализацией класса javax.mail.Address и представляет адрес электронной почты. Этот класс применяется для указания получателей сообщения. Создать InternetAddress можно двумя способами:
• InternetAddress("e-mail@domain"), при помощи метода Constructor. • Вызовом метода InternetAddress.parse("e-maill@domain, e-mail2@domain, e-mail3@domain,..."), принимающего в качестве параметра строку String и возвращающего массив элементов типа InternetAddress. Адреса электронной почты в строке String разделяются запятой. javax.mail. Message Класс javax.mail.Message определяет сообщение электронной почты. Это абстрактный класс, являющийся реализацией интерфейса javax.mail.Part. Объект Message обладает такими атрибутами, как строка темы, отправитель, получатель (получатели), а также дата отправки. Эти атрибуты, представленные парами имя-значение, содержат необходимую для адресации информацию и определяют структуру содержимого сообщения (тип содержимого). Кроме того, класс Message включает в себя содержимое сообщения и метки, указывающие состояние папки (см. метод setFlags() класса Folder, описанного ранее). Сообщения могут содержать или один объект содержимого, или несколько таких объектов. В обоих случаях содержимое сообщения хранится в объекте DataHandler. javax.mail. internet.MimeMessage Класс javax.mail.internet.MimeMessage является наиболее часто используемой реализацией javax.mail.Message и представляет сообщение в MIME-кодировке (Multi-purpose Internet Mail Extensions). MIME-сообщение может содержать текст, изображение, аудио-, видеофрагмент или данные другого типа. На рис. 14.3 изображены компоненты объекта MimeMessage. MimeMessage может работать с сообщениями, состоящими из нескольких частей. Таким образом создается возможность подсоединения к сообщениям файлов. Ниже описано большинство методов MimeMessage, которыми пользуются при работе с этим объектом: MimeMessage(Session session) Метод MimeMessage() является стандартным конструктором этого объекта, он создает экземпляр пустого объекта message для данного объекта Session. Заголовку и меткам присваивается значение пустого объекта internetHeaders и объекта Flags соответственно. void addFrom(Address[] addresses) throws MessagingException Метод addFrom() вставляет в существующее поле From указанные адреса. Если такого поля нет, оно создается. void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException Метод addRecipients() вставляет в сообщение данные адреса указанного типа получателя. См. табл. 14.6 — в ней приведено описание типов получателей.
Java.util.Enumeration getAHHeaders () throws MessagingException Метод getAllHeadersO возвращает все заголовки в виде перечисления объектов Header. Если эти заголовки содержат символы, не входящие в таблицу US-ASCII, они кодируются и их нужно раскодировать. Java.util.Enumeration getAHHeaderLines () throws MessagingException Метод getAHHeaderLines () возвращает все заголовки в виде перечисления объектов String. Строка заголовка содержит названия и значения полей. Address [] getAHRecipients Q throws MessagingException Метод getAllRecipientsO возвращает все адреса получателей сообщения. Java.lang.Object getContent() throws java.io.IOException, MessagingException Метод getContent() возвращает содержимое сообщения в виде объекта Java. Тип данных этого объекта зависит от содержимого (например, объект типа String возвращается для содержимого типа "text/plain", объект MimeMultipart — для сообщения с содержимым типа "multipart". Объект типа InputStream возвращается, если тип содержимого неизвестен системе DataHandler. Этот метод извлекает содержимое сообщения, используя метод getDataHandler().getContent(). DataHandler getDataHandler() throws MessagingException Метод getDataHandler() возвращает объект DataHandler для хранения содержимого сообщения. Flags getFlags() throws MessagingException Метод getFlags() возвращает объект Flags, содержащий все метки данного сообщения. Объект Flags является копией внутреннего объекта Flags сообщения, поэтому внесенные в него изменения не отразятся на метках сообщения. Folder getFolder() Метод getFolder() (унаследованный от объекта Message) возвращает ссылку на папку, из которой было загружено сообщение. Если этот метод применить к новому сообщению, он возвращает пустую ссылку. Address[] getFrom() throws MessagingException Метод getFrom() возвращает значение поля From заголовка. Если этого поля в заголовке нет, вместо него используется поле Sender, если же и его нет — возвращается пустой указатель. java.io.InputStream getlnputStream() throws java.io.IOException, Mes sagingException Метод getlnputstream() возвращает декодированный входной поток содержимого сообщения. Этот метод получает поток от объекта DataHandler; т.е. вызывает метод getDataHandler().getInputstream(). java.lang.String getMessagelD() throws MessagingException Метод getMessagelD() возвращает значение поля Message-ID заголовка. Если это поле недоступно или у него нет значения, возвращается пустой указатель. int getMessageNumber() Метод getMessageNumber() (унаследованный от класса Message) возвращает номер сообщения. Номер сообщения — позиция сообщения по отношению к папке. Вновь созданные или унаследованные сообщения получают номер 0 (ноль); другие действительные номера сообщений начинаются с 1. Номер сообщения может измениться во время сеанса при удалении или стирании других сообщений папки. java.util.Date getReceivedDate() throws MessagingException Метод getReceivedDate() возвращает дату получения сообщения. Для сообщений MimeMessage этот метод пока что всегда возвращает пустой указатель; однако в других реализациях класса Message он может возвращать значение. Address[] getRecipients(Message.RecipientType type) throws MessagingException Метод getRecipients() возвращает список получателей указанного типа. Address[] getReplyTo() throws MessagingException Метод getReplyTo() возвращает значение поля Reply-To заголовка. Если это поле недоступно или у него нет значения, вызывается метод getFrom() и возвращается его значение. java.util.Date getSentDate() throws MessagingException Метод getSentDate () возвращает значение поля Date заголовка. Это дата отправки сообщения. Если это поле недоступно или у него нет значения, возвращается пустой указатель. int getSize() throws MessagingException Метод getSize() возвращает объем содержимого сообщения в байтах. Если объем не удается определить, возвращается значение -1. Обратите внимание: в возвращаемом значении может быть неточно отражен реальный объем содержимого сообщения, а также может быть учтена (либо не учтена) его кодировка. Java.lang.String getSubjectO throws MessagingException Метод getSubject() возвращает декодированное значение поля Subject заголовка. Если это поле недоступно или у него нет значения, возвращается пустой указатель. boolean isExpunged() Метод isExpunged() (унаследованный от класса Message) проверяет, было ли сообщение стерто. Ни один другой метод, кроме getMessageNumber(), не может применяться к стертым сообщениям. boolean isSet(Flags.Flag flag) throws MessagingException Метод isSet() проверяет, установлено ли значение true для указанной в аргументе метки. Если это так, метод возвращает значение true, если же нет — false. boolean match(SearchTerm term) throws MessagingException Метод match() (унаследованный от класса Message) возвращает положительный результат, если сообщение соответствует указанному критерию поиска SearchTerm и отрицательный — если нет. Message reply(boolean replyToAll) throws MessagingException Метод reply() создает объект Message и присваивает всем его заголовкам и атрибутам значения, соответствующие ответу. В новом сообщении нет никакого содержимого; его должен создать вызывающий этот метод объект. Поле Subject будет скопировано из оригинала письма и к нему будет добавлен префикс Re:. Если этот префикс уже имеется, новый не создается. Если это сообщение снабжено заголовком Message-Id, к нему присоединяется и заголовок In-Reply-To. Метке ANSWERED оригинала присваивается значение true. Если условию replyToAll присвоено значение true, новое сообщение будет адресовано всем получателям. Если же нет, то оно будет отправлено только отправителю оригинала (адрес которого будет получен вызовом метода getReplyTo()). void saveChanges() throws MessagingException Метод saveCnanges() обновляет соответствующие заголовки сообщения и приводит их в соответствие с его содержимым. В его функции входит и создание уникальных идентификаторов для новых сообщений. Если сообщение хранится в папке, все внесенные в него изменения сохраняются в этой папке. При изменении любой части сообщения (заголовка или содержимого) необходимо вызвать метод saveChanges(), чтобы все изменения были сохранены. Если этого не сделать, изменения могут и не сохраниться (это зависит от реализации папки). Сообщения, полученные из папок, открытых как READONLY, не должны модифицироваться — а значит, и метод saveChanges() также не должен вызываться. void setContent(Java.lang.Object о, Java.lang.String type) throws MessagingException Этот вариант метода setContent() устанавливает содержимое и MIME-тип содержимого сообщения (например, setContent ("my content", "text/html")). Содержимое сохраняется в объекте DataHandler. Класс DataContentHandler для соответствующего типа данных должен быть установлен и доступен системе JavaMail — иначе этот метод не сможет корректно работать. Например, присоединить файл Acrobat PDF к сообщению при помощи вызова метода setContent (mypdf, "application/pdf') можно только если доступен класс DataContentHandler для типа "application/pdf. void setContent(Multipart mp) throws MessagingException Этот вариант метода setContent () присваивает содержимому сообщения значение содержимого объекта Multipart. void setExpunged(boolean expunged) Метод setExpunged () (унаследованный от класса Message) присваивает метке expunged объекта Message указанное значение. void setFlags(Flags flag, boolean set) throws MessagingException Метод setFlags() присваивает меткам сообщения указанные значения. void setFrom() throws MessagingException Этот вариант метода setFrom() присваивает полю From заголовка значение, возвращаемое методом InternetAddress.getLocalAddressO, замещая любое имевшееся ранее значение. void setFrom(Address address) throws MessagingException Этот вариант метода setFrom() присваивает полю заголовка From значение данного адреса, замещая любое имевшееся ранее значение. Если массив адресов, передаваемый методу в качестве параметра, пуст, поле заголовка From удаляется. void setRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException Метод setRecipients() присваивает адреса получателей указанному типу. Описание типов получателей приведено в табл. 14.6. void setReplyTo(Address[] addresses) throws MessagingException Метод setReplyTo() устанавливает значение поля заголовка Reply-To. Если адрес, передаваемый методу в качестве параметра, пуст, это поле заголовка удаляется, void setSentDatefjava.util.Date date) throws MessagingException Метод setSentDate() устанавливает значение поля заголовка Date. В этом поле хранится дата окончания письма и подготовки его к отправке. Если дата, передаваемая методу в качестве параметра, пуста, поле заголовка Date удаляется. void setSubject(java.lang.String subject) throws MessagingException void setSubject(java.lang.String subject, java.lang.String charset) throws MessagingException Методы setSubject() устанавливают значение поля заголовка subject. Если в этом поле содержатся только символы таблицы US-ASCII, указывать применяемый набор символов не нужно. Если в этом поле содержатся символы, не входящие в таблицу US-ASCII, нужно указать используемый набор символов, и для поля будет установлена соответствующая кодировка. Если параметр, передаваемый этому методу, пуст, поле заголовка Subject удаляется. void setText(java.lang.String text) throws MessagingException Этот вариант метода setText() присваивает содержимому сообщения значение указанного объекта String, с MIME-типом text/plain. Производительность данного метода при работе с большими объемами текста невелика, так как он проверяет все символы текста, определяя, какой набор символов нужно использовать. void setText(Java.lang.String text, Java.lang.String charset) throws MessagingException Этот вариант метода setText() присваивает содержимому сообщения значение указанного объекта String с MIME-типом text/plain. Содержимое объекта String при этом кодируется с использованием указанного набора символов. javax.mail.Transport Класс javax.mail.Transport также реализуется провайдером. Применяется он только с одной целью — для отправки сообщений с использованием указанного протокола. Сообщение отправляется вызовом статического метода send() (например send(Message msg, Address[] addresses)). Ниже приведено описание его наиболее часто использующихся методов: void send(Message msg) throws MessagingException Этот вариант метода send() отправляет сообщение всем получателям, адреса которых указаны в сообщении (и которые можно получить вызовом метода getAllRecipients()), применяя соответствующие каждому адресу транспортные протоколы. Перед отправкой сообщения вызывается его метод saveChanges(). Если любой из адресов получателей указан неверно, генерируется исключение SendFailedException. Будет ли сообщение после этого успешно отправлено получателям, адреса которых указаны верно, зависит от реализации объекта Transport. Объект SendFailedException позволяет определить результат отправки сообщения каждому из адресатов с помощью следующих методов: getInvalidAddresses() возвращает массив Address[], содержащий неверные адреса. getValidSentAddressesO возвращает Address[], содержащий адреса, отправка сообщения по которым прошла успешно. getValidUnsentAddresses() возвращает массив Address[], содержащий адреса, по которым отправить сообщения не удалось, void send(Message msg, Address[] addresses) throws MessagingException Этот вариант метода send() отправляет сообщение по указанному адресу, игнорируя адреса, указанные в самом сообщении. Перед отправкой сообщения вызывается его метод saveChanges(). void sendMessage(Message msg, Address[] addresses) throws MessagingException Метод sendMessage() отправляет сообщение по адресам, указанным в списке. Если любой из адресов получателей указан неверно, генерируется исключение SendFailedException, но сообщение все равно отправляется по правильным адресам. Этот метод не вызывает saveChanges() самостоятельно.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2020-03-02; просмотров: 146; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.216.87.156 (0.131 с.) |