Электронный магазин на Java и XML

Класс Emailer


Класс Emailer используется для отправки электронных сообщений клиенту. Эти сообщения могут содержать подтверждение заказа или информацию о доставке. В этом классе имеются две статические переменные, необходимые для его конфигурирования. Первая переменная — имя сервера SMTP (Simple Mail Transfer Protocol — простой протокол электронной почты), который используется данным магазином для отправки почты. Вторая переменная — электронный адрес, который будет указан в письмах клиенту в качестве обратного, то есть в поле From (От). В нашем примере мы используем формат, в котором указывается как название фирмы XMLGifts, так и ее электронный адрес (orders® xmlgifts.com). Прежде чем использовать код, приведенный на прилагаемом к нашей книге компакт-диске, вы, разумеется, должны заменить эти данные теми, которые фактически фигурируют в вашей системе. Имя сервера SMTP, используемого для пересылки электронной почты, можно найти в параметрах конфигурации вашей почтовой программы. В листинге 5.12 показано начало кода класса Emailer.

Листинг 5.12. Начало кода класса Emailer (Emailer.java)

package com.XmlEcomBook.Chap05;

import java.util.*;

import java.io.*;

import javax.mail.*;

import javax.mail.internet.*;

public class Emailer {

static final String host = "SMTP-HOST-NAME";

static final String from = "XMLGifts<orders@xmlgifts.com>";

Первый метод в этом классе используется для сообщения клиенту об отправке ему посылки с заказом. Хотя это подтверждение не является абсолютно необходимым, оно имеет большое значение, так как клиент, получив такое сообщение, будет уверен, что его заказ действительно выполняется, а также найдет ответы на возможные вопросы о доставке заказа. В этом методе после получения информации о пользователе из объекта класса Order мы вызываем служебный метод под названием <jetMessage, передавая ему в качестве параметра электронный адрес клиента. Метод getMessage создает объект Message с помощью интерфейса API JavaMail, о чем будет подробнее сказано далее в этом разделе. В объекте Message указывается тема сообщения и вносится текст, после чего письмо отправляется. Отправка письма осуществляется с помощью метода send объекта Transport из интерфейса API JavaMail. Этот метод создает простое сообщение (листинг 5.13), в котором указывается идентификатор заказа, чтобы клиент мог в дальнейшем на него ссылаться. Метод можно легко расширить, чтобы включить более детальную информацию о заказе.






Листинг 5.13. Метод sendConfiramtion (Emailer.java)

public static void sendConfirmation(Order order) {

try {

CustomerInfo cust = order.getCustomerInfo();

Message msg = getMessage( cust.getEmail() );

msg.setSubject("XMLGifts.com Order Confirmation");

msg.setText("Your order is being processed");

msg.setText("Your order number is:" + order.getId() );

Transport.send(msg);

}

catch (MessagingException mex) {

}

}

Метод sendShipped (листинг 5.14) аналогичен методу sendConfirmation, отличие касается только текста посылаемого сообщения. /



Листинг 5.14. Метод sendShipped (Emailer.java)

public static void sendShipped(String email, String orderId ) {

try {

Message msg = getMessage( email );

msg.setSubject("Your XMLGifts.com Order has shipped");

msg.setText("Order number " + orderId + " has shipped" );

Transport.send(msg);

}

catch (MessagingException mex) {

}

}

Метод getMessage используется другими методами класса для осуществления большинства действий, необходимых при работе с интерфейсом API JavaMail. Аргументом этого метода является электронный адрес клиента, которому посылается сообщение. В первую очередь в этом методе создается новый объект Session, а его значением становится имя сервера SMTP, которое, как вы помните, берется из статической переменной класса Emailег. Затем создается новый объект Message и устанавливаются значения полей, отведенных для адресов отправителя и получателя сообщения, а также для текущей даты (на которую можно впоследствии ссылаться как на дату отправки сообщения).

Интерфейс прикладных программ (API) JavaMail — это набор классов, которые моделируют систему электронной почты и являются стандартным расширением Java. Этот интерфейс можно использовать для получения и отправления сообщений с помощью стандартных почтовых протоколов. Более подробную информацию вы найдете по адресу http://java.sun.com/products/javamail, и оттуда же вы сможете бесплатно загрузить версию 1.2 этого интерфейса API. Метод getMessage (листинг 5.15) использует интерфейс JavaMail для создания нового объекта Message, в котором указаны адреса отправителя и получателя, а также текущая дата.



Листинг 5.15. Метод getMessage (Emailer.java)

static Message getMessage( String toEmail ) throws MessagingException {

Properties props = new Properties();

props.put("mail.smtp.host", host);

Session session = Session.getDefaultInstance(props, null);

session.setDebug(true);

Message msg = new MimeMessage(session);

msg.setFrom(new InternetAddress(from));

InternetAddress[] address = {new InternetAddress(toEmail)};

msg.setRecipients(Message.RecipientType.TO, address);

msg.setSentDate(new Date());

return msg;

}

}

 




Содержание раздела