以下为实现代码

  1. import javax.mail.Session;
  2. import javax.mail.Transport;
  3. import javax.mail.internet.InternetAddress;
  4. import javax.mail.internet.MimeMessage;
  5. import java.util.Date;
  6. import java.util.Properties;
  7. /**
  8. * JavaMail 版本: 1.6.0
  9. * JDK 版本: JDK 1.7 以上(必须)
  10. */
  11. public class Mail {
  12. // 发件人的 邮箱 和 密码(替换为自己的邮箱和密码)
  13. // PS: 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”),
  14. // 对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。
  15. public static String myEmailAccount = "发件人的邮箱";
  16. public static String myEmailPassword = "授权码";
  17. // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com
  18. // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
  19. public static String myEmailSMTPHost = "smtp.qq.com";
  20. // 收件人邮箱(替换为自己知道的有效邮箱)
  21. public static String receiveMailAccount = "收件人邮箱";
  22. public static void main(String[] args) throws Exception {
  23. // 1. 创建参数配置, 用于连接邮件服务器的参数配置
  24. Properties props = new Properties(); // 参数配置
  25. props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
  26. props.setProperty("mail.smtp.host", myEmailSMTPHost); // 发件人的邮箱的 SMTP 服务器地址
  27. props.setProperty("mail.smtp.auth", "true"); // 需要请求认证
  28. // PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),
  29. // 如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,
  30. // 打开下面 /* ... */ 之间的注释代码, 开启 SSL 安全连接。
  31. /*
  32. // SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
  33. // 需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
  34. // QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
  35. final String smtpPort = "465";
  36. props.setProperty("mail.smtp.port", smtpPort);
  37. props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  38. props.setProperty("mail.smtp.socketFactory.fallback", "false");
  39. props.setProperty("mail.smtp.socketFactory.port", smtpPort);
  40. */
  41. // 2. 根据配置创建会话对象, 用于和邮件服务器交互
  42. Session session = Session.getInstance(props);
  43. session.setDebug(true); // 设置为debug模式, 可以查看详细的发送 log
  44. // 3. 创建一封邮件
  45. MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
  46. // 4. 根据 Session 获取邮件传输对象
  47. Transport transport = session.getTransport();
  48. // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
  49. //
  50. // PS_01: 成败的判断关键在此一句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log,
  51. // 仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误
  52. // 类型到对应邮件服务器的帮助网站上查看具体失败原因。
  53. //
  54. // PS_02: 连接失败的原因通常为以下几点, 仔细检查代码:
  55. // (1) 邮箱没有开启 SMTP 服务;
  56. // (2) 邮箱密码错误, 例如某些邮箱开启了独立密码;
  57. // (3) 邮箱服务器要求必须要使用 SSL 安全连接;
  58. // (4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务;
  59. // (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。
  60. //
  61. // PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。
  62. transport.connect(myEmailAccount, myEmailPassword);
  63. // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
  64. transport.sendMessage(message, message.getAllRecipients());
  65. // 7. 关闭连接
  66. transport.close();
  67. }
  68. /**
  69. * 创建一封只包含文本的简单邮件
  70. *
  71. * @param session 和服务器交互的会话
  72. * @param sendMail 发件人邮箱
  73. * @param receiveMail 收件人邮箱
  74. * @return
  75. * @throws Exception
  76. */
  77. public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
  78. // 1. 创建一封邮件
  79. MimeMessage message = new MimeMessage(session);
  80. // 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称)
  81. message.setFrom(new InternetAddress(sendMail, "测试", "UTF-8"));
  82. // 3. To: 收件人(可以增加多个收件人、抄送、密送)
  83. message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "测试", "UTF-8"));
  84. // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)
  85. message.setSubject("测试", "UTF-8");
  86. // 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容)
  87. message.setContent("测试邮件请勿回", "text/html;charset=UTF-8");
  88. // 6. 设置发件时间
  89. message.setSentDate(new Date());
  90. // 7. 保存设置
  91. message.saveChanges();
  92. return message;
  93. }
  94. }

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

  1. 使用java发送电子邮件

    经常在账号绑定邮箱或找回密码时,邮箱会收到一条验证邮件,好奇用代码该怎么发送邮件,看到了许多相关的博客,实现步骤都写的很详细,今天照着其他博客的步骤也确实实现了代码发送邮件,在这里重新记录下步骤,加深 ...

  2. JAVA实现发送电子邮件

    相信大家对于网站也好,手机app也好,用户注册时,需要进行邮箱验证的功能特别好奇吧,本篇我将带领大家一起实现一下这个简单而又神奇的小功能,让我们的应用也可以加入这些神奇的元素.废话不多说,下面开始我们 ...

  3. java发送 email

    public class EmailUtils implements IAction { private static Logger logger = Logger.getLogger(EmailUt ...

  4. javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)

    引言: JavaMail 是一种可选的.能用于读取.编写和发送电子消息的包 JavaMail jar包下载地址:http://java.sun.com/products/javamail/downlo ...

  5. javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)

    引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...

  6. Spring发送电子邮件

      Spring提供了发送电子邮件的功能,它向用户屏蔽了底层邮件系统的一些细节,同时代表客户端负责底层的资源处理. Spring的邮件服务支持主要是通过JavaMailSender这个接口实现的: p ...

  7. Spring通过Gmail SMTP服务器MailSender发送电子邮件

    Spring提供了一个有用的“org.springframework.mail.javamail.JavaMailSenderImpl”类,通过JavaMail API 简化邮件发送过程.这里有一个项 ...

  8. Servlet 发送电子邮件

    使用 Servlet 发送一封电子邮件是很简单的,但首先您必须在您的计算机上安装 JavaMail API 和 Java Activation Framework)JAF). 您可以从 Java 网站 ...

  9. Java发送Http请求并获取状态码

    通过Java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断. try { URL u = new URL("http://10.1.2.8:8080/fqz/page ...

随机推荐

  1. Java synchronized和 Lock 的区别与用法

    在分布式开发中,锁是线程控制的重要途径.Java为此也提供了2种锁机制,synchronized和lock.做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方.  ...

  2. 高级Java面试总结2

    1. JVM结构原理.GC工作机制详解 答:具体参照:JVM结构.GC工作机制详解     ,说到GC,记住两点:1.GC是负责回收所有无任何引用对象的内存空间. 注意:垃圾回收回收的是无任何引用的对 ...

  3. [SQL]LeetCode184. 部门工资最高的员工 | Department Highest Salary

    The Employee table holds all employees. Every employee has an Id, a salary, and there is also a colu ...

  4. [Swift]LeetCode213. 打家劫舍 II | House Robber II

    You are a professional robber planning to rob houses along a street. Each house has a certain amount ...

  5. [Swift]LeetCode468. 验证IP地址 | Validate IP Address

    Write a function to check whether an input string is a valid IPv4 address or IPv6 address or neither ...

  6. [Swift]LeetCode698. 划分为k个相等的子集 | Partition to K Equal Sum Subsets

    Given an array of integers nums and a positive integer k, find whether it's possible to divide this ...

  7. [Swift]LeetCode1019. 链表中的下一个更大节点 | Next Greater Node In Linked List

    We are given a linked list with head as the first node.  Let's number the nodes in the list: node_1, ...

  8. Ubuntu12.04下安ns-3.29及Ubuntu换源方法

    目录 1.下载ns-3.29 2.安装gcc-4.9.2 3.编译.测试ns-3.29 第一种:更新,文章开头说的 第二种,更新源 主机型号:Ubuntu12.04 仿真环境版本:NS-3.29 安装 ...

  9. RHEL,红帽CentOS7linux进入单用户(紧急救援)模式修改密码

    centos7进入单用户模式   当我们设置用户密码时,有可能会忘记,这时如何登陆呢,单用户模式就可以 首先我们进入开机界面,按e进行选择 会进入以下界面, 然后找到图中红线标注的该行,在行尾添加 i ...

  10. 参数验证 @Validated 和 @Valid 的区别

    来源:blog.csdn.net/qq_27680317/article/details/79970590 整编:Java技术栈(公众号ID:javastack) Spring Validation验 ...