使用Java应用程序发送E-mail十分简单,但是首先你应该在你的机器上安装JavaMail API 和Java Activation Framework (JAF) 。

你可以在 JavaMail (Version 1.2) 下载最新的版本。

你可以再 在JAF (Version 1.1.1)下载最新的版本。

下载并解压这些文件,最上层文件夹你会发现很多的jar文件。你需要将mail.jar和activation.jar 添加到你的CLASSPATH中。

如果你使用第三方邮件服务器如QQ的SMTP服务器,可查看文章底部用户认证完整的实例。


发送一封简单的 E-mail

下面是一个发送简单E-mail的例子。假设你的localhost已经连接到网络。

  1. // 文件名 SendEmail.java
  2.  
  3. import java.util.*;
  4. import javax.mail.*;
  5. import javax.mail.internet.*;
  6. import javax.activation.*;
  7.  
  8. public class SendEmail
  9. {
  10. public static void main(String [] args)
  11. {
  12. // 收件人电子邮箱
  13. String to = "abcd@gmail.com";
  14.  
  15. // 发件人电子邮箱
  16. String from = "web@gmail.com";
  17.  
  18. // 指定发送邮件的主机为 localhost
  19. String host = "localhost";
  20.  
  21. // 获取系统属性
  22. Properties properties = System.getProperties();
  23.  
  24. // 设置邮件服务器
  25. properties.setProperty("mail.smtp.host", host);
  26.  
  27. // 获取默认session对象
  28. Session session = Session.getDefaultInstance(properties);
  29.  
  30. try{
  31. // 创建默认的 MimeMessage 对象
  32. MimeMessage message = new MimeMessage(session);
  33.  
  34. // Set From: 头部头字段
  35. message.setFrom(new InternetAddress(from));
  36.  
  37. // Set To: 头部头字段
  38. message.addRecipient(Message.RecipientType.TO,
  39. new InternetAddress(to));
  40.  
  41. // Set Subject: 头部头字段
  42. message.setSubject("This is the Subject Line!");
  43.  
  44. // 设置消息体
  45. message.setText("This is actual message");
  46.  
  47. // 发送消息
  48. Transport.send(message);
  49. System.out.println("Sent message successfully....");
  50. }catch (MessagingException mex) {
  51. mex.printStackTrace();
  52. }
  53. }
  54. }

编译并运行这个程序来发送一封简单的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 代表秘密抄送y. 举例:Message.RecipientType.TO

  • addresses: 这是email ID的数组。在指定电子邮件ID时,你将需要使用InternetAddress()方法。


发送一封HTML E-mail

下面是一个发送HTML E-mail的例子。假设你的localhost已经连接到网络。

和上一个例子很相似,除了我们要使用setContent()方法来通过第二个参数为"text/html",来设置内容来指定要发送HTML内容。

  1. // 文件名 SendHTMLEmail.java
  2.  
  3. import java.util.*;
  4. import javax.mail.*;
  5. import javax.mail.internet.*;
  6. import javax.activation.*;
  7.  
  8. public class SendHTMLEmail
  9. {
  10. public static void main(String [] args)
  11. {
  12.  
  13. // 收件人电子邮箱
  14. String to = "abcd@gmail.com";
  15.  
  16. // 发件人电子邮箱
  17. String from = "web@gmail.com";
  18.  
  19. // 指定发送邮件的主机为 localhost
  20. String host = "localhost";
  21.  
  22. // 获取系统属性
  23. Properties properties = System.getProperties();
  24.  
  25. // 设置邮件服务器
  26. properties.setProperty("mail.smtp.host", host);
  27.  
  28. // 获取默认的 Session 对象。
  29. Session session = Session.getDefaultInstance(properties);
  30.  
  31. try{
  32. // 创建默认的 MimeMessage 对象。
  33. MimeMessage message = new MimeMessage(session);
  34.  
  35. // Set From: 头部头字段
  36. message.setFrom(new InternetAddress(from));
  37.  
  38. // Set To: 头部头字段
  39. message.addRecipient(Message.RecipientType.TO,
  40. new InternetAddress(to));
  41.  
  42. // Set Subject: 头字段
  43. message.setSubject("This is the Subject Line!");
  44.  
  45. // 发送 HTML 消息, 可以插入html标签
  46. message.setContent("<h1>This is actual message</h1>",
  47. "text/html" );
  48.  
  49. // 发送消息
  50. Transport.send(message);
  51. System.out.println("Sent message successfully....");
  52. }catch (MessagingException mex) {
  53. mex.printStackTrace();
  54. }
  55. }
  56. }

编译并运行此程序来发送HTML e-mail:

  1. $ java SendHTMLEmail
  2. Sent message successfully....

发送带有附件的 E-mail

