使用 javax.mail 发送邮件

article/2025/9/20 8:58:37

        发邮件在 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;}
}

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


http://chatgpt.dhexx.cn/article/Jc1UeLSa.shtml

相关文章

javax.validation校验整理

文章目录 前言一、非空校验二、长度校验三、数值校验四、正则校验五、自定义校验注解六、校验组 前言 javax.validation校验总是混淆&#xff0c;特此整理。如有错误&#xff0c;请不吝指正。 一、非空校验 序号注解解释适用场景1NotNull不能为null&#xff0c;但可以为empt…

Java API学习(二)javax包

在线中文api&#xff1a;http://tool.oschina.net/apidocs/apidoc?apijdk-zh Java版本&#xff1a;1.8 Android版本&#xff1a;23 java的api有java和javax2个包 java和javax都是Java的API包&#xff0c;java是核心包&#xff0c;javax的x是extension的意思&#xff0c;也就…

知识图谱和图神经网络

知识图谱 理论知识知识图谱嵌入模型TransEDistMult 知识图谱的抽取与构建知识图谱工程知识抽取——实体识别与分类知识抽取——实体关系抽取与属性补全 知识图谱的推理常见知识图谱推理方法分类 图表示学习随机游走同构图算法异构图算法 图神经网络系列监督学习或半监督学习模型…

图神经网络和常见的神经网络的区别

GNN-Graph Neural Networks 0 前言1 图神经网络和以往深度学习的区别2 图神经网络的特点 参考知乎&#xff1a;https://zhuanlan.zhihu.com/p/136521625 0 前言 图神经网络有很多比较好的综述&#xff1a; 1、Graph Neural Networks: A Review of Methods and Applications.…

图神经网络(Graph Neural Networks)

图神经网络&#xff08;Graph Neural Network&#xff09;在社交网络、推荐系统、知识图谱上的效果初见端倪&#xff0c;成为近2年大热的一个研究热点。然而&#xff0c;什么是图神经网络&#xff1f;图和神经网络为什么要关联&#xff1f;怎么关联&#xff1f; 本文简单介绍GN…

图神经网络综述

文章目录 1 简介 1.1 GNN简史1.2 GNN的相关研究1.3 GNN vs 网络嵌入1.4 文章的创新性2 基本的图概念的定义3 GNN分类和框架 3.1 GNNs分类3.2 框架4 图卷积网络 4.1 基于图谱的GCN 4.1.1 图信号处理4.1.2 基于谱的GCN方法4.1.3 总结4.2 基于空间的GCN 4.2.1 基于循环的空间GCNs…

什么是图神经网络 (GNN)?

图表无处不在。您的社交网络是人和关系的图表。你的家人也一样。您从 A 点到 B 点所走的道路构成了一个图形。将这个网页连接到其他网页的链接形成了一个图表。当您的雇主向您付款时&#xff0c;您的付款会通过金融机构的图表。 基本上&#xff0c;由链接实体组成的任何东西都…

图神经网络,这到底是个什么?

摘要&#xff1a;图神经网络是一种基于图结构的深度学习方法。 1、什么是图神经网络 图神经网络&#xff08;Graph Neu做ral Networks, GNNs&#xff09;是一种基于图结构的深度学习方法&#xff0c;从其定义中可以看出图神经网络主要由两部分组成&#xff0c;即“图”和“神经…

图学习笔记(三):图神经网络

图学习笔记&#xff08;三&#xff09;&#xff1a;图与图学习 回顾六. 图神经网络&#xff08;Graph Neural Networks&#xff09;一、 什么是图神经网络二、 有哪些图神经网络符号定义1. 图卷积网络&#xff08;Graph Convolution Networks&#xff0c;GCNs&#xff09;GCN方…

图神经网络(一):综述

文章目录 1.背景介绍1&#xff09;图简介2&#xff09;图神经网络简介 2.GNN 的通用设计流程1) 查找图结构2&#xff09;明确图类型和规模3&#xff09;设计损失函数4&#xff09;构造模型 3.计算模块的实例化3.1 传播模块——卷积算子&#xff08;convolution operator&#x…

