Использование JavaMail в JavaServer-страницах 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Использование JavaMail в JavaServer-страницах



В этом разделе мы рассмотрим возможности вызова кода JavaMail из приложений J2EE. В качестве примеров в основном используется код страниц JavaServer Pages (JSP) и связанные с ним пакеты J2EE. Предназначение данного раздела — помочь читателю самостоятельно создать две функции, использующие JavaMail для отправки и получе­ния почты. Ниже приведена структура папок для этого упражнения:

JavaMail

JavaMail\src

JavaMail\src\app

JavaMail\src\app\docroot

JavaMail\src\app\docroot\web-inf

JavaMail\src\earroot

JavaMail\src\earroot\Meta-inf

Общие указания

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

Создание HTML-формы

1. При помощи Notepad создайте HTML-форму и сохраните ее в файле с именем sendmail.html в папке JavaMail\src\app\docroot.

1. Форма должна обладать следующими характеристиками:

Текстовое поле с именем from.

Текстовое поле с именем to.

Текстовое поле с именем subject.

Поле textarea с именем msgpartl.

Поле textarea с именем msgpart2.

Кнопка Submit.

Атрибут action тега form должен иметь значение http://localhost/JavaMail/app/sendmail.jsp (замените localhost/JavaMail на соответствующие имена сервера и папки вашей системы).

В качестве атрибута method тега form должен быть установлен post.

Создание отправляющего JSP-файла

 

1. При помощи Notepad создайте текстовый файл с именем sendmail.jsp в папке JavaMail\src\app\docroot.

2. Добавьте директиву JSP для импорта следующих пакетов:

javax.naming.*

javax.mail.*

javax.mail.internet.*

java.util.*

 

3. Получите ссылку на объект Session JavaMail через JNDI при помощи JNDI-имени java:comp/env/mail/mymail.

Создайте сообщение из двух частей;

первая его часть должна содержать данные из поля формы msgpartl, а вторая — из поля msgpart2.

Отправьте сообщение по адресам, указанным в поле ТО. Создание получающего JSP-файла

 

В Notepad создайте текстовый файл с именем readmail.jsp в папке JavaMail\src\ app\docroot.

Добавьте директиву JSP для импорта следующих пакетов:

javax.naming.*

javax.mail.*

javax.mail.internet.*

java.util.*

 

Получите имя пользователя, пароль и почтовый сервер из строки запроса, вос­пользовавшись ключами user-id, password и server.

Получите указатель на объект JavaMail Session через JNDI, воспользовавшись JNDI-именем java:comp/env/mail/mymail.

Считайте все сообщения и выведите их в браузер пользователя. Создание файла и2ЕЕ-приложения

В Notepad создайте текстовый файл с именем application.xml в папке JavaMail\src\ earroot\Meta-inf. Файл должен связать контекст (context root) с именем арр, с архивом Web Archive, javamail.war:

<web-un>javamail.war</web-uri> <context-root>app</context-root>

 

Создание дескриптора доставки J2EE

В Notepad создайте текстовый файл с именем web.xml в папке JavaMail\src\app\ docroot\web-inf. Этот файл будет определять главную страницу, sendmail.html, прило­жения:

<welcome-file-list>

<welcome-file>sendmail.html</welcome-file>

</welcome-file-list>

Кроме того, необходимо добавить JNDI-ссылку на ресурс для объекта Session:

<resource-ref> <descriptionX/description

<res-ref-name>mail/mymail</res-ref-name>

<res-type>javax.mail.Session</res-type>

<res-auth>Container</res-auth>

</resource-ref>

 

Создание плана доставки J2EE

В Notepad создайте текстовый файл с именем javamail.plan.xml в корневой папке JavaMail. В теге <warJar> нужно ввести строки, необходимые для получения указателя на объект Session через JNDI.

 

Создание web-архива и архива предприятия

Из папки JavaMail\src\app при помощи утилиты jar создайте архив Web Archive (WAR) и дайте ему имя javamail.war. Из корневой папки JavaMail сделайте архив Enterprise Archive (EAR) и дайте ему имя javamail.ear.

Доставка архива предприятия

Выполните доставку архива Enterprise Archive (EAR) при помощи соответствующей вашему серверу J2EE-пpилoжeний инструментальной программы.

Тестирование страниц

По завершении работы над кодом проведите тестирование страниц отправки и по­лучения сообщений, выполнив следующие действия:

1. Запустите страницу sendmail.html

http://localhost/JavaMail/app/sendmail.html (замените localhost/JavaMail на соответ­ствующие имена сервера и папки вашей системы), заполните HTML-форму и на­жмите Send. На рис. 14.4 изображена заполненная HTML-форма.

2. Запустите страницу readmail.jsp

http://localhost/JavaMail/app/readmail.jsp?userid=<userid>&password=<pass>&server=<srvr> (замените на соответ­ствующие имена сервера и папки вашей системы, замените и значения user-id, pass и srvr). На рис. 14.5 изображен результат работы JSP.

 

