无涯教程-Java - 邮件发送

51 阅读2分钟

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

  • 您可以下载最新版本  JavaMail (Version 1.2) 

  • 您可以下载最新版本 JAF (Version 1.1.1) 

下载并解压缩这些文件,在新创建的顶级目录中,您将发现这两个应用程序的许多JAR文件。您需要在CLASSPATH中添加mail.jar和activation.jar文件。

发送邮件

下面是一个从您的机器发送简单电子邮件的示例。假设您的本地主机已连接到互联网,并且足以发送电子邮件。

//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) {
//需要提及收件人的电子邮件 ID。 String to="abcd@gmail.com";

  </span><span class="com">//需要提及发件人的电子邮件 ID</span><span class="pln">
  </span><span class="typ">String</span><span class="pln"> </span><span class="kwd">from</span><span class="pun">=</span><span class="str">"web@gmail.com"</span><span class="pun">;</span><span class="pln">

  </span><span class="com">//假设从 localhost 发送电子邮件</span><span class="pln">
  </span><span class="typ">String</span><span class="pln"> host</span><span class="pun">=</span><span class="str">"localhost"</span><span class="pun">;</span><span class="pln">

  </span><span class="com">//获取系统属性</span><span class="pln">
  </span><span class="typ">Properties</span><span class="pln"> properties</span><span class="pun">=</span><span class="typ">System</span><span class="pun">.</span><span class="pln">getProperties</span><span class="pun">();</span><span class="pln">

  </span><span class="com">//设置邮件服务器</span><span class="pln">
  properties</span><span class="pun">.</span><span class="pln">setProperty</span><span class="pun">(</span><span class="str">"mail.smtp.host"</span><span class="pun">,</span><span class="pln"> host</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//获取默认的 Session 对象。</span><span class="pln">
  </span><span class="typ">Session</span><span class="pln"> session</span><span class="pun">=</span><span class="typ">Session</span><span class="pun">.</span><span class="pln">getDefaultInstance</span><span class="pun">(</span><span class="pln">properties</span><span class="pun">);</span><span class="pln">

  </span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     </span><span class="com">//创建一个默认的 MimeMessage 对象。</span><span class="pln">
     </span><span class="typ">MimeMessage</span><span class="pln"> message</span><span class="pun">=</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MimeMessage</span><span class="pun">(</span><span class="pln">session</span><span class="pun">);</span><span class="pln">

     </span><span class="com">//Set From: 从哪里发送</span><span class="pln">
     message</span><span class="pun">.</span><span class="pln">setFrom</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">InternetAddress</span><span class="pun">(</span><span class="kwd">from</span><span class="pun">));</span><span class="pln">

     </span><span class="com">//Set To:发送到哪去。</span><span class="pln">
     message</span><span class="pun">.</span><span class="pln">addRecipient</span><span class="pun">(</span><span class="typ">Message</span><span class="pun">.</span><span class="typ">RecipientType</span><span class="pun">.</span><span class="pln">TO</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">InternetAddress</span><span class="pun">(</span><span class="pln">to</span><span class="pun">));</span><span class="pln">

     </span><span class="com">//Set Subject: header field</span><span class="pln">
     message</span><span class="pun">.</span><span class="pln">setSubject</span><span class="pun">(</span><span class="str">"This is the Subject Line!"</span><span class="pun">);</span><span class="pln">

     </span><span class="com">//现在设置实际消息</span><span class="pln">
     message</span><span class="pun">.</span><span class="pln">setText</span><span class="pun">(</span><span class="str">"This is actual message"</span><span class="pun">);</span><span class="pln">

     </span><span class="com">//发送消息</span><span class="pln">
     </span><span class="typ">Transport</span><span class="pun">.</span><span class="pln">send</span><span class="pun">(</span><span class="pln">message</span><span class="pun">);</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Sent message successfully...."</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">MessagingException</span><span class="pln"> mex</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     mex</span><span class="pun">.</span><span class="pln">printStackTrace</span><span class="pun">();</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

} }

编译并运行此程序以发送简单的电子邮件-

$java SendEmail
Sent message successfully....

如果要将一封电子邮件发送给多个收件人,则可以使用以下方法指定多个电子邮件ID-

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

发送HTML邮件

下面是一个从您的机器发送HTML电子邮件的示例,这里假设您的本地主机已连接到互联网,并且足以发送电子邮件。

此示例与上一个示例非常相似,除了这里无涯教程使用setConten()方法设置第二个参数为“ text/html”的内容以指定HTML内容包含在消息中。

使用本例,您可以发送您喜欢的HTML内容。

