首页 > 编程语言 >【Java】SpringBoot邮件发送实现

【Java】SpringBoot邮件发送实现

时间:2023-09-27 17:45:23浏览次数:59  
标签:Java SpringBoot spring springframework import mail nickname 邮件 String

Springboot3 邮件发送

哔哩哔哩 萌狼蓝天

微信公众号 萌狼蓝天

依赖

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

配置

这里我用的是网易免费企业邮箱。参数请不要照抄,改成适合自己的。

# 邮件配置
# 配置邮件服务器的地址
spring.mail.host=smtp.ym.163.com
# 配置邮件服务器的端口(465或587)
spring.mail.port=465
# 配置用户的账号
spring.mail.username=账号
spring.mail.nickname=显示的名称
# 配置用户的密码(即上面我们申请到的授权码)
spring.mail.password=密码
# 配置默认编码
spring.mail.default-encoding=UTF-8
# SSL 连接配置
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
# 开启 debug,这样方便开发者查看邮件发送日志
spring.mail.properties.mail.debug=true

接口

package com.xrilang.whynotflyserve.emailsent;

import org.springframework.stereotype.Service;

@Service
public interface EmailService {
    void emailSend(String to,String subject,String content);
}

接口具体实现类

package com.xrilang.whynotflyserve.emailsent;
import com.xrilang.whynotflyserve.base.KeyBase64;
import jakarta.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

/**
 * 邮件发送的相关设置
 */
@Component
public class EmailServeSetting implements EmailService{
    @Autowired
    private JavaMailSender mailSender;
    @Value("${spring.mail.username}")
    private String from;
    @Value("${spring.mail.nickname}")
    private String nickname;
    @Override
    public void emailSend(String to,String subject,String content) {
        System.out.println("1:"+nickname);
        nickname = KeyBase64.strToBase64(nickname);
        System.out.println("2:"+nickname);
        nickname = "=?UTF-8?B?"+nickname+"?=";
        System.out.println("3:"+nickname);

        try {
            MimeMessage ms = mailSender.createMimeMessage();
            MimeMessageHelper msi = new MimeMessageHelper(ms,true);
            msi.setFrom(nickname+' '+'<'+from+'>');//From 合法性检查  https://service.mail.qq.com/detail/0/995
            msi.setTo(to);
            msi.setSubject(subject);
            msi.setText(content,true);//true开启HTML解析
            mailSender.send(ms);
        }catch (Exception e){
            System.out.println(e);
        }
    }
}

From的合法性问题

https://service.mail.qq.com/detail/0/995

Base64编码

package com.xrilang.whynotflyserve.base;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Base64;
public class KeyBase64 {
    public static String strToBase64(String str){
        try{
            return Base64.getEncoder().encodeToString(str.getBytes());
        }catch (Exception e){
            System.out.println(e);
        }
        return str;
    }
}

@value读取properties配置文件中文乱码的问题

banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
spring.messages.encoding=UTF-8

标签:Java,SpringBoot,spring,springframework,import,mail,nickname,邮件,String
From: https://www.cnblogs.com/mllt/p/springbootemailsent.html

相关文章

  • [译]JavaScript规范
    译自:https://github.com/airbnb/javascript类型原始值:相当于传值1.string2.number3.boolean4.null5.undefined6.varfoo=1,7.bar=foo;8.9.bar=9;10.11.console.log(foo,bar);//=>1,9复杂类型:相当于传引用1.obje......
  • JDK安装、java环境配置
      JDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境,JAVA工具和JAVA基础的类库。JRE(JavaRuntimeEnvironment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库.它包......
  • JAVA 单例设计模式
    单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例......
  • JAVA高级教程
    高级教程数据结构枚举一种从数据结构中取回连续元素的方式位集合可以单独设置和清楚的位或标志向量Vector是一个基于动态数组的集合类栈实现了一个后进先出的数据结构字典定义了键映射到值的数据结构哈希表在用户定义键结构的基础上来组织数据的手......
  • JavaScript——“==”和“===”区别(双等于号和三等于号区别)
    1.==:双等于号称为等值符。当等号两边为类型相同的值时,则直接比较值是否相同;当类型不同时,会先进行类型转换,转换为相同的类型后再进行比较。类型转化规则:1)当等号两边为boolean,string,number三者中任意两者进行对比时,会优先转换为number进行比较2)当等号两......
  • java程序,如何打印详细报错堆栈信息
    try{System.out.println(1/0);}catch(finalExceptione){log.error("ERROR","Errorfound:",e);log.error("ERROR","Errorfound:"+e.getMessage());log.error("ERROR","Errorfo......
  • 【node】发送邮件及附件简要使用说明
    Nodemailer是一个用于Node.js应用程序的模块,可以轻松发送电子邮件。该项目始于2010年,当时没有合理的选项来发送电子邮件消息,如今它是大多数Node.js用户默认选择的解决方案。一、环境配置安装模块:nodemailernpminodemailer--save二、邮箱服务配置如下:lettransporter=no......
  • Springboot+Echarts(五)
    Mybatis-plus操作的多表查询和分页查询今天首先回顾了之前所学的基本的单表增删改查这里想再自己写一遍是为了方便自己以后的开发流程顺利首先创建Springboot项目,选择java8和Springboot2.x.x之后选择Web依赖然后添加依赖<dependency><groupId>com.baomidou<......
  • Java-统计程序运行的时长(计算两个时间相差的秒数)
    最近在做Hbase的查询性能验证,需要统计查询的执行时长,所以需要统计开始时间和结束时间的时间差。下面是使用SimpleDateFormat和Date计算时间差(相差秒数)的程序示例,仅供参考。packagecom.sgcc;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjav......
  • Java函数AI生成器:秒级体验,高质量生成
    职业使然,之前我自己试用并给小伙伴们推荐过不少大模型相关的产品,这些产品看起来牛逼plus,但是它们要么对国内有限制,要么是申请制/邀请制,自己没个资想搞个账号去体验一下都难如登天,忍不住吐槽某大厂虽然早早的对外宣布面向全民开发,但实际上提交了手机号码还在等待排队上车,掐指一算,有......