Java 发送邮件

[复制链接]

Java 发送邮件

发表于 2021-12-28 13:45:59 只看大图 阅读模式 倒序浏览
939 0 查看全部
  使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Framework (JAF) 。
  • 您可以从 Java 网站下载最新版本的 JavaMail,打开网页右侧有个 Downloads 链接,点击它下载。
  • 您可以从 Java 网站下载最新版本的 JAF(版本 1.1.1)。
  你也可以使用本站提供的下载链接:
  • JavaMail mail.jar 1.4.5
  • JAF(版本 1.1.1) activation.jar

  下载并解压缩这些文件,在新创建的顶层目录中,您会发现这两个应用程序的一些 jar 文件。您需要把 mail.jaractivation.jar 文件添加到您的 CLASSPATH 中。
  如果你使用第三方邮件服务器如QQ的SMTP服务器,可查看文章底部用户认证完整的实例。
发送一封简单的 E-mail  下面是一个发送简单E-mail的例子。假设你的本地主机已经连接到网络。
SendEmail.java 文件代码:
  1. // 文件名 SendEmail.java

  2. import java.util.*;
  3. import javax.mail.*;
  4. import javax.mail.internet.*;
  5. import javax.activation.*;

  6. public class SendEmail
  7. {
  8.    public static void main(String [] args)
  9.    {   
  10.       // 收件人电子邮箱
  11.       String to = "abcd@gmail.com";

  12.       // 发件人电子邮箱
  13.       String from = "web@gmail.com";

  14.       // 指定发送邮件的主机为 localhost
  15.       String host = "localhost";

  16.       // 获取系统属性
  17.       Properties properties = System.getProperties();

  18.       // 设置邮件服务器
  19.       properties.setProperty("mail.smtp.host", host);

  20.       // 获取默认session对象
  21.       Session session = Session.getDefaultInstance(properties);

  22.       try{
  23.          // 创建默认的 MimeMessage 对象
  24.          MimeMessage message = new MimeMessage(session);

  25.          // Set From: 头部头字段
  26.          message.setFrom(new InternetAddress(from));

  27.          // Set To: 头部头字段
  28.          message.addRecipient(Message.RecipientType.TO,
  29.                                   new InternetAddress(to));

  30.          // Set Subject: 头部头字段
  31.          message.setSubject("This is the Subject Line!");

  32.          // 设置消息体
  33.          message.setText("This is actual message");

  34.          // 发送消息
  35.          Transport.send(message);
  36.          System.out.println("Sent message successfully....");
  37.       }catch (MessagingException mex) {
  38.          mex.printStackTrace();
  39.       }
  40.    }
  41. }
复制代码
  编译并运行这个程序来发送一封简单的E-mail:

  1. $ java SendEmail
  2. Sent message successfully....
复制代码
  如果你想发送一封e-mail给多个收件人,那么使用下面的方法来指定多个收件人ID:
  1. void addRecipients(Message.RecipientType type,
  2.                    Address[] addresses)
  3. throws MessagingException
复制代码
  下面是对于参数的描述:
  •   type:要被设置为 TO, CC 或者 BCC,这里 CC 代表抄送、BCC 代表秘密抄送。举例:Message.RecipientType.TO
  •   addresses: 这是 email ID 的数组。在指定电子邮件 ID 时,你将需要使用 InternetAddress() 方法。

发送一封 HTML E-mail  下面是一个发送 HTML E-mail 的例子。假设你的本地主机已经连接到网络。
  和上一个例子很相似,除了我们要使用 setContent() 方法来通过第二个参数为 "text/html",来设置内容来指定要发送HTML 内容。
SendHTMLEmail.java 文件代码:
  1. // 文件名 SendHTMLEmail.java

  2. import java.util.*;
  3. import javax.mail.*;
  4. import javax.mail.internet.*;
  5. import javax.activation.*;

  6. public class SendHTMLEmail
  7. {
  8.    public static void main(String [] args)
  9.    {
  10.      
  11.       // 收件人电子邮箱
  12.       String to = "abcd@gmail.com";

  13.       // 发件人电子邮箱
  14.       String from = "web@gmail.com";

  15.       // 指定发送邮件的主机为 localhost
  16.       String host = "localhost";

  17.       // 获取系统属性
  18.       Properties properties = System.getProperties();

  19.       // 设置邮件服务器
  20.       properties.setProperty("mail.smtp.host", host);

  21.       // 获取默认的 Session 对象。
  22.       Session session = Session.getDefaultInstance(properties);

  23.       try{
  24.          // 创建默认的 MimeMessage 对象。
  25.          MimeMessage message = new MimeMessage(session);

  26.          // Set From: 头部头字段
  27.          message.setFrom(new InternetAddress(from));

  28.          // Set To: 头部头字段
  29.          message.addRecipient(Message.RecipientType.TO,
  30.                                   new InternetAddress(to));

  31.          // Set Subject: 头字段
  32.          message.setSubject("This is the Subject Line!");

  33.          // 发送 HTML 消息, 可以插入html标签
  34.          message.setContent("‹h1>This is actual message‹/h1>",
  35.                             "text/html" );

  36.          // 发送消息
  37.          Transport.send(message);
  38.          System.out.println("Sent message successfully....");
  39.       }catch (MessagingException mex) {
  40.          mex.printStackTrace();
  41.       }
  42.    }
  43. }
复制代码
  编译并运行此程序来发送HTML e-mail:

  1. $ java SendHTMLEmail
  2. Sent message successfully....