//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) { //需要提及收件人的电子邮件 ID。 String to="abcd@gmail.com";

  </span><span class="com">//需要提及发件人的电子邮件 ID</span><span class="pln">
  </span><span class="typ">String</span><span class="pln"> </span><span class="kwd">from</span><span class="pun">=</span><span class="str">"web@gmail.com"</span><span class="pun">;</span><span class="pln">

  </span><span class="com">//假设您从 localhost 发送电子邮件</span><span class="pln">
  </span><span class="typ">String</span><span class="pln"> host</span><span class="pun">=</span><span class="str">"localhost"</span><span class="pun">;</span><span class="pln">

  </span><span class="com">//获取系统属性</span><span class="pln">
  </span><span class="typ">Properties</span><span class="pln"> properties</span><span class="pun">=</span><span class="typ">System</span><span class="pun">.</span><span class="pln">getProperties</span><span class="pun">();</span><span class="pln">

  </span><span class="com">//设置邮件服务器</span><span class="pln">
  properties</span><span class="pun">.</span><span class="pln">setProperty</span><span class="pun">(</span><span class="str">"mail.smtp.host"</span><span class="pun">,</span><span class="pln"> host</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//获取默认的 Session 对象。</span><span class="pln">
  </span><span class="typ">Session</span><span class="pln"> session</span><span class="pun">=</span><span class="typ">Session</span><span class="pun">.</span><span class="pln">getDefaultInstance</span><span class="pun">(</span><span class="pln">properties</span><span class="pun">);</span><span class="pln">

  </span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     </span><span class="com">//创建一个默认的 MimeMessage 对象。</span><span class="pln">
     </span><span class="typ">MimeMessage</span><span class="pln"> message</span><span class="pun">=</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MimeMessage</span><span class="pun">(</span><span class="pln">session</span><span class="pun">);</span><span class="pln">

     </span><span class="com">//Set From: header field of the header.</span><span class="pln">
     message</span><span class="pun">.</span><span class="pln">setFrom</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">InternetAddress</span><span class="pun">(</span><span class="kwd">from</span><span class="pun">));</span><span class="pln">

     </span><span class="com">//Set To: header field of the header.</span><span class="pln">
     message</span><span class="pun">.</span><span class="pln">addRecipient</span><span class="pun">(</span><span class="typ">Message</span><span class="pun">.</span><span class="typ">RecipientType</span><span class="pun">.</span><span class="pln">TO</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">InternetAddress</span><span class="pun">(</span><span class="pln">to</span><span class="pun">));</span><span class="pln">

     </span><span class="com">//Set Subject: header field</span><span class="pln">
     message</span><span class="pun">.</span><span class="pln">setSubject</span><span class="pun">(</span><span class="str">"This is the Subject Line!"</span><span class="pun">);</span><span class="pln">

     </span><span class="com">//发送实际的 HTML 消息</span><span class="pln">
     message</span><span class="pun">.</span><span class="pln">setContent</span><span class="pun">(</span><span class="str">"&lt;h1&gt;This is actual message&lt;/h1&gt;"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"text/html"</span><span class="pun">);</span><span class="pln">

     </span><span class="com">//发信息</span><span class="pln">
     </span><span class="typ">Transport</span><span class="pun">.</span><span class="pln">send</span><span class="pun">(</span><span class="pln">message</span><span class="pun">);</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Sent message successfully...."</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">MessagingException</span><span class="pln"> mex</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     mex</span><span class="pun">.</span><span class="pln">printStackTrace</span><span class="pun">();</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

} }

编译并运行此程序以发送html电子邮件-

$java SendHTMLEmail
Sent message successfully....

发送附件

下面是一个从您的机器发送带有附件的电子邮件的示例。

