Serwlety - wysyłanie wiadomości e-mail
Wysłanie wiadomości e-mail za pomocą serwletu jest dość proste, ale na początek powinieneś JavaMail API i Java Activation Framework (JAF) zainstalowany na twoim komputerze.
Możesz pobrać najnowszą wersję JavaMail (wersja 1.2) ze standardowej witryny Java.
Możesz pobrać najnowszą wersję JAF (wersja 1.1.1) ze standardowej witryny Java.
Pobierz i rozpakuj te pliki, w nowo utworzonych katalogach najwyższego poziomu znajdziesz kilka plików jar dla obu aplikacji. Musisz dodaćmail.jar i activation.jar pliki w CLASSPATH.
Wyślij prostą wiadomość e-mail
Oto przykład wysyłania prostej wiadomości e-mail z komputera. Tutaj zakłada się, że twójlocalhostjest podłączony do internetu i może wysyłać e-maile. Jednocześnie upewnij się, że wszystkie pliki jar z pakietu Java Email API i pakietu JAF są dostępne w CLASSPATH.
// File Name SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Now set the actual message
message.setText("This is actual message");
// Send message
Transport.send(message);
String title = "Send Email";
String res = "Sent message successfully....";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<p align = \"center\">" + res + "</p>\n" +
"</body>
</html>"
);
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Teraz skompilujmy powyższy serwlet i utwórzmy następujące wpisy w web.xml
....
<servlet>
<servlet-name>SendEmail</servlet-name>
<servlet-class>SendEmail</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SendEmail</servlet-name>
<url-pattern>/SendEmail</url-pattern>
</servlet-mapping>
....
Teraz wywołaj ten serwlet za pomocą adresu URL http: // localhost: 8080 / SendEmail, który wyśle wiadomość e-mail na podany identyfikator e-mail [email protected] i wyświetli następującą odpowiedź -
Send Email
Sent message successfully....
Jeśli chcesz wysłać wiadomość e-mail do wielu odbiorców, użyj następujących metod, aby określić wiele identyfikatorów e-mail -
void addRecipients(Message.RecipientType type, Address[] addresses)
throws MessagingException
Oto opis parametrów -
type- To byłoby ustawione na TO, CC lub BCC. Tutaj CC oznacza Carbon Copy, a BCC reprezentuje Black Carbon Copy. Przykład Message.RecipientType.TO
addresses- To jest tablica identyfikatorów e-mail. Podczas określania identyfikatorów e-mail należy użyć metody InternetAddress ().
Wyślij e-mail w formacie HTML
Oto przykład wysyłania wiadomości e-mail w formacie HTML z komputera. Tutaj zakłada się, że twójlocalhostjest podłączony do internetu i może wysyłać e-maile. Jednocześnie upewnij się, że wszystkie pliki jar z pakietu Java Email API i pakietu JAF są dostępne w CLASSPATH.
Ten przykład jest bardzo podobny do poprzedniego, z tym że tutaj używamy metody setContent () do ustawienia treści, której drugi argument to „text / html”, aby określić, że treść HTML jest zawarta w wiadomości.
Korzystając z tego przykładu, możesz wysyłać dowolną zawartość HTML.
// File Name SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Send the actual HTML message, as big as you like
message.setContent("<h1>This is actual message</h1>", "text/html" );
// Send message
Transport.send(message);
String title = "Send Email";
String res = "Sent message successfully....";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<p align = \"center\">" + res + "</p>\n" +
"</body>
</html>"
);
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Skompiluj i uruchom powyższy serwlet, aby wysłać wiadomość HTML na podany identyfikator e-mail.
Wyślij załącznik e-mailem
Oto przykład wysyłania wiadomości e-mail z załącznikiem z komputera. Tutaj zakłada się, że twójlocalhost jest podłączony do internetu i może wysyłać e-maile.
// File Name SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Create the message part
BodyPart messageBodyPart = new MimeBodyPart();
// Fill the message
messageBodyPart.setText("This is message body");
// Create a multipar message
Multipart multipart = new MimeMultipart();
// Set text message part
multipart.addBodyPart(messageBodyPart);
// Part two is attachment
messageBodyPart = new MimeBodyPart();
String filename = "file.txt";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
// Send the complete message parts
message.setContent(multipart );
// Send message
Transport.send(message);
String title = "Send Email";
String res = "Sent message successfully....";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<p align = \"center\">" + res + "</p>\n" +
"</body>
</html>"
);
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Skompiluj i uruchom powyższy serwlet, aby wysłać plik jako załącznik wraz z wiadomością o podanym identyfikatorze e-mail.
Część dotycząca uwierzytelniania użytkownika
Jeśli wymagane jest podanie identyfikatora użytkownika i hasła do serwera poczty e-mail w celu uwierzytelnienia, możesz ustawić te właściwości w następujący sposób -
props.setProperty("mail.user", "myuser");
props.setProperty("mail.password", "mypwd");
Reszta mechanizmu wysyłania wiadomości e-mail pozostanie taka, jak wyjaśniono powyżej.