新增 邮件发送工具类

This commit is contained in:
萌狼蓝天 2024-10-09 16:03:52 +08:00
parent e2fd170134
commit ab1419f594
8 changed files with 218 additions and 5 deletions

16
pom.xml
View File

@ -127,6 +127,22 @@
<artifactId>jansi</artifactId> <artifactId>jansi</artifactId>
<version>2.4.0</version> <version>2.4.0</version>
</dependency> </dependency>
<!-- 邮件发送-->
<!-- <dependency>-->
<!-- <groupId>com.sun.mail</groupId>-->
<!-- <artifactId>javax.mail</artifactId>-->
<!-- <version> 1.6.2</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>jakarta.mail</artifactId>
<version> 2.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>3.3.4</version>
</dependency>
</dependencies> </dependencies>

View File

@ -0,0 +1,55 @@
package com.guaiguailang.harmony.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import java.util.Properties;
@Data
@Configuration
@PropertySource(value = "classpath:application.properties", encoding = "UTF-8")
public class MailConfig {
@Value("${spring.mail.host}")
private String host;
@Value("${spring.mail.port}")
private int port;
@Value("${spring.mail.username}")
private String username;
@Value("${spring.mail.password}")
private String password;
@Value("${spring.mail.default-encoding}")
private String defaultEncoding;
@Value("${spring.mail.protocol}")
private String protocol;
@Value("${spring.mail.properties.mail.debug}")
private String debug;
@Value("[和生]消息通知")
private String nickname;
@Bean
public JavaMailSender getJavaMailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(host);
mailSender.setPort(port);
mailSender.setUsername(username);
mailSender.setPassword(password);
Properties props = mailSender.getJavaMailProperties();
props.put("mail.transport.protocol", protocol);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "false"); // 关闭STARTTLS
props.put("mail.debug", debug);
return mailSender;
}
}

View File

@ -0,0 +1,5 @@
package com.guaiguailang.harmony.service;
public interface EmailService {
void emailSend(String nickname,String to,String subject,String content);
}

View File

@ -0,0 +1,38 @@
package com.guaiguailang.harmony.service.impl;
import com.guaiguailang.harmony.config.MailConfig;
import com.guaiguailang.harmony.service.EmailService;
import com.guaiguailang.harmony.utils.KeyBase64;
import jakarta.mail.internet.MimeMessage;
import org.apache.ibatis.annotations.Select;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.mail.MailProperties;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
@Service
public class EmailServiceImpl implements EmailService {
@Autowired
MailConfig mailConfig;
@Override
public void emailSend(String nickname,String to,String subject,String content) {
nickname = KeyBase64.strToBase64(nickname);
nickname = "=?UTF-8?B?"+nickname+"?=";
JavaMailSender mailSender = mailConfig.getJavaMailSender();
try {
MimeMessage ms = mailSender.createMimeMessage();
MimeMessageHelper msi = new MimeMessageHelper(ms,true);
msi.setFrom(nickname+' '+'<'+mailConfig.getUsername()+'>');//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);
}
}
}

View File

@ -0,0 +1,15 @@
package com.guaiguailang.harmony.utils;
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;
}
}

View File

@ -0,0 +1,41 @@
package com.guaiguailang.harmony.utils;
import com.guaiguailang.harmony.config.MailConfig;
import jakarta.mail.internet.MimeMessage;
import jakarta.validation.groups.Default;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.MailSender;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class UtilEmailSent {
@Autowired
MailConfig mailConfig;
public void sendEmail(String to, String subject, String content){
sendEmail(to,subject,content, mailConfig.getNickname());
}
public void sendEmail(String to, String subject, String content,String nickname) {
JavaMailSender mailSender = mailConfig.getJavaMailSender();
MimeMessage mimeMessage = mailSender.createMimeMessage();
String from = mailConfig.getUsername();
nickname = KeyBase64.strToBase64(nickname);
System.out.println("2:"+nickname);
nickname = "=?UTF-8?B?"+nickname+"?=";
try {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
mimeMessageHelper.setFrom(nickname+' '+'<'+from+'>');
mimeMessageHelper.setTo(to);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(content, true);
mailSender.send(mimeMessage);
}catch (Exception e){
log.error("(配置邮件失败){}",e.getMessage());
}
}
}

View File

@ -67,3 +67,44 @@ sa-token.token-style=uuid
# 是否输出操作日志 # 是否输出操作日志
sa-token.is-log=true sa-token.is-log=true
#application.properties基本配置后面我都使用此配置来发送邮件
## 基本配置
### smtp服务器主机163的
spring.mail.host=smtp.qiye.163.com
spring.mail.port=25
### 服务协议SMTP代表是发送邮件
spring.mail.protocol=smtp
### 登录服务器邮箱账号
spring.mail.username=news@mllt.cc
### 登录服务器邮箱授权码不是邮箱密码这个是我们开通SMTP、POP时得到的授权码
spring.mail.password=Qq2686485465@
### 默认邮件的编码集MimeMessage 编码默认UTF-8
spring.mail.default-encoding=UTF-8
# 补充配置这里具体可以参照Jakarta Mail的扩展配置
## 默认发送方邮箱账号(当程序未指定发件人邮箱则默认取这个)
spring.mail.properties.mail.smtp.from=news@mllt.cc
## 开启权限认证
spring.mail.properties.mail.smtp.auth=true
## 邮件接收时间的限制
spring.mail.properties.mail.smtp.timeout=60000
## 连接时间的限制
spring.mail.properties.mail.smtp.connectiontimeout=60000
## 邮件发送时间的限制(毫秒)
spring.mail.properties.mail.smtp.writetimeout=60000
## 日志打印,邮件发送过程的日志会被输出
spring.mail.properties.mail.debug=true
# 下面这条配置请去 src/main/java/com/guaiguailang/harmony/config/MailConfig.java 修改。在这里修改是无效的。因为这里写中文会导致乱码。
email.form.nickname=[和生]消息通知
# 中文乱码问题
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

View File

@ -1,16 +1,18 @@
package com.guaiguailang.harmony; package com.guaiguailang.harmony;
import com.guaiguailang.harmony.config.MailConfig;
import com.guaiguailang.harmony.service.EmailService;
import com.guaiguailang.harmony.utils.UtilEmailSent;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import javax.xml.transform.Result;
import java.util.Scanner;
@SpringBootTest @SpringBootTest
class HarmonyLifeServerApplicationTests { class HarmonyLifeServerApplicationTests {
@Autowired
UtilEmailSent utilEmailSent;
@Test @Test
void contextLoads() { void contextLoads() {
utilEmailSent.sendEmail("2952458479@qq.com","测试邮件标题","测试邮件内容");
} }
} }