Подробные указания

Ниже приведены подробные указания по созданию J2EE-пpилoжeния JavaMail.

Создание HTML-формы

Прежде всего нужно создать файл с кодом формы:

Создайте текстовый файл в каком-нибудь редакторе.

Java.util.Properties props = System.getProperties();

props.put("mail.store.protocol", "рорЗ");

props.put("mail.рорЗ.host", "mydomain.com");

Session sess = Session.getlnstance(props, null);

Store store = sess.getStore("рорЗ");

store.connect("mydomain.com", "paul.alien", "mypass");

Folder inbox = store.getFolder("INBOX");

inbox.open(Folder. READ_ONLY);

Message[] msgs = inbox.getMessages();

for(int i=0;i<msgs.length;i++) {

Object о = Msg.getContentO;

if (o instanceof MimeMultipart) {

// Сообщение состоит из нескольких частей,

// значит, его нужно отправить в контейнер MimeMultipart mp = (MimeMultipart) о;

// Циклический обход контейнера

for (int i=0, count=mp. getCount (); Kcount; i++) {

    // Получение отдельной части Part p = mp.getBodyPart(i);

if (ip.getContentType().equals("text/plain")) {

   // Если сообщение содержит не текст,

   // получаем декодированный поток InputStream.

   InputStream is = p.getInputStream();

   // Пробуем получить имя файла фрагмента

   String filename = p.getFileName();

   if (filename = null) filename = "content"+i;

   // Создаем OutputStream

   OutputStream os = new FileOutputStream(filename);

   int b;

    byte buffer[] = new byte[1024];

   // Считываем блок файла и записываем его

   while ((b = is.read(buffer)) > 0)

   {

     os.write(buffer, 0, b);

   }

   // Сообщаем о наличии присоединенных данных System.out.println(filename+" сохранен на диске");

   // Вызываем метод Flush объекта OutputStream и закрываем его os.flush ();

   os. close ();

} else {

   // Вывод содержимого

   System.out.println(p.getContent());

}

}

} else {

// Иначе — сообщение состоит из одной части message // Вывод содержимого

System.out.println(msgs[i].getContent());

}

}

// Закрываем папку и архив Inbox.close(false);

store.close ();

 

Определите необходимые теги HTML-страницы.

<html> </html>

 


 

3. В только что созданный тег <html> вставьте тег form. Значение его атрибута action

должно быть /sendmail.jsp, значение атрибута method — post (в качестве текущей

базы данных подставьте JavaMail).

<form action="sendmail.jsp" method="post"> </form>

 

4. В тег <form>, созданный на этапе 3, вставьте поля ввода.

<p>From (адрес электронной почты)

<input type="text" name="from" size="32" maxlength="32"> </p>

<p>To (адрес электронной почты)

<input type="text" name="to" size="32" maxlength="32"> </p> <pX/p> <p>Subject

<input type="text" name="subject" size="50" maxlength="50"> <br>

Message Partfl

<textarea cols="50" rows="5" name="msgpartl"X/textarea> <br>

Message Part#2

<textarea cols="50" rows="5" name="msgpart2"X/textarea> <br>

<input type="submit"> <br> </p>

 

5. Сохраните файл под именем sendmail.html в папке JavaMail\src\app\docroot.

Создание отправляющего JSP-файла

Следующим шагом будет создание файла, содержащего JSP-код, отправляющий со­общение адресату:

Создайте текстовый файл.

Добавьте директиву JSP для импорта следующих пакетов:

javax.naming.*

javax.mail.*

javax.mail.internet.*

java.util.*

<%@ page import= "javax.naming.*,javax.mail.*,javax.mail.internet.*, java.util.*" %>

 

3. При помощи JNDI получите указатель на объект Session через JNDI-имя javaxomp/env/mail/mymail:

<%

InitialContext ic = new InitialContext();

Session sess = (Session) ic.lookup("java:comp/env/mail/mymail");

 

4. Создайте сообщение из двух частей, первая часть которого будет получена из поля

формы msgpartl, а вторая — из поля msgpait2:

MimeMessage m = new MimeMessage(sess);

MimeBodyPart parti = new MimeBodyPart();

parti.setContent(request.getParameter("msgpartl"),"text/plain");

MimeBodyPart part2 = new MimeBodyPart();

part2.setContent(request.getParameter("msgpart2"),"text/plain");

MimeMultipart mp = new MimeMultipart();

mp.addBodyPart(parti);

mp.addBodyPart(part2);

m.setContent(mp);

 

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

m.set From(new InternetAddress(request. getParameter("from")));

m.setRecipients(Message.RecipientType,TO,InternetAddress.parse(request.getParameter("to"),false));

m.setSubject(request.getParameter("subject"));

 

6. Отправьте сообщение:

Transport.send(m);

out.println("Сообщение отправлено.");

%>

 

7. Сохраните файл в папке JavaMail\src\app\docroot под именем sendmail.jsp.