下面是一个发送带有附件的 E-mail的例子。假设你的localhost已经连接到网络。

  1. // 文件名 SendFileEmail.java
  2.  
  3. import java.util.*;
  4. import javax.mail.*;
  5. import javax.mail.internet.*;
  6. import javax.activation.*;
  7.  
  8. public class SendFileEmail
  9. {
  10. public static void main(String [] args)
  11. {
  12.  
  13. // 收件人电子邮箱
  14. String to = "abcd@gmail.com";
  15.  
  16. // 发件人电子邮箱
  17. String from = "web@gmail.com";
  18.  
  19. // 指定发送邮件的主机为 localhost
  20. String host = "localhost";
  21.  
  22. // 获取系统属性
  23. Properties properties = System.getProperties();
  24.  
  25. // 设置邮件服务器
  26. properties.setProperty("mail.smtp.host", host);
  27.  
  28. // 获取默认的 Session 对象。
  29. Session session = Session.getDefaultInstance(properties);
  30.  
  31. try{
  32. // 创建默认的 MimeMessage 对象。
  33. MimeMessage message = new MimeMessage(session);
  34.  
  35. // Set From: 头部头字段
  36. message.setFrom(new InternetAddress(from));
  37.  
  38. // Set To: 头部头字段
  39. message.addRecipient(Message.RecipientType.TO,
  40. new InternetAddress(to));
  41.  
  42. // Set Subject: 头字段
  43. message.setSubject("This is the Subject Line!");
  44.  
  45. // 创建消息部分
  46. BodyPart messageBodyPart = new MimeBodyPart();
  47.  
  48. // 消息
  49. messageBodyPart.setText("This is message body");
  50.  
  51. // 创建多重消息
  52. Multipart multipart = new MimeMultipart();
  53.  
  54. // 设置文本消息部分
  55. multipart.addBodyPart(messageBodyPart);
  56.  
  57. // 附件部分
  58. messageBodyPart = new MimeBodyPart();
  59. String filename = "file.txt";
  60. DataSource source = new FileDataSource(filename);
  61. messageBodyPart.setDataHandler(new DataHandler(source));
  62. messageBodyPart.setFileName(filename);
  63. multipart.addBodyPart(messageBodyPart);
  64.  
  65. // 发送完整消息
  66. message.setContent(multipart );
  67.  
  68. // 发送消息
  69. Transport.send(message);
  70. System.out.println("Sent message successfully....");
  71. }catch (MessagingException mex) {
  72. mex.printStackTrace();
  73. }
  74. }
  75. }

编译并运行你的程序来发送一封带有附件的邮件。

  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服务 ,如下图所示:

Java 代码如下:

  1. // 需要用户名密码邮件发送实例
  2. //文件名 SendEmail2.java
  3. //本实例以QQ邮箱为例,你需要在qq后台设置
  4.  
  5. import java.util.Properties;
  6.  
  7. import javax.mail.Authenticator;
  8. import javax.mail.Message;
  9. import javax.mail.MessagingException;
  10. import javax.mail.PasswordAuthentication;
  11. import javax.mail.Session;
  12. import javax.mail.Transport;
  13. import javax.mail.internet.InternetAddress;
  14. import javax.mail.internet.MimeMessage;
  15.  
  16. public class SendEmail2
  17. {
  18. public static void main(String [] args)
  19. {
  20. // 收件人电子邮箱
  21. String to = "xxx@qq.com";
  22.  
  23. // 发件人电子邮箱
  24. String from = "xxx@qq.com";
  25.  
  26. // 指定发送邮件的主机为 localhost
  27. String host = "smtp.qq.com"; //QQ 邮件服务器
  28.  
  29. // 获取系统属性
  30. Properties properties = System.getProperties();
  31.  
  32. // 设置邮件服务器
  33. properties.setProperty("mail.smtp.host", host);
  34.  
  35. properties.put("mail.smtp.auth", "true");
  36. // 获取默认session对象
  37. Session session = Session.getDefaultInstance(properties,new Authenticator(){
  38. public PasswordAuthentication getPasswordAuthentication()
  39. {
  40. return new PasswordAuthentication("xxx@qq.com", "qq邮箱密码"); //发件人邮件用户名、密码
  41. }
  42. });
  43.  
  44. try{
  45. // 创建默认的 MimeMessage 对象
  46. MimeMessage message = new MimeMessage(session);
  47.  
  48. // Set From: 头部头字段
  49. message.setFrom(new InternetAddress(from));
  50.  
  51. // Set To: 头部头字段
  52. message.addRecipient(Message.RecipientType.TO,
  53. new InternetAddress(to));
  54.  
  55. // Set Subject: 头部头字段
  56. message.setSubject("This is the Subject Line!");
  57.  
  58. // 设置消息体
  59. message.setText("This is actual message");
  60.  
  61. // 发送消息
  62. Transport.send(message);
  63. System.out.println("Sent message successfully....from cnblogs.com");
  64. }catch (MessagingException mex) {
  65. mex.printStackTrace();
  66. }
  67. }
  68. }

