English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Invio di email di Servlet

È molto semplice inviare una email utilizzando Servlet, ma prima devi installare JavaMail API e Java Activation Framework) JAF

  • Puoi scaricare l'ultima versione disponibile dal sito Java JavaMailApri la pagina destra, c'è Downloads Clicca sul link per scaricarlo.

  • Puoi scaricare l'ultima versione disponibile dal sito Java JAF (versione 1.1.1)

Puoi anche utilizzare i link di download forniti sul nostro sito:

Scarica e decomprimi questi file, nel nuovo directory principale creato, troverai alcuni file jar di queste applicazioni. Devi aggiungere mail.jar e activation.jar Aggiungi il file alla tua CLASSPATH.

Invio di una semplice email

Esempio di invio di una semplice email dal tuo computer. Supponiamo che tu abbiaHost localeConnesso a Internet e supporta l'invio di email. Assicurarsi che tutti i file jar del pacchetto Java Email API e JAF siano disponibili nel CLASSPATH.

// 文件名 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
  {
      // 收件人的电子邮件 ID
      String to = "[email protected]";
 
      // 发件人的电子邮件 ID
      String from = "[email protected]";
 
      // 假设您是从本地主机发送电子邮件
      String host = "localhost";
 
      // 获取系统的属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象
      Session session = Session.getDefaultInstance(properties);
      
      // 设置响应内容类型
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
      try{
         // Crea un oggetto MimeMessage di default
         MimeMessage message = new MimeMessage(session);
         // Imposta il campo header From: dell'intestazione.
         message.setFrom(new InternetAddress(from));
         // Imposta il campo header To: dell'intestazione.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
         // Imposta il campo header Subject:
         message.setSubject("Questo è l'intestazione del soggetto!");
         // Ora impostiamo il messaggio reale
         message.setText("This is actual message");
         // Invia il messaggio
         Transport.send(message);
         String title = "Invia e-mail";
         String res = "Messaggio inviato con successo...";
         String docType = "<!DOCTYPE html> \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();
      
   

Ora compiliamo il seguente Servlet e creiamo la seguente voce nel file 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>
....

Ora chiamare questo Servlet tramite l'URL http://localhost:8080/SendEmail. Questo invierà una email all'ID email fornito [email protected]e mostrerà la risposta di seguito:

Inviare email

Messaggio inviato con successo...

Se si desidera inviare una email a più destinatari, utilizzare il seguente metodo per specificare più ID di email:

void addRecipients(Message.RecipientType type, 
                   Address[] addresses)
throws MessagingException

Di seguito è una descrizione dei parametri:

  • type:Questo verrà impostato su TO, CC o BCC. In questo caso, CC rappresenta CC e BCC rappresenta CC nascosto. Ad esempio Message.RecipientType.TO

  • addresses:Questo è un array di ID di email. Quando si specifica un ID di email, è necessario utilizzare il metodo InternetAddress().

Inviare una email HTML

Il seguente esempio invierà una email in formato HTML dal tuo computer. Supponiamo che la tuaHost localeConnesso a Internet e supporta l'invio di email. Assicurarsi che tutti i file jar del pacchetto Java Email API e JAF siano disponibili nel CLASSPATH.

Questo esempio è molto simile al precedente, ma qui utilizziamo il metodo setContent() per impostare il secondo parametro su "text/html", che specifica che il contenuto HTML è incluso nel messaggio.

Utilizzando questo esempio, è possibile inviare contenuti HTML di qualsiasi dimensione.

// 文件名 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
  {
      // 收件人的电子邮件 ID
      String to = "[email protected]";
 
      // 发件人的电子邮件 ID
      String from = "[email protected]";
 
      // 假设您是从本地主机发送电子邮件
      String host = "localhost";
 
      // 获取系统的属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象
      Session session = Session.getDefaultInstance(properties);
      
      // 设置响应内容类型
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
      try{
         // Crea un oggetto MimeMessage di default
         MimeMessage message = new MimeMessage(session);
         // Imposta il campo header From: dell'intestazione.
         message.setFrom(new InternetAddress(from));
         // Imposta il campo header To: dell'intestazione.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
         // Imposta il campo header Subject:
         message.setSubject("Questo è l'intestazione del soggetto!");
         // 设置实际的 HTML 消息,内容大小不限
         message.setContent("<h1>This is actual message</h1>",
                            "text/html");
         // Invia il messaggio
         Transport.send(message);
         String title = "Invia e-mail";
         String res = "Messaggio inviato con successo...";
         String docType = "<!DOCTYPE html> \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();
      
   

Compilare ed eseguire il Servlet sopra riportato per inviare un messaggio HTML tramite l'ID email fornito.

Inviare allegati tramite email

Esempio seguente invierà una email con allegato dal computer. Supponiamo che la tuaHost localeConnesso a Internet e supporta l'invio di email. Assicurarsi che tutti i file jar del pacchetto Java Email API e JAF siano disponibili nel CLASSPATH.

// 文件名 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
  {
      // 收件人的电子邮件 ID
      String to = "[email protected]";
 
      // 发件人的电子邮件 ID
      String from = "[email protected]";
 
      // 假设您是从本地主机发送电子邮件
      String host = "localhost";
 
      // 获取系统的属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象
      Session session = Session.getDefaultInstance(properties);
      
      // 设置响应内容类型
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
       try{
         // Crea un oggetto MimeMessage di default
         MimeMessage message = new MimeMessage(session);
 
         // Imposta il campo header From: dell'intestazione.
         message.setFrom(new InternetAddress(from));
 
         // Imposta il campo header To: dell'intestazione.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Imposta il campo header Subject:
         message.setSubject("Questo è l'intestazione del soggetto!");
 
         // Crea la parte del messaggio 
         BodyPart messageBodyPart = new MimeBodyPart();
 
         // Compila il messaggio
         messageBodyPart.setText("Questo è il corpo del messaggio");
         
         // Crea un messaggio multiparte
         Multipart multipart = new MimeMultipart();
 
         // Imposta la parte del messaggio di testo
         multipart.addBodyPart(messageBodyPart);
 
         // La seconda parte è l'allegato
         messageBodyPart = new MimeBodyPart();
         String filename = "file.txt";
         DataSource source = new FileDataSource(filename);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(filename);
         multipart.addBodyPart(messageBodyPart);
 
         // Invia la parte completa del messaggio
         message.setContent(multipart);
 
         // Invia il messaggio
         Transport.send(message);
         String title = "Invia e-mail";
         String res = "Email inviata con successo...";
         String docType = "<!DOCTYPE html> \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();
      
   

Compilare ed eseguire il seguente Servlet per inviare un messaggio con allegato al dato ID di posta elettronica.

Parte dell'autenticazione dell'utente

Se è necessario fornire ID utente e password per l'autenticazione al server di posta elettronica, è possibile impostare le seguenti proprietà:

 props.setProperty("mail.user", "myuser");
 props.setProperty("mail.password", "mypwd");

Il resto del meccanismo di invio di email è lo stesso di quanto spiegato sopra.