Создание получающего JSP-файла

Следующим шагом будет создание файла, содержащего JSP-код, получающий сооб­щения из почтового ящика пользователя:

Создайте текстовый файл.

Добавьте директиву JSP для импорта следующих пакетов:

javax.naming.*

javax.mail.*

javax.mail.internet.*

Java.util.* <%@ page import="javax.naming.*, javax.mail.*, javax.mail.internet.*, Java.util.*" %>

 

3. При помощи JNDI получите указатель на объект Session через JNDI-имя

java:comp/env/mail/mymail:

<% InitialContext ic = new InitialContext();

Session sess = (Session) ic.lookup("java:comp/env/mail/mymail");

 

4. Получите параметры userid и password из строки запроса URL:

String userid = request.getParameter("userid");

String password = request.getParameter("password");

String server = request.getParameter("server");

5. Подсоединитесь к Store при помощи параметров userid и password, полученных из

запроса на этапе 4:

Store store = sess.getStore();

store.connect(server,userid,password);

 

6. Откройте папку:

Folder folder = store.getFolder("INBOX");

folder.open(Folder.READ_WRITE);

 

7. Считайте все сообщения и отправьте их в браузер:

Message[] msg = folder.getMessages();

for(int i=0;i<msg.length;i++) {

out.println("<р>Сообщение: "+msg[i].getMessageNumber()+"<br>");

out.println("От: "+msg[i].getFromf)[0]+"<br>");

out.println("Дата отправки: "+msg[i].getSentDatef)+"<br>");

out.println("Тема: "+msg[i].getSubject()+"<br>");

if(msg[i].getContent() instanceof MimeMultipart) {

MimeMultipart mp = (MimeMultipart) msg[i].getContent();

for(int j=0,count=mp.getCount();j<count;j++) { 

Part p = mp.getBodyPart(j);

out.println(" начало содержимого multipart <br>");

out.println(p.getContent() + "<br>");

out.println(" конец содержимого multipart <br>");

} else {

out.println(" начало содержимого <br>");

out.println(msg[i].getContent()+"<br>");

out.println(" конец содержимого <br>");

}

out.println("</p>");

}

folder.close(false);

store.close();%>

 

8. Сохраните файл в папке JavaMail\src\app\docroot под именем readmail.jsp.

Создание файла J2EE-приложения

В Notepad создайте текстовый файл с именем application.xml в папке JavaMail\src\earroot\Meta-inf. Ниже приведено содержимое этого файла:

<?xml version="1.0" encoding="IS08859_l"?>

<!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.

//DTD J2EE Application 1.2//EN'

'http://java.sun.com/j2ee/dtds/application_l_2.dtd'> <application>

<display-name>JavaMail</display-name>

<description>OroicaHHe пpилoжeния</description>

<module> <web>

<web-uri>javamail.war</web-uri>

<context-root>app</context-root>

</web> </module> </application>

 

Создание дескриптора доставки J2EE

В Notepad создайте текстовый файл web.xml в папке JavaMail\src\app\docroot\web-inf. Этот файл будет определять главную страницу, sendmail.html, приложения, а также создавать ссылку на JNDI-pecypc для объекта Session. Ниже приведен код этого файла:

<?xml version="l.О" encoding="IS0-8859-l"?> <!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>

<! — Список Welcome File —> <welcome-file-list>

<welcome-file>sendmail.html</welcome-file> </welcome-file-list> <resource-ref> <descriptionX/description> <res-ref-name>mail/mymail</res-ref-name> <res-type>javax.mail.Session</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app>

 

Создание плана доставки J2EE

В Notepad создайте текстовый файл с именем javamail.plan.xml в корневой папке JavaMail. В тег <warJar> нужно вставить строки, необходимые для получения указателя на объект Session через JNDI. Ниже приведен полный текст этого файла для среды сервера приложений SilverStream (см. гл. 19;

в этой главе содержится более подробная информация о содержимом этого файла для других J2EE-coBMecraMbix серверов прило­жений):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?AgMetaXML 1.0?>

<earJarOptions isObject="true"> <earjar isObject="true">

<earJarName>javamail.ear</earJarName>

<moduleList isObject="true"> <module isObject="true">

<warJar isObject="true">

<warJarName>javamail.war</warJarName>

<isEnabled type="Boolean">true</isEnabled>

<URL>javaniail</URL>

<resourceReferenceList isObject="true"> <resourceReference isObject="true">

<name>mail/mymail</name>

<mailRefProperties type="StringArray">

<el>mail.transport.protocol</el>

<el>smtp</el>

<el>mail.host</el>

<el>ucny.com</el>

<el>mail.store.protocol</el>

<el>pop3</el>

</mailRefProperties></resourceReference></resourceReferenceList>

</warJar></module></moduleList></earJar></earJarOptions>

 



Поделиться:


Последнее изменение этой страницы: 2020-03-02; просмотров: 99; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.79.60 (0.083 с.)