Servlet - 发送电子邮件

  • 简述

    使用您的 Servlet 发送电子邮件很简单,但开始时您应该 JavaMail APIJava Activation Framework (JAF) 安装在你的机器上。
    下载并解压缩这些文件,在新创建的顶级目录中,您将找到两个应用程序的许多 jar 文件。你需要添加mail.jaractivation.jar CLASSPATH 中的文件。
  • 发送简单的电子邮件

    这是从您的机器发送简单电子邮件的示例。这里假设您的localhost已连接到 Internet 并且足以发送电子邮件。同时确保来自 Java Email API 包和 JAF 包的所有 jar 文件在 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 = "abcd@gmail.com";
     
          // Sender's email ID needs to be mentioned
          String from = "web@gmail.com";
     
          // 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();
          }
       }
    } 
    
    现在让我们编译上面的 servlet 并在 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>
    ....
    
    现在使用 URL http://localhost:8080/SendEmail 调用这个 servlet,它将发送一封电子邮件到给定的电子邮件 ID abcd@gmail.com并显示以下响应 -
    
    
    Sent message successfully....
    
    如果您想向多个收件人发送电子邮件,则将使用以下方法指定多个电子邮件 ID -
    
    void addRecipients(Message.RecipientType type, Address[] addresses)
    throws MessagingException
    
    这是参数的描述 -
    • type- 这将设置为 TO、CC 或 BCC。这里CC代表Carbon Copy,BCC代表Black Carbon Copy。示例Message.RecipientType.TO
    • addresses- 这是电子邮件 ID 的数组。您需要在指定电子邮件 ID 时使用 InternetAddress() 方法。
  • 发送 HTML 电子邮件

    这是从您的机器发送 HTML 电子邮件的示例。这里假设您的localhost已连接到 Internet 并且足以发送电子邮件。同时,确保所有来自Java Email API 包和JAF 包的jar 文件在CLASSPATH 中可用。
    这个例子与前面的例子非常相似,除了这里我们使用 setContent() 方法来设置第二个参数是“text/html”的内容,以指定 HTML 内容包含在消息中。
    使用此示例,您可以发送尽可能大的 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 = "abcd@gmail.com";
     
          // Sender's email ID needs to be mentioned
          String from = "web@gmail.com";
     
          // 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();
          }
       }
    } 
    
    编译并运行上述 servlet 以在给定的电子邮件 ID 上发送 HTML 消息。
  • 在电子邮件中发送附件

    这是从您的机器发送带有附件的电子邮件的示例。这里假设您的localhost 已连接到 Internet 并且足以发送电子邮件。
    
    // 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 = "abcd@gmail.com";
     
          // Sender's email ID needs to be mentioned
          String from = "web@gmail.com";
     
          // 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();
          }
       }
    } 
    
    编译并在 servlet 之上运行,以将文件作为附件与给定电子邮件 ID 上的消息一起发送。
  • 用户认证部分

    如果需要向电子邮件服务器提供用户 ID 和密码以进行身份​​验证,那么您可以按如下方式设置这些属性 -
    
     props.setProperty("mail.user", "myuser");
     props.setProperty("mail.password", "mypwd");
    
    其余的电子邮件发送机制将保持如上文所述。