//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) {
//需要提及收件人的电子邮件 ID。 String to="abcd@gmail.com";

  </span><span class="com">//需要提及发件人的电子邮件 ID</span><span class="pln">
  </span><span class="typ">String</span><span class="pln"> </span><span class="kwd">from</span><span class="pun">=</span><span class="str">"web@gmail.com"</span><span class="pun">;</span><span class="pln">

  </span><span class="com">//假设您从 localhost 发送电子邮件</span><span class="pln">
  </span><span class="typ">String</span><span class="pln"> host</span><span class="pun">=</span><span class="str">"localhost"</span><span class="pun">;</span><span class="pln">

  </span><span class="com">//获取系统属性</span><span class="pln">
  </span><span class="typ">Properties</span><span class="pln"> properties</span><span class="pun">=</span><span class="typ">System</span><span class="pun">.</span><span class="pln">getProperties</span><span class="pun">();</span><span class="pln">

  </span><span class="com">//设置邮件服务器</span><span class="pln">
  properties</span><span class="pun">.</span><span class="pln">setProperty</span><span class="pun">(</span><span class="str">"mail.smtp.host"</span><span class="pun">,</span><span class="pln"> host</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//获取默认的 Session 对象。</span><span class="pln">
  </span><span class="typ">Session</span><span class="pln"> session</span><span class="pun">=</span><span class="typ">Session</span><span class="pun">.</span><span class="pln">getDefaultInstance</span><span class="pun">(</span><span class="pln">properties</span><span class="pun">);</span><span class="pln">

  </span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     </span><span class="com">//创建一个默认的 MimeMessage 对象。</span><span class="pln">
     </span><span class="typ">MimeMessage</span><span class="pln"> message</span><span class="pun">=</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MimeMessage</span><span class="pun">(</span><span class="pln">session</span><span class="pun">);</span><span class="pln">

     </span><span class="com">//Set From: header field of the header.</span><span class="pln">
     message</span><span class="pun">.</span><span class="pln">setFrom</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">InternetAddress</span><span class="pun">(</span><span class="kwd">from</span><span class="pun">));</span><span class="pln">

     </span><span class="com">//Set To: header field of the header.</span><span class="pln">
     message</span><span class="pun">.</span><span class="pln">addRecipient</span><span class="pun">(</span><span class="typ">Message</span><span class="pun">.</span><span class="typ">RecipientType</span><span class="pun">.</span><span class="pln">TO</span><span class="pun">,</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">InternetAddress</span><span class="pun">(</span><span class="pln">to</span><span class="pun">));</span><span class="pln">

     </span><span class="com">//Set Subject: header field</span><span class="pln">
     message</span><span class="pun">.</span><span class="pln">setSubject</span><span class="pun">(</span><span class="str">"This is the Subject Line!"</span><span class="pun">);</span><span class="pln">

     </span><span class="com">//创建消息部分</span><span class="pln">
     </span><span class="typ">BodyPart</span><span class="pln"> messageBodyPart</span><span class="pun">=</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MimeBodyPart</span><span class="pun">();</span><span class="pln">

     </span><span class="com">//填写内容信息</span><span class="pln">
     messageBodyPart</span><span class="pun">.</span><span class="pln">setText</span><span class="pun">(</span><span class="str">"This is message body"</span><span class="pun">);</span><span class="pln">
     
     </span><span class="com">//创建多条消息</span><span class="pln">
     </span><span class="typ">Multipart</span><span class="pln"> multipart</span><span class="pun">=</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MimeMultipart</span><span class="pun">();</span><span class="pln">

     </span><span class="com">//设置部分</span><span class="pln">
     multipart</span><span class="pun">.</span><span class="pln">addBodyPart</span><span class="pun">(</span><span class="pln">messageBodyPart</span><span class="pun">);</span><span class="pln">

     </span><span class="com">//第二部分是附件</span><span class="pln">
     messageBodyPart</span><span class="pun">=</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MimeBodyPart</span><span class="pun">();</span><span class="pln">
     </span><span class="typ">String</span><span class="pln"> filename</span><span class="pun">=</span><span class="str">"file.txt"</span><span class="pun">;</span><span class="pln">
     </span><span class="typ">DataSource</span><span class="pln"> source</span><span class="pun">=</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">FileDataSource</span><span class="pun">(</span><span class="pln">filename</span><span class="pun">);</span><span class="pln">
     messageBodyPart</span><span class="pun">.</span><span class="pln">setDataHandler</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">DataHandler</span><span class="pun">(</span><span class="pln">source</span><span class="pun">));</span><span class="pln">
     messageBodyPart</span><span class="pun">.</span><span class="pln">setFileName</span><span class="pun">(</span><span class="pln">filename</span><span class="pun">);</span><span class="pln">
     multipart</span><span class="pun">.</span><span class="pln">addBodyPart</span><span class="pun">(</span><span class="pln">messageBodyPart</span><span class="pun">);</span><span class="pln">

     </span><span class="com">//发送完整的消息部件</span><span class="pln">
     message</span><span class="pun">.</span><span class="pln">setContent</span><span class="pun">(</span><span class="pln">multipart </span><span class="pun">);</span><span class="pln">

     </span><span class="com">//发信息</span><span class="pln">
     </span><span class="typ">Transport</span><span class="pun">.</span><span class="pln">send</span><span class="pun">(</span><span class="pln">message</span><span class="pun">);</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Sent message successfully...."</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">MessagingException</span><span class="pln"> mex</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     mex</span><span class="pun">.</span><span class="pln">printStackTrace</span><span class="pun">();</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

} }

编译并运行此程序以发送html电子邮件-

$java SendFileEmail
Sent message successfully....

用户身份验证

如果需要向电子邮件服务器提供用户ID和密码以进行身份验证,则可以按如下方式设置这些属性:-

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

参考链接

www.learnfk.com/java/java-s…