Ostatnio na laborki na uczelni miałem przygotować krótki referat o wysyłaniu maili w JSP przy użyciu JavaMail. Umieszczę go tutaj dla potomności. Może się komuś przyda.

Pakiet JavaMail jest standardowym składnikiem platformy Java EE, ale jeśli korzystamy z Javy SE, musimy go sobie doinstalować. Możemy go pobrać ze strony Suna. O samej instalacji nie będę się rozpisywał, bo jest dobrze opisana w pliku readme. Gdy już doinstalujemy JavaMail, możemy się zabrać za pisanie skryptu.

Jako przykład aplikacji wysyłającej mail stworzymy prosty formularz rejestracyjny. Użytkownik będzie musiał podać swój login i adres e-mail, a program odeśle mu, na podany adres, losowo wygenerowane hasło. Formularz rejestracji może wyglądać tak jak na screenie poniżej:

Po kliknięciu guzika “Zapisz” dane przekazywane są do skryptu rejestracja.jsp, w którym dzieje się cała magia. Teraz krok po kroku opiszę co się w tym skrypcie dzieje.

Na początku importujemy pakiety javax.mail.*javax.mail.internet.*. to dzięki nim uzyskamy dostęp do możliwości oferowanych przez JavaMail. Pakiet java.util.* przyda nam się do wygenerowania losowego hasła oraz aby uzyskać dostęp do klasy Properties (ale o tym za chwilę).

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

Teraz musimy utworzyć sesję. Potrzebny nam będzie do tego obiekt klasy Properties, służący do przekazania odpowiednich wartości do sesji.

Properties props = new Properties();
props.put("mail.smtp.host", "localhost");
Session mailSession = Session.getInstance(props);

Następnie przygotowujemy wiadomość do wysyłki. Musimy ustawić nadawcę, odbiorcę, temat, treść i datę. Możemy również dodać dowolne nagłówki przy pomocy metody setHeader().

Message msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress(addressFrom)); //nadawca
msg.addRecipient(Message.RecipientType.TO,
    new InternetAddress(addressTo)); //odbiorca
msg.setSubject(mailSubject); //temat
msg.setText(mailBody); //treść
msg.setSentDate(new Date()); //data wysyłki
msg.setHeader("X-Mailer", "JavaMail API"); //dodatkowe nagłówki

Gdy mamy już gotową wiadomość, możemy ją wysłać:

Transport.send(msg);
out.println("Wiadomość wysłana na adres " + addressTo);

Formularz i kod skryptu rejestracja.jsp można pobrać tutaj: JavaMail.zip.