Java 简明教程

Java - Sending Email

使用 Java 应用程序发送电子邮件非常简单,但首先应在计算机上安装 JavaMail APIJava Activation Framework (JAF)

  1. 你可以从 Java 标准网站下载 JavaMail (Version 1.2) 的最新版本。

  2. 你可以从 Java 标准网站下载 JAF (Version 1.1.1) 的最新版本。

下载并解压缩这些文件,在新建的顶层目录中,你可以找到这两个应用程序的多个 jar 文件。你需要在你的 CLASSPATH 中添加 mail.jaractivation.jar 文件。

Send a Simple E-mail

这里是一个用来从你的机器发送一封简单邮件的示例。假定你的 localhost 已连接至互联网且有能力发送电子邮件。

Example

// File Name SendEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail {

   public static void main(String [] args) {
      // 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);

      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);
         System.out.println("Sent message successfully....");
      } catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Output

编译并运行此程序来发送一封简单电子邮件 −

$ java SendEmail
Sent message successfully....

如果你想发送电子邮件给多个收件人,那么可以使用以下的方法来指定多个电子邮件 ID −

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

以下是参数说明 −

  1. type − 这将设置为 TO(收件人)、CC(抄送)或 BCC(密送)。此处的 CC 表示抄送,BCC 表示密送。示例:Message.RecipientType.TO

  2. addresses − 这是一组电子邮件 ID。在你指定电子邮件 ID 时需要使用 InternetAddress() 方法。

Send an HTML E-mail

这里是一个用来从你的机器发送 HTML 电子邮件的示例。此示例假定你的 localhost 已连接到互联网并且能够发送电子邮件。

这个示例与之前的示例非常相似,不同之处在于,这里我们使用 setContent() 方法来设置内容,其第二个参数是“text/html”,指定该消息中包含 HTML 内容。

使用这个示例,你可以发送任意长度的 HTML 内容。

Example

// File Name SendHTMLEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendHTMLEmail {

   public static void main(String [] args) {
      // 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);

      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);
         System.out.println("Sent message successfully....");
      } catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

编译并运行此程序来发送一封 HTML 电子邮件 −

Output

$ java SendHTMLEmail
Sent message successfully....

Send Attachment in E-mail

这里是一个用来从你的机器发送带有附件的电子邮件的示例。此示例假定你的 localhost 已连接到互联网且有能力发送电子邮件。

Example

// File Name SendFileEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendFileEmail {

   public static void main(String [] args) {
      // 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);

      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);
         System.out.println("Sent message successfully....");
      } catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

编译并运行此程序来发送一封 HTML 电子邮件 −

Output

$ java SendFileEmail
Sent message successfully....

User Authentication Part

如果需要为电子邮件服务器提供用户 ID 和密码用于认证目的,那么你可以按以下方式设置这些属性 −

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

发送电子邮件的其余机制保持如上文所述。