Java 发送邮件的更多相关文章

  1. Java发送邮件初窥

    一.背景 最近朋友的公司有用到这个功能,之前对这一块也不是很熟悉,就和他一起解决出现的异常的同时,也初窥一下使用Apache Common Email组件进行邮件发送. 二.Java发送邮件的注意事项 ...

  2. Java发送邮件,所遇到的常见需求

    明天要做关于发送邮件的接口,虽然我之前已用Java Mail做过许多关于邮件的发送.但同事说有点难点,虽我还不知难点在哪,还是要复习下.凡事预则立,不预则废嘛~ 所需的包: Java Mail : 目 ...

  3. 用java发送邮件(黄海已测试通过)

    /** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...

  4. Java发送邮件(带附件)

    实现java发送邮件的过程大体有以下几步: 准备一个properties文件,该文件中存放SMTP服务器地址等参数. 利用properties创建一个Session对象 利用Session创建Mess ...

  5. 用Java发送邮件

    要用Java发送邮件,除过JDK本身的jar包之外,还需要两个额外的jar包:JavaMail和JAF.当然,如果你使用的JavaEE的JDK,那就不用单独去网上下载了,因为JavaEE的JDK中已经 ...

  6. Java发送邮件时标题和发件人乱码

    最近碰到一个问题,Java发送邮件时,查看邮箱结果,发件人及邮件标题正文全部乱码 通过翻阅资料,原因及解决方法如下: // Set Subject: 头字段 message.setSubject(Mi ...

  7. Java - 31 Java 发送邮件

    Java 发送邮件 使用Java应用程序发送E-mail十分简单,但是首先你应该在你的机器上安装JavaMail API 和Java Activation Framework (JAF) . 你可以在 ...

  8. Java-Runoob-高级教程:Java 发送邮件

    ylbtech-Java-Runoob-高级教程:Java 发送邮件 1.返回顶部 1. Java 发送邮件 使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 Java ...

  9. Java发送邮件--web.xml配置,Java代码配置

    前言:我目前总结的使用java发送邮件的方式有两种,分别是在spring框架xml配置文件使用bean标签,另一种方法是把发送功能封装成一个对象,废话不多说上代码, 边看代码边讲解,希望对需要的人能有 ...

  10. Java发送邮件示例

    利用Java发送邮件示例: 1.发送QQ邮件 import java.util.Properties; import javax.mail.Message; import javax.mail.Mes ...

随机推荐

  1. 【翻译】用AIML实现的Python人工智能聊天机器人

    前言 用python的AIML包很容易就能写一个人工智能聊天机器人. AIML是Artificial Intelligence Markup Language的简写, 但它只是一个简单的XML. 下面 ...

  2. C# 开发windows服务的一些心得

    最近在做一个windows服务的项目,发现并解决了一些问题,拿出来和大家分享一下,以下windows服务简称“服务” 文章会在适合时间更新,因为朋友们在不断提出新的意见或思路,感谢-.- 1.服务如何 ...

  3. 基于Caffe的DeepID2实现(下)

    小喵的唠叨话:这次的博客,真心累伤了小喵的心.但考虑到知识需要巩固和分享,小喵决定这次把剩下的内容都写完. 小喵的博客:http://www.miaoerduo.com 博客原文: http://ww ...

  4. Android浮层点击穿透问题

    最近做微信公众号开发的时候遇到一个问题,上线后发现此问题后检查代码没有发现问题,无奈只能回滚到上一个版本. 问题是这样的:页面一个选择的浮层,在浮层点击确定后,下面的页面会自动提交 在测试环境上无法重 ...

  5. leetcode--5. Longest Palindromic Substring

    题目来自 https://leetcode.com/problems/longest-palindromic-substring/ 题目:Given a string S, find the long ...

  6. 细说Promise

    一.前言 JavaScript是单线程的,固,一次只能执行一个任务,当有一个任务耗时很长时,后面的任务就必须等待.那么,有什么办法,可以解决这类问题呢?(抛开WebWorker不谈),那就是让代码异步 ...

  7. CRL快速开发框架系列教程二(基于Lambda表达式查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. DDD 领域驱动设计-如何完善 Domain Model(领域模型)?

    上一篇:<DDD 领域驱动设计-如何 DDD?> 开源地址:https://github.com/yuezhongxin/CNBlogs.Apply.Sample(代码已更新) 阅读目录: ...

  9. Vertica 分区表设计

    Vertica数据库中的表只是一个逻辑概念. 实际存储在磁盘上的是projection. 当创建一张表,没有创建projection时,那么插入数据的时候会自动创建一个默认的projection.如果 ...

  10. Python爬虫小白入门(二)requests库

    一.前言 为什么要先说Requests库呢,因为这是个功能很强大的网络请求库,可以实现跟浏览器一样发送各种HTTP请求来获取网站的数据.网络上的模块.库.包指的都是同一种东西,所以后文中可能会在不同地 ...