spring mail 邮件发送demo

首先配置号邮件服务器(我用的是126邮箱),获取密钥:

进入下图的【邮箱中心】->点击右侧的齿轮按钮

接着,开启 下图位置 的 POP3/SMTP(我当时点击开启时,需要手机扫码认证下)

最后成功后,会给你弹出个授权码窗口,里面显示授权码。这个要保留,就是后面的密码。

同时,本页面底部,又服务器地址,记得备份下,后面会用:

后面就是使用 spring mail 库了。很方便的

maven 引入库:

 <!-- spring mail --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>

给出自己整理的代码示例:

package com.example.demo;import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;class SpringMailTests {public static void main(String[] args) throws MessagingException {JavaMailSenderImpl sender = new JavaMailSenderImpl();sender.setHost("smtp.126.com");//sender.setPort(994);sender.setUsername("jiang3331064@126.com");sender.setPassword("GQHFSOBQDRKKKTIE");sender.setDefaultEncoding("UTF-8");//        SimpleMailMessage message = sendText(sender);//        MimeMessage message = sendHtml(sender);//        MimeMessage message = sendEmbeddedResource(sender);MimeMessage message = sendAttachment(sender);// 发送sender.send(message);System.out.println("success");}/*** 发送文本** @param sender*/public static SimpleMailMessage sendText(JavaMailSenderImpl sender) {SimpleMailMessage message = new SimpleMailMessage();message.setFrom("jiang3331064@126.com");message.setTo("rain.jiang@xx.com", "645504059@qq.com");message.setSubject("126邮件发送测试222");message.setText("我是个测试文本222");// 抄送message.setCc("xxx@xx.com");return message;}/*** 发送HTML邮件** @param sender* @throws MessagingException*/public static MimeMessage sendHtml(JavaMailSenderImpl sender) throws MessagingException {MimeMessage message = sender.createMimeMessage();// 简化对mimeMessage的封装MimeMessageHelper helper = new MimeMessageHelper(message, false, "UTF-8");helper.setFrom("jiang3331064@126.com");helper.setCc("dff@mfdf.com");helper.setTo(new String[]{"rain.jiang@xx.com", "645504059@qq.com"});helper.setSubject("HTML邮件");helper.setText("<h1 style='color:green;'>hello,world!</h1>", true);
//return message;}/*** 发送内嵌资源的邮件** @param sender* @throws MessagingException*/public static MimeMessage sendEmbeddedResource(JavaMailSenderImpl sender) throws MessagingException {MimeMessage message = sender.createMimeMessage();// 简化对mimeMessage的封装 内嵌资源要将multipart设置为trueMimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");helper.setFrom("jiang3331064@126.com");
//        helper.setCc("ccc@dddd.com");helper.setTo(new String[]{"rain.jiang@xx.com", "645504059@qq.com"});helper.setSubject("发送内嵌资源的邮件");// 内嵌文件的id已特定的标志引用 格式为cid:<内嵌文件id>
//        helper.setText("<a style='color:red;'>hello</a>",true);helper.setText("<html><body>hello<img src='cid:id1'/><br /><img src='cid:id2'/></body></html>", true);FileSystemResource resource = new FileSystemResource("C:/Users/we749/Documents/workspace/onestophealthcheck/project-server/src/main\\resources\\static\\image\\bg1.png");FileSystemResource resource2 = new FileSystemResource("C:\\Users\\we749\\Pictures\\bg1.png");
//
//        // 使用addInline 方法将文件内嵌到邮件中helper.addInline("id1", resource);helper.addInline("id2", resource2);return message;}/*** @param sender* @return* @throws MessagingException*/public static MimeMessage sendAttachment(JavaMailSenderImpl sender) throws MessagingException {MimeMessage message = sender.createMimeMessage();// 简化对mimeMessage的封装 内嵌资源要将multipart设置为trueMimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");helper.setFrom("jiang3331064@126.com");
//        helper.setCc("ccc@dddd.com");helper.setTo(new String[]{"rain.jiang@xx.com", "645504059@qq.com"});helper.setSubject("发送带附件的邮件");// 内嵌文件的id已特定的标志引用 格式为cid:<内嵌文件id>helper.setText("<html><body>发送带附件的邮件<body></html>", true);FileSystemResource resource = new FileSystemResource("C:/Users/we749/Documents/workspace/onestophealthcheck/project-server/src/main\\resources\\static\\image\\bg1.png");// 使用addAttachment 方法 添加附件helper.addAttachment("tiger.jpeg", resource);return message;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

putIfAbsent、computeIfAbsent、computeIfPresent

putIfAbsent 判断是否存在&#xff0c;不存在则设置 hashmap.putIfAbsent(K key, V value) 例子如下&#xff1a; public static void main(String[] args) {//hashmap.putIfAbsent(K key, V value)HashMap hashMap Maps.newHashMap();hashMap.put("aa","on…

ConnectionError怎么解决

文章目录 解决思路lz的具体解决过程 解决思路 这个错误表明在尝试加载评价指标时&#xff0c;代码试图从 huggingface 下载文件&#xff0c;但由于代理错误而无法连接。 为了解决这个问题&#xff0c;你可以尝试以下几个步骤&#xff1a; 1.设置代理&#xff1a; 如果你在使…

Zabbix监控系统部署与管理

zabbix介绍 zabbix是⼀个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的免费开源解决⽅案。zabbix能监视各种⽹络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbix构成 zabbix由…

Windows进程机制

进程 进程要做任何事情&#xff0c;必须让一个线程在它的上下文运行。该线程负责执行进程地址空间包含的代码。每个进程至少要有一个线程来执行进程地址空间包含的代码。当系统创建一个进程的时候&#xff0c;会自动为进程创建第一个线程&#xff0c;这称为主线程&#xff08;…

命令调用先构建hashTable

GPT 代码改 #include <stdio.h> #include <stdlib.h> #include <string.h>#define TABLE_SIZE 256struct Node {char *key;void *value;struct Node *next; };struct HashTable {struct Node *table[TABLE_SIZE]; };void initHashTable(struct HashTable *ha…

GPT-AI导航

1. https://ai-bot.cn/ https://ai-bot.cn/

工业固体废物智能化综合管控平台

工业固体废物智能化综合管控平台&#xff0c;涵盖产废企业、运输企业、固废处置企 业等不同群体应用&#xff0c;根据不同群体设计不同的业务应用子系统功能&#xff0c;以及各个不 同群体的环保物联网平台子系统功能模块&#xff0c;同时具有移动端的应用APP。 建立产废企业端…

C++ stringOJ练习题

目录 把字符串转换成整数 反转字符串 字符串中的第一个唯一字符 字符串最后一个单词的长度 找出字符串中第一个只出现一次的字符 字符串相加 字符串最后一个单词长度 字符串相乘 反转字符串3 反转字符串2 验证回文串 把字符串转换成整数 通过遍历字符串并逐位转换…

phpy 连接 PHP与Python生态 跨界合作 PHPY搭建 已解决

目录 需求介绍 安装 windows版本 文件地址 运行效果 需求介绍 在日常功能开发中&#xff0c;难免会使用python的计算库&#xff0c;同时自己要是一名PHP开发工程师。就在最近有相应的需求&#xff0c;索性使用phpy来进行功能开发 安装 windows版本 phpy 是识沃团队最新推出…

千梦网创:Too Young,to simple

大多数人啊&#xff0c;还是too young&#xff0c;包括我。 网上的评论对我而言并不影响我通过提供价值服务经营生活&#xff0c;但是有时候对于我的思考还是有一些帮助的。 我把很多可以争与不可争的事件看做是一种现象&#xff0c;这种现象往往可以给予我新的能量。 当学员…

双端队列和优先级队列

文章目录 前言dequedeque底层设计迭代器设计 priority仿函数数组中的第k个最大元素优先级队列模拟实现pushpop调整仿函数存储自定义类型 前言 今天要介绍比较特殊的结构&#xff0c;双端队列。 还有一个适配器&#xff0c;优先级队列。 deque 栈的默认容器用了一个deque的东西…

【C语言(十三)】

自定义类型&#xff1a;结构体 一、结构体类型的声明 1.1、结构体回顾 结构是⼀些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.1.1、结构的声明 例如描述⼀个学生&#xff1a; struct Stu {char name[20];//名字int age;//年龄c…

三层交换,DHCP的详解与VRRP

目录 一、三层交换 1、三层交换机的作用&#xff1a; 2.vlan的虚拟接口vlanif&#xff08;ifinterface接口&#xff09; 3.三层交换机实验 4.拓展实验​编辑 二、DHCP 1.自动获取ip地址&#xff1a; 2.DHCP的好处&#xff1a; 3.分配方式&#xff1a; 4.举例&#xff…

分布式消息传递新时代:深入了解RabbitMQ_sharding插件的精髓【RabbitMQ 八】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 分布式消息传递新时代&#xff1a;深入了解RabbitMQ_sharding插件的精髓 引言前言基础概念以及原理配置和使用应用场景结语 引言 &#x1f33a;&#xff1a;docker构建rabbitmq并配置延迟队列插件 ⏳…

KAKFA实践零碎记录

这里写目录标题 1 内存泄露2 生产者报错 1 内存泄露 错误信息 反复执行&#xff1a;创建消费者->关闭消费者后&#xff0c;内存缓慢上升且GC不能回收内存 错误原因 关闭消费者需要执行KafkaConsumer#close()函数 public void close() {this.close(Duration.ofMillis(30000…

Linux——进程中被打开的文件

C语言中有着许多对文件操作的函数&#xff0c;包括其他语言也有&#xff0c;但是从语言来了解文件有点浅显计算机的一切都离不开操作系统&#xff0c;那么文件跟操作系统也有着密切的关系&#xff0c;所以我们从系统层面来了解文件&#xff08;在进程中打开的文件&#xff09;文…

数据结构之---- 排序算法

数据结构之---- 排序算法 什么是排序算法&#xff1f; 排序算法用于对一组数据按照特定顺序进行排列。 排序算法有着广泛的应用&#xff0c;因为有序数据通常能够被更有效地查找、分析和处理。 如图所示&#xff0c;排序算法中的数据类型可以是整数、浮点数、字符或字符串等…

NXP应用随记(四):eMios阅读随记-整体功能概述

目录 1、eMios IP介绍 2、时钟结构 3、通道类型 4、功能介绍 5、中断与DMA 6、EMIOS -通道分配建议(针对S32K312) 1、eMios IP介绍 Emios是什么&#xff1f;eMIOS提供了独立的通道(UCs)&#xff0c;您可以配置这些通道来为不同的功能生成或测量时间事件。 每个eMIOS实例最…

本地项目添加到gitlab命令操作

gitlab上面创建一个跟项目名同名的文件夹 创建文件夹&#xff0c;填写信息 添加readme文档&#xff0c;先保存下创建的文件夹 回到项目&#xff0c;复制项目的git 地址 然后进入到本地项目的文件夹&#xff0c;如d:/workspace/spring-demo&#xff0c;右键打开git bash弹框 命令…