Servlet menghantar e-mel


Menghantar e-mel menggunakan Servlet adalah sangat mudah, tetapi anda perlu memasang JavaMail API dan Java Activation Framework) JAF)< pada komputer anda 🎜>.

  • Anda boleh memuat turun versi terkini JavaMail (versi 1.2) daripada tapak web Java Standards.

  • Anda boleh memuat turun versi terkini JAF (versi 1.1.1) daripada tapak web Java Standards.

Muat turun dan nyahzip fail ini, dan dalam direktori peringkat atas yang baru dibuat, anda akan menemui beberapa fail balang untuk kedua-dua aplikasi. Anda perlu menambah fail

mail.jar dan activation.jar pada CLASSPATH anda.

Hantar e-mel ringkas

Contoh di bawah akan menghantar e-mel ringkas daripada komputer anda. Ini mengandaikan bahawa

localhost anda disambungkan ke Internet dan menyokong penghantaran e-mel. Juga pastikan semua fail balang pakej Java Email API dan pakej JAF tersedia dalam 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 = "abcd@gmail.com";
 
      // 发件人的电子邮件 ID
      String from = "web@gmail.com";
 
      // 假设您是从本地主机发送电子邮件
      String host = "localhost";
 
      // 获取系统的属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象
      Session session = Session.getDefaultInstance(properties);
      
	  // 设置响应内容类型
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      try{
         // 创建一个默认的 MimeMessage 对象
         MimeMessage message = new MimeMessage(session);
         // 设置 From: header field of the header.
         message.setFrom(new InternetAddress(from));
         // 设置 To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
         // 设置 Subject: header field
         message.setSubject("This is the Subject Line!");
         // 现在设置实际消息
         message.setText("This is actual message");
         // 发送消息
         Transport.send(message);
         String title = "发送电子邮件";
         String res = "成功发送消息...";
         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();
      }
   }
}

Sekarang mari kita kumpulkan Servlet di atas dan buat entri berikut dalam fail 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>
....

Sekarang panggil ini dengan melawati URL http://localhost:8080/SendEmail Servlets . Ini akan menghantar e-mel ke id e-mel yang diberikan

abcd@gmail.com dan akan memaparkan respons seperti yang ditunjukkan di bawah:

Hantar e-mel

Mesej berjaya dihantar...

Jika anda ingin menghantar e-mel kepada berbilang penerima, gunakan kaedah berikut untuk menentukan berbilang ID e-mel:

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

Berikut ialah perihalan parameter:

  • taip: Ini akan ditetapkan kepada TO, CC atau BCC. Di sini, CC bermaksud salinan karbon dan BCC bermaksud salinan karbon buta. Contohnya Message.RecipientType.TO.

  • alamat: Ini ialah susunan ID e-mel. Apabila menentukan ID e-mel, anda perlu menggunakan kaedah InternetAddress().

Hantar e-mel HTML

Contoh di bawah akan menghantar e-mel berformat HTML daripada komputer anda. Ini mengandaikan bahawa localhost anda disambungkan ke Internet dan menyokong penghantaran e-mel. Juga pastikan semua fail balang pakej Java Email API dan pakej JAF tersedia dalam CLASSPATH.

Contoh ini sangat serupa dengan yang sebelumnya, tetapi di sini kami menggunakan kaedah setContent() untuk menetapkan kandungan parameter kedua kepada "teks/html", yang digunakan untuk menentukan bahawa kandungan HTML adalah termasuk dalam mesej daripada.

Menggunakan contoh ini, anda boleh menghantar kandungan HTML dalam sebarang saiz.

// 文件名 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 = "abcd@gmail.com";
 
      // 发件人的电子邮件 ID
      String from = "web@gmail.com";
 
      // 假设您是从本地主机发送电子邮件
      String host = "localhost";
 
      // 获取系统的属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象
      Session session = Session.getDefaultInstance(properties);
      
	  // 设置响应内容类型
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      try{
         // 创建一个默认的 MimeMessage 对象
         MimeMessage message = new MimeMessage(session);
         // 设置 From: header field of the header.
         message.setFrom(new InternetAddress(from));
         // 设置 To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
         // 设置 Subject: header field
         message.setSubject("This is the Subject Line!");

         // 设置实际的 HTML 消息,内容大小不限
         message.setContent("<h1>This is actual message</h1>",
                            "text/html" );
         // 发送消息
         Transport.send(message);
         String title = "发送电子邮件";
         String res = "成功发送消息...";
         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();
      }
   }
}

Kompil dan jalankan Servlet di atas untuk menghantar mesej HTML pada ID e-mel yang diberikan.

Hantar lampiran dalam e-mel

Contoh di bawah akan menghantar e-mel dengan lampiran daripada komputer anda. Ini mengandaikan bahawa localhost anda disambungkan ke Internet dan menyokong penghantaran e-mel. Juga pastikan semua fail balang pakej Java Email API dan pakej JAF tersedia dalam 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 = "abcd@gmail.com";
 
      // 发件人的电子邮件 ID
      String from = "web@gmail.com";
 
      // 假设您是从本地主机发送电子邮件
      String host = "localhost";
 
      // 获取系统的属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象
      Session session = Session.getDefaultInstance(properties);
      
	  // 设置响应内容类型
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

       try{
         // 创建一个默认的 MimeMessage 对象
         MimeMessage message = new MimeMessage(session);
 
         // 设置 From: header field of the header.
         message.setFrom(new InternetAddress(from));
 
         // 设置 To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // 设置 Subject: header field
         message.setSubject("This is the Subject Line!");
 
         // 创建消息部分 
         BodyPart messageBodyPart = new MimeBodyPart();
 
         // 填写消息
         messageBodyPart.setText("This is message body");
         
         // 创建一个多部分消息
         Multipart multipart = new MimeMultipart();
 
         // 设置文本消息部分
         multipart.addBodyPart(messageBodyPart);
 
         // 第二部分是附件
         messageBodyPart = new MimeBodyPart();
         String filename = "file.txt";
         DataSource source = new FileDataSource(filename);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(filename);
         multipart.addBodyPart(messageBodyPart);
 
         // 发送完整的消息部分
         message.setContent(multipart );
 
         // 发送消息
         Transport.send(message);
         String title = "发送电子邮件";
         String res = "成功发送电子邮件...";
         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();
      }
   }
}

Kompil dan jalankan Servlet di atas untuk menghantar mesej dengan lampiran fail pada ID e-mel yang diberikan.

Bahagian Pengesahan Pengguna

Jika anda perlu memberikan ID pengguna dan kata laluan kepada pelayan e-mel untuk pengesahan, maka anda boleh menetapkan atribut berikut:

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

Mekanisme penghantaran e-mel Selebihnya tetap sama seperti yang dijelaskan di atas.