复制代码
发送带有附件的 E-mail  下面是一个发送带有附件的 E-mail的例子。假设你的本地主机已经连接到网络。
SendFileEmail.java 文件代码:
  1. // 文件名 SendFileEmail.java

  2. import java.util.*;
  3. import javax.mail.*;
  4. import javax.mail.internet.*;
  5. import javax.activation.*;

  6. public class SendFileEmail
  7. {
  8.    public static void main(String [] args)
  9.    {
  10.      
  11.       // 收件人电子邮箱
  12.       String to = "abcd@gmail.com";

  13.       // 发件人电子邮箱
  14.       String from = "web@gmail.com";

  15.       // 指定发送邮件的主机为 localhost
  16.       String host = "localhost";

  17.       // 获取系统属性
  18.       Properties properties = System.getProperties();

  19.       // 设置邮件服务器
  20.       properties.setProperty("mail.smtp.host", host);

  21.       // 获取默认的 Session 对象。
  22.       Session session = Session.getDefaultInstance(properties);

  23.       try{
  24.          // 创建默认的 MimeMessage 对象。
  25.          MimeMessage message = new MimeMessage(session);

  26.          // Set From: 头部头字段
  27.          message.setFrom(new InternetAddress(from));

  28.          // Set To: 头部头字段
  29.          message.addRecipient(Message.RecipientType.TO,
  30.                                   new InternetAddress(to));

  31.          // Set Subject: 头字段
  32.          message.setSubject("This is the Subject Line!");

  33.          // 创建消息部分
  34.          BodyPart messageBodyPart = new MimeBodyPart();

  35.          // 消息
  36.          messageBodyPart.setText("This is message body");
  37.         
  38.          // 创建多重消息
  39.          Multipart multipart = new MimeMultipart();

  40.          // 设置文本消息部分
  41.          multipart.addBodyPart(messageBodyPart);

  42.          // 附件部分
  43.          messageBodyPart = new MimeBodyPart();
  44.          String filename = "file.txt";
  45.          DataSource source = new FileDataSource(filename);
  46.          messageBodyPart.setDataHandler(new DataHandler(source));
  47.          messageBodyPart.setFileName(filename);
  48.          multipart.addBodyPart(messageBodyPart);

  49.          // 发送完整消息
  50.          message.setContent(multipart );

  51.          //   发送消息
  52.          Transport.send(message);
  53.          System.out.println("Sent message successfully....");
  54.       }catch (MessagingException mex) {
  55.          mex.printStackTrace();
  56.       }
  57.    }
  58. }
复制代码
  编译并运行你的程序来发送一封带有附件的邮件。

  1. $ java SendFileEmail
  2. Sent message successfully....
复制代码
用户认证部分  如果需要提供用户名和密码给e-mail服务器来达到用户认证的目的,你可以通过如下设置来完成:
  1. props.put("mail.smtp.auth", "true");
  2. props.setProperty("mail.user", "myuser");
  3. props.setProperty("mail.password", "mypwd");
复制代码
  e-mail其他的发送机制和上述保持一致。
需要用户名密码验证邮件发送实例:  本实例以 QQ 邮件服务器为例,你需要在登录QQ邮箱后台在"设置"=》账号中开启POP3/SMTP服务 ,如下图所示:
qqmail-set2.jpg
  QQ 邮箱通过生成授权码来设置密码:
qqmail-set.jpg
  Java 代码如下:
SendEmail2.java 文件代码:
  1. // 需要用户名密码邮件发送实例
  2. //文件名 SendEmail2.java
  3. //本实例以QQ邮箱为例,你需要在qq后台设置

  4. import java.util.Properties;

  5. import javax.mail.Authenticator;
  6. import javax.mail.Message;
  7. import javax.mail.MessagingException;
  8. import javax.mail.PasswordAuthentication;
  9. import javax.mail.Session;
  10. import javax.mail.Transport;
  11. import javax.mail.internet.InternetAddress;
  12. import javax.mail.internet.MimeMessage;

  13. public class SendEmail2
  14. {
  15.    public static void main(String [] args)
  16.    {
  17.       // 收件人电子邮箱
  18.       String to = "xxx@qq.com";

  19.       // 发件人电子邮箱
  20.       String from = "xxx@qq.com";

  21.       // 指定发送邮件的主机为 smtp.qq.com
  22.       String host = "smtp.qq.com";  //QQ 邮件服务器

  23.       // 获取系统属性
  24.       Properties properties = System.getProperties();

  25.       // 设置邮件服务器
  26.       properties.setProperty("mail.smtp.host", host);

  27.       properties.put("mail.smtp.auth", "true");
  28.       // 获取默认session对象
  29.       Session session = Session.getDefaultInstance(properties,new Authenticator(){
  30.         public PasswordAuthentication getPasswordAuthentication()
  31.         {
  32.          return new PasswordAuthentication("xxx@qq.com", "qq邮箱授权码"); //发件人邮件用户名、授权码
  33.         }
  34.        });

  35.       try{
  36.          // 创建默认的 MimeMessage 对象
  37.          MimeMessage message = new MimeMessage(session);

  38.          // Set From: 头部头字段
  39.          message.setFrom(new InternetAddress(from));

  40.          // Set To: 头部头字段
  41.          message.addRecipient(Message.RecipientType.TO,
  42.                                   new InternetAddress(to));

  43.          // Set Subject: 头部头字段
  44.          message.setSubject("This is the Subject Line!");

  45.          // 设置消息体
  46.          message.setText("This is actual message");

  47.          // 发送消息
  48.          Transport.send(message);
  49.          System.out.println("Sent message successfully....from runoob.com");
  50.       }catch (MessagingException mex) {
  51.          mex.printStackTrace();
  52.       }
  53.    }
  54. }
复制代码

来源:菜鸟教程
回复

使用道具 举报

游客~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|极客同行 ( 蜀ICP备17009389号-1 )

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4