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

使用JavaMail发送邮箱详解的更多相关文章

  1. JavaMail使用SMTP协议发送电子邮件(详解)

    Properties props = new Properties(); props.setProperty("mail.transport.protocol", "sm ...

  2. 阿里云服务器 通过JavaMail发送邮箱STMP问题( 25端口被禁用 使用SSL协议465端口 )

    我们传统使用的比较简单的是 STMP 25端口收发邮件 今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件 开始在网上有说发现是JDK1.8的原因,然后自己也把JDK1.8换到了 ...

  3. 阿里云服务器 通过JavaMail发送邮箱STMP问题 25端口被禁用 使用SSL协议465端口

    1 问题描述 我们传统使用的比较简单的是 STMP 25端口收发邮件 今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件 开始在网上有说发现是JDK1.8的原因,然后自己也把JD ...

  4. JavaMail发送邮箱

    package utils; import java.security.GeneralSecurityException; import java.util.Properties; import ja ...

  5. Android使用HttpUrlConnection请求服务器发送数据详解

    HttpUrlConnection是java内置的api,在java.net包下,那么,它请求网络同样也有get请求和post请求两种方式.最常用的Http请求无非是get和post,get请求可以获 ...

  6. si4745 FM-AM-SW 音量控制芯片 驱动详解

    在论坛上看到有人发这个dsp 芯片,仔细看了下,发现功能正合我意,网上能找到的资料(源码)不多 软件环境:linux4.1.36  arm-linux-gcc 4.3.2 实现功能:自动搜台,上一台, ...

  7. 邮件实现详解(四)------JavaMail 发送(带图片和附件)和接收邮件

    好了,进入这个系列教程最主要的步骤了,前面邮件的理论知识我们都了解了,那么这篇博客我们将用代码完成邮件的发送.这在实际项目中应用的非常广泛,比如注册需要发送邮件进行账号激活,再比如OA项目中利用邮件进 ...

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

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

  9. Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

    Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...

随机推荐

  1. 清北学堂—2020.1提高储备营—Day 1 afternoon(二分、分治、贪心)

    qbxt Day 1 afternoon --2020.1.17 济南 主讲:李佳实 目录一览 1.二分法 2.分治 3.贪心 总知识点:基础算法 一.二分法 (1)算法分析:二分法是一种暴力枚举的优 ...

  2. ArcMap 新建空白图层,并添加元素

    想要添加新的图层,不能从File 里找,那里都是添加数据,貌似ArcGIS的定位是对数据的处理. 比如导入其他格式文件,或者导入对应的数据文件.excel csv cad 等,在此基础上进行分析,而不 ...

  3. MySQL8服务无法正常启动的解决方法(1053错误)

    个人博客 地址:https://www.wenhaofan.com/article/20190530120545 错误描述 在MySQL安装的最后一步启动失败,如下图所示 在服务和应用程序->服 ...

  4. 07-SV线程以及线程间的通信

    1.几种语句块的区别 (1)fork……join:块内语句以并发方式执行 (2)begin……end:块内语句以顺序方式执行 (3)fork……join_none:其块内语句执行时,父线程继续执行 ( ...

  5. 程序里面带有浮点数,默认会自动转换为double类型存储

    带有浮点数,默认会转换为double类型存储. #include "common.h" #include <stdio.h> #include <stdlib.h ...

  6. 0级搭建类011-Oracle Linux 7.x安装(OEL 7.7) 公开

    项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...

  7. Typecho的卡哇伊小猫咪小插件(Live2D猫咪插件)

    之前看到一个博客,被它博客上的动态小猫咪给吸引了,这个纯粹就是一个在线撸猫的神器啊.但是在网上寻找一番,并没有找到合适的插件,或者说没有找到合适的模型,因此无奈之后,只能向该博主请教,在它写的博客上, ...

  8. C# LINQ学习笔记四:LINQ to OBJECT之操作文件目录

    本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5816051.html,记录一下学习过程以备后续查用. 许多文件系统操作实质上是查询,因此非常适合使用LINQ方 ...

  9. Mac上利用VScode配置c/c++开发环境

    Mac上利用VScode配置c/c++开发环境 哭辽,Typora里面最好不要插入表情,不然保存会闪退 首先你要有一个vscode 在扩展里面下载c/c++ 第一步 ⬆+com+p 打开命令模式:选择 ...

  10. Help Jimmy POJ - 1661 dp

    #include<iostream> #include<stdio.h> #include<algorithm> #include<cstring> u ...