图神经网络(Graph neural networks)综述

论文链接&#xff1a;Graph Neural Networks: A Review of Methods and Applications Abstract&#xff1a;图&#xff08;Graph&#xff09;数据包含着十分丰富的关系型信息。从文本、图像这些非结构化数据中进行推理学习&#xff0c;例如句子的依赖树、图像的场景图等&#…

什么是图神经网络?

什么是图神经网络&#xff1f; 更多精彩内容: https://www.nvidia.cn/gtc-global/?ncidref-dev-876561 GNN 将深度学习的预测能力应用于丰富的数据结构&#xff0c;这些数据结构将对象及其关系描述为图中由线连接的点。 当两种技术融合时&#xff0c;它们可以创造出新奇而美…

图神经网络(GNN)简述

目录 一、什么是图(graph) 二、如何将图片(images)表示成图(graph) 三、在机器学习中使用图(graph)的挑战 四、图神经网络(Graph Neural Network, GNN) (I). The simplest GNN (II). 如何做预测 (III).如何将图的结构信息引入GNN (IV).Learning edge representations (V). 为什…

什么是图神经网络

2019年可以说是图神经网络元年。 01 什么是图神经网络&#xff1f; 1. 图和属性图 要了解图神经网络&#xff0c;首先要了解图。图是由节点和边组成的&#xff0c;如下图所示。一般图中的节点表示实体对象&#xff08;比如一个用户、一件商品、一辆车、一张银行卡等都可以作…

图神经网络初探

介绍 随着图神经网络&#xff08;Graph Neural Networks&#xff0c;GNN&#xff09;热潮的出现&#xff0c;了解、掌握图神经网络相关原理以及应用相关技术越来越成来从事人工智能人员的必要条件。本文主要概述图神经网络的概念、相关模型、经典应用&#xff0c;经过本文的学习…

图神经网络的介绍

近年来&#xff0c;深度学习领域关于图神经网络&#xff08;Graph Neural Networks&#xff0c;GNN&#xff09;的研究热情日益高涨&#xff0c;图神经网络已经成为各大深度学习顶会的研究热点。GNN处理非结构化数据时的出色能力使其在网络数据分析、推荐系统、物理建模、自然语…

机器学习笔记 - 什么是图神经网络?

一、图神经网络GNN概述 机器学习的力量正在被用来解决一系列不同领域中日益复杂的问题。模型需要识别和理解更抽象的概念和对象,并且在许多情况下做出非线性决策。尽管它们本身很强大,但更传统的机器学习模型类型缺乏准确映射和处理一些最复杂问题的能力。 人工神经网络越来越…

【图神经网络实战】深入浅出地学习图神经网络GNN(下)

文章目录 一、Graph Attention Network1.1 图注意力机制作用与方法1.2 Attention计算1.3 Graph Attention 做了什么 二、序列图神经网络TGCN2.1 序列图神经网络TGCN的应用2.2 序列图神经网络细节&#xff08;实例&#xff1a;交通流量预测&#xff09;2.2.1 交通场景示意图2.2.…

【图神经网络实战】深入浅出地学习图神经网络GNN(上)

文章目录 一、图神经网络应用领域1.1 芯片设计1.2 场景分析与问题推理1.3 推荐系统1.4 欺诈检测与风控相关1.5 知识图谱1.6 道路交通的流量预测1.7 自动驾驶&#xff08;无人机等场景&#xff09;1.8 化学&#xff0c;医疗等场景1.9 物理模型相关 二、图神经网络基本知识2.1 图…

pytorch开发工具

学习目标&#xff1a; 1、pycharm 安装 2、jupter安装 学习内容&#xff1a; 1、pycharm 安装 官网地址&#xff1a; https://www.jetbrains.com/pycharm/download/#sectionwindows 点击安装 选择环境变量&#xff1a; 验证&#xff1a; 2、jupyter安装 进入pytorch 环…