发邮件在 java web 项目中是一个常用功能,之前在项目中刚好用到了邮件发送功能,现在用博客进行记录,方便以后查阅。这篇文章简单介绍使用 javax.mail 发送邮件的步骤,并提供封装好的邮件发送方法,希望对自己和别人有用。如有不妥的地方,也请大家指正。

1. 获取 javax.mail 相关 jar 包

1.1 下载 jar 包

https://www.oracle.com/technetwork/java/index-138643.html

1.2 如若使用 maven 管理 jar 包,则使用以下配置从仓库获取 jar 包

<dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version>
</dependency>

此处注意 jar 包版本,高版本的 jar 包中无 com.sun.mail 包,腾讯邮箱的设置需要用到此包中的类。

2. 配置邮件发送的相关节点

2.1 腾讯 qq 邮箱开启 POP3/SMTP 服务

进入 qq 邮箱设置查找 POP3/SMTP 服务,按邮箱提示步骤开通即可。腾讯企业邮箱可忽略此步骤,不进行配置。

2.2 配置文件密码

如上图所示,qq 邮箱设置独立密码,则配置文件中应配置该独立密码;腾讯企业邮箱中不存在独立密码,但是可开启安全登录,开启后会生成安全授权码,此时密码配置为该安全授权码。如果什么都没设置,密码即邮箱的登录密码。

2.3 配置文件

#邮件服务器
mail.host=smtp.exmail.qq.com#邮件发送协议
mail.transport.protocol=smtp#需要验证用户名密码
mail.smtp.auth=true#腾讯邮箱设置SSL加密
mail.smtp.ssl.enable=true#发件人邮箱
mail.user=******@foxmail.com#发件人邮箱密码
mail.password=******

2.4 封装邮件发送方法

Java 代码:

import com.sun.mail.util.MailSSLSocketFactory;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Properties;/*** @Description TODO* @Author peiyu* @Date 2019/8/12 9:29*/
@Component
public class EmailUtil {private static final Logger logger = LoggerFactory.getLogger(EmailUtil.class);@Value("${mail.host}")private String mailHost;@Value("${mail.user}")private String mailUser;@Value("${mail.password}")private String mailPassword;@Value("${mail.transport.protocol}")private String mailTransportProtocol;@Value("${mail.smtp.auth}")private String mailSmtpAuth;@Value("${mail.smtp.ssl.enable}")private String mailSmtpSslEnable;private Properties getEmailProperties() throws GeneralSecurityException {logger.info("EmailUtil.getEmailProperties() start!");Properties prop;try {prop = new Properties();// 设置邮件服务器prop.setProperty("mail.host", mailHost);// 邮件发送协议prop.setProperty("mail.transport.protocol", mailTransportProtocol);// 是否需要验证用户名密码prop.setProperty("mail.smtp.auth", mailSmtpAuth);prop.put("mail.smtp.ssl.enable", mailSmtpSslEnable);// 关于腾讯邮箱,还要设置SSL加密,加上以下代码即可MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);prop.put("mail.smtp.ssl.socketFactory", sf);} catch (GeneralSecurityException e) {logger.error("EmailUtil.getEmailProperties() error!");throw e;}logger.info("EmailUtil.getEmailProperties() end!");return prop;}private Session getEmailSession(Properties prop) {logger.info("EmailUtil.getEmailSession() start!");Session session = Session.getDefaultInstance(prop, new Authenticator() {public PasswordAuthentication getPasswordAuthentication() {//发件人邮件用户名、授权码return new PasswordAuthentication(mailUser, mailPassword);}});//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态session.setDebug(false);logger.info("EmailUtil.getEmailSession() end!");return session;}/*** 发送邮件** @param subject 邮件主题* @param content 邮件内容* @param to      邮件接收人* @param cc      邮件抄送人* @return int(1:发送成功;-1:发送失败)*/public int sendEmail(String subject, String content, String to, String cc) {logger.info("EmailUtil.sendEmail() start!");Transport ts;try {Properties prop = getEmailProperties();if (null == prop) {return -1;}//使用JavaMail发送邮件的5个步骤//1.创建定义整个应用程序所需的环境信息的 Session 对象Session session = getEmailSession(prop);//2、通过session得到transport对象ts = session.getTransport();//3、使用邮箱的用户名和授权码连上邮件服务器ts.connect(mailHost, mailUser, mailPassword);//4、创建邮件//创建邮件对象MimeMessage message = new MimeMessage(session);//指明邮件的发件人message.setFrom(new InternetAddress(mailUser));// 指明邮件的收件人if (StringUtils.isNotBlank(to)) {message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));} else {logger.info("EmailUtil.sendEmail() Message.RecipientType.TO is null!");return -1;}// 邮件抄送if (StringUtils.isNotBlank(cc)) {message.setRecipient(Message.RecipientType.CC, new InternetAddress(cc));}//邮件的标题message.setSubject(subject);//邮件的文本内容message.setContent(content);//5、发送邮件ts.sendMessage(message, message.getAllRecipients());ts.close();} catch (MessagingException | GeneralSecurityException e) {logger.error("EmailUtil.sendEmail() error!", e);return -1;}logger.info("EmailUtil.sendEmail() end!");return 1;}
}

通过以上步骤就可以进行邮件发送,快来试试吧!

使用 javax.mail 发送邮件相关推荐

  1. 使用javax.mail发送邮件

    文章目录 一.发邮件流程 二.关于邮件协议和端口 三.开启邮件协议和端口 3.1. QQ邮箱 3.2. 163邮箱 四.实战发送邮件 4.1. 引入依赖 4.2. 方法重写 4.3. 发送邮件核心类工 ...

  2. java发送邮件到qq邮箱_Java利用javax.mail发送邮件至QQ邮箱

    javax.mail去哪里下载就不要说了吧.以下是利用javax.mail发送邮件的代码.public static void sendMail(String fromMail,String user ...

  3. spring boot 使用 javax.mail发送邮件常见错误Authentication failed、Mail server connection failed

    最近做系统内审批业务,需要发送邮件,在本地使用公司邮箱测试时,是没有问题的,没有使用发件服务器验证: 项目使用的是spring boot 2.x; 初始配置文件: spring:mail:host: ...

  4. 使用javax.mail发送邮件详解

    一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...

  5. 使用javax.mail发送邮件出现:javax.mail.AuthenticationFailedException: failed to connect

    用java发送邮件时,总提示上图错误.检查了很多遍,账号密码都正确,可是总是提示连接失败. 最后发现,问题并不出在代码上,而是出在了邮箱的设置上.下面介绍一下解决方法:(以网易邮箱为例) 首先,点击邮 ...

  6. javax.mail发送邮件(带附件)

    下面是java mail写的一个简单的发送邮件的功能: 发送邮件之前,先下载javax.mail的jar包,jar包地址:点击打开链接 请发件人地址,收件人地址,发件人密码和要发送的附件请注意填写. ...

  7. 通过javax.mail发送邮件(示例gmail、qq)

    最近学习了一下javax.mail,想通过gmail邮箱发送邮件到qq邮箱.但是由于gmail的两步验证,一直授权无法通过. 错误如下: DEBUG: JavaMail version 1.4.7 D ...

  8. 【JAVA】使用javax.mail发送邮件

    本文主要解决以下问题: 1.如何用java实现邮件发送功能? 2.如何发送给多个人.抄送给多个人? 3.如何发送携带附件的邮件? 开始说正文. 首先,发送邮件肯定要有个发件人,所有要有发件人的用户名和 ...

  9. java mail 发件人昵称,Java使用javax.mail发送邮件 解决收件人、发件人名字乱码问题...

    /** * 格式化 Name 的地址 * @param name 名字 * @param email Email地址 * @return 格式化的地址 */ public static String ...

最新文章

  1. SQLServer出现 '其他会话正在使用事务的上下文' 的问题原因,什么是环回链接服务器?(转载)...
  2. linux安装openssl
  3. vue实现上下滑动翻页_vue 实现滚动到底部翻页效果(pc端)
  4. header+php+xiazai_php通过header方法实现文件下载
  5. Java语言实现hello world代码
  6. MongoDB 最大连接数 设置失效的异常分析
  7. Linux php.ini设置date.timezone=XXX为什么不生效?
  8. 2007年IT技术走向何方 网络将再掀“酷”革命
  9. Mysql-mmm配置全自动切换主从关系和读写分离
  10. Java - Java Mail邮件开发(3)spring +Java Mail + Velocity
  11. Excel中输入身份证号后三位变成0的情况处理如下
  12. 数博会“十佳大数据案例”发布,我们入选了。
  13. Aras Innovator: AML包
  14. JS将阿拉伯数字翻译成中文的大写数字、JS将数字转换为大写金额(整理)
  15. Flutter 与 RN对比
  16. element-ui el-dialog 的form 表单验证关闭时清除错误验证信息
  17. 【Druid】Druid连接池(三)——配置监控界面设置登录界面
  18. FlexboxLayout全攻略(Google官方灵活实现流式布局控件)
  19. 国外能够使用替代Google Map 方案调研
  20. 【必备算法】动态规划:LeetCode题(六)322. 零钱兑换,518. 零钱兑换 II

热门文章

  1. stm32万年历流程图_STM32 万年历 显示年月日 时分秒 星期
  2. Vue 使用高德地图,精确定位ip定位,获取城市、地区位置
  3. matlab曲线拟合后提取拟合方程
  4. unrar.dll使用说明
  5. 听了老同志的教导:\r \n 到底是什么
  6. CentOS上安装运行XWiKi
  7. 2019智能手表推荐_2019年,这4款智能手表已经秒杀Apple Watch!
  8. Python 零基础入门必看,这些知识点你都掌握了吗?
  9. 现实世界的Windows Azure:访问海军研究局破坏性业务技术总监Dano DeBrou
  10. 无聊乱搞:用shell脚本实现windows下cena的评测功能