提交 74a5a03a 编写于 作者: Q qinyingjie

fix:发邮件

上级 c3a6f85c
......@@ -109,6 +109,10 @@
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
......
package com.kwan.springbootkwan.entity;
import lombok.Data;
import java.util.Map;
/**
* 邮件实体
*
* @author : qinyingjie
* @version : 2.2.0
* @date : 2022/12/19 22:41
*/
@Data
public class MailInfo {
// 邮件接收人
private String[] receiver;
// 邮件主题
private String subject;
// 邮件的文本内容
private String content;
// 抄送人
private String[] cc;
// 邮件附件的文件名
private String[] attachFileNames;
// 邮件内容内嵌图片
private Map<String, String> imageMap;
}
package com.kwan.springbootkwan.service;
import com.kwan.springbootkwan.entity.MailInfo;
public interface ISendMsgHandle {
/**
* 功能描述:发送text邮件
*
* @param mailInfo 邮件信息
*/
void sendSimpleTextEmail(MailInfo mailInfo);
/**
* 功能描述:发送html邮件
*
* @param mailInfo 邮件信息
* @param html 是否是html邮件
*/
void sendHtmlEmail(MailInfo mailInfo, boolean html);
/**
* 功能描述:发送文本内容(内嵌图片)且带附件的html邮件
*
* @param mailInfo 邮件信息
*/
void sendEnclosureEmail(MailInfo mailInfo);
}
package com.kwan.springbootkwan.service.impl;
import com.kwan.springbootkwan.entity.MailInfo;
import com.kwan.springbootkwan.service.ISendMsgHandle;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.annotation.Resource;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Map;
import java.util.Set;
@Slf4j
@Component
public class EmailSendMsgHandleImpl implements ISendMsgHandle {
@Resource
private JavaMailSender javaMailSender;
@Value(value = "${spring.mail.username}")
private String emailFrom;
@Override
public void sendSimpleTextEmail(MailInfo mailInfo) {
try {
SimpleMailMessage mailMessage = new SimpleMailMessage();
//发件人
mailMessage.setFrom(emailFrom);
//接收人
mailMessage.setTo(mailInfo.getReceiver());
//邮件主题
mailMessage.setSubject(mailInfo.getSubject());
//邮件抄送
mailMessage.setCc(mailInfo.getCc());
//邮件内容
mailMessage.setText(mailInfo.getContent());
//发送邮件
javaMailSender.send(mailMessage);
} catch (Exception e) {
log.error("邮件发送失败:{}", e.getMessage());
}
}
@Override
public void sendHtmlEmail(MailInfo mailInfo, boolean html) {
try {
MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
//true 表示需要创建一个multipart message
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage);
//发件人
mimeMessageHelper.setFrom(emailFrom);
//接收人
mimeMessageHelper.setTo(mailInfo.getReceiver());
//邮件主题
mimeMessageHelper.setSubject(mailInfo.getSubject());
//邮件抄送
mimeMessageHelper.setCc(mailInfo.getCc());
//邮件内容
mimeMessageHelper.setText(mailInfo.getContent(), html);
javaMailSender.send(mimeMailMessage);
} catch (Exception e) {
log.error("邮件发送失败:{}", e.getMessage());
}
}
@Override
public void sendEnclosureEmail(MailInfo mailInfo) {
try {
MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
//true 表示需要创建一个multipart message
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
//发件人
mimeMessageHelper.setFrom(emailFrom);
//邮件接收人
mimeMessageHelper.setTo(mailInfo.getReceiver());
//邮件主题
mimeMessageHelper.setSubject(mailInfo.getSubject());
//邮件抄送
mimeMessageHelper.setCc(mailInfo.getCc());
//设置显示的发件时间
mimeMessageHelper.setSentDate(new Date());
MimeMultipart allMultipart = new MimeMultipart();
//创建代表邮件正文和附件的各个MimeBodyPart对象
MimeBodyPart contentPart = createContent(mailInfo.getContent(), mailInfo.getImageMap());
allMultipart.addBodyPart(contentPart);
//创建用于组合邮件正文和附件的MimeMultipart对象
for (int i = 0; i < mailInfo.getAttachFileNames().length; i++) {
allMultipart.addBodyPart(createAttachment(mailInfo.getAttachFileNames()[i]));
}
//设置整个邮件内容为最终组合出的MimeMultipart对象
mimeMailMessage.setContent(allMultipart);
mimeMailMessage.saveChanges();
javaMailSender.send(mimeMailMessage);
} catch (Exception e) {
log.error("邮件发送失败:{}", e.getMessage());
}
}
/**
* 功能描述:邮件附件
*
* @param filename 文件路径
* @return {@link MimeBodyPart}
* @author wi-gang
* @date 2021/12/29 2:50 下午
*/
public MimeBodyPart createAttachment(String filename) throws Exception {
//创建保存附件的MimeBodyPart对象,并加入附件内容和相应的信息
MimeBodyPart attachPart = new MimeBodyPart();
FileDataSource fsd = new FileDataSource(filename);
attachPart.setDataHandler(new DataHandler(fsd));
attachPart.setFileName(fsd.getName());
return attachPart;
}
/**
* 功能描述:文本内容
*
* @param body html格式的文本内容
* @return {@link MimeBodyPart}
* @author wi-gang
* @date 2021/12/29 2:50 下午
*/
public MimeBodyPart createContent(String body) throws Exception {
//创建代表组合Mime消息的MimeMultipart对象,将该MimeMultipart对象保存到MimeBodyPart对象
MimeBodyPart contentPart = new MimeBodyPart();
MimeMultipart contentMultipart = new MimeMultipart("related");
//创建用于保存HTML正文的MimeBodyPart对象,并将它保存到MimeMultipart中
MimeBodyPart htmlBodyPart = new MimeBodyPart();
htmlBodyPart.setContent(body, "text/html;charset=UTF-8");
contentMultipart.addBodyPart(htmlBodyPart);
//将MimeMultipart对象保存到MimeBodyPart对象
contentPart.setContent(contentMultipart);
return contentPart;
}
/**
* 功能描述:文本内嵌图片
*
* @param body html格式的文本内容
* @param map 图片集合
* @return {@link MimeBodyPart}
* @author wi-gang
* @date 2021/12/29 2:50 下午
*/
public MimeBodyPart createContent(String body, Map<String, String> map) throws Exception {
//创建代表组合Mime消息的MimeMultipart对象,将该MimeMultipart对象保存到MimeBodyPart对象
MimeBodyPart contentPart = new MimeBodyPart();
MimeMultipart contentMultipart = new MimeMultipart("related");
//创建用于保存HTML正文的MimeBodyPart对象,并将它保存到MimeMultipart中
MimeBodyPart htmlBodyPart = new MimeBodyPart();
htmlBodyPart.setContent(body, "text/html;charset=UTF-8");
contentMultipart.addBodyPart(htmlBodyPart);
if (map != null && map.size() > 0) {
Set<Map.Entry<String, String>> set = map.entrySet();
for (Map.Entry<String, String> entry : set) {
//创建用于保存图片的MimeBodyPart对象,并将它保存到MimeMultipart中
MimeBodyPart gifBodyPart = new MimeBodyPart();
FileDataSource fds = new FileDataSource(entry.getValue());//图片所在的目录的绝对路径
gifBodyPart.setDataHandler(new DataHandler(fds));
gifBodyPart.setContentID(entry.getKey()); //cid的值
contentMultipart.addBodyPart(gifBodyPart);
}
}
//将MimeMultipart对象保存到MimeBodyPart对象
contentPart.setContent(contentMultipart);
return contentPart;
}
}
\ No newline at end of file
......@@ -6,6 +6,19 @@ swagger:
#兼容swagger配置
spring:
mail:
host: smtp.qq.com
# 发送者的邮箱账号
username: 327782001@qq.com
# 邮箱密码授权码
password: kypxnmwfniqrcbeh
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
redis:
database: 0 # Redis数据库索引(默认为0)
host: 120.79.36.53 #Redis服务器地址
......
package com.kwan.springbootkwan;
import com.kwan.springbootkwan.entity.MailInfo;
import com.kwan.springbootkwan.entity.User;
import com.kwan.springbootkwan.mapper.UserMapper;
import com.kwan.springbootkwan.service.ISendMsgHandle;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class UserServiceImplTest {
@Autowired
private UserMapper userService;
@Autowired
private ISendMsgHandle isSendMsgHandle;
@Test
public void queryAll() {
User user = userService.selectById(1);
System.out.println(user);
}
/**
* 发邮件
*/
@Test
void sendSimpleTextEmail() {
MailInfo mailInfo = new MailInfo();
mailInfo.setReceiver(new String[]{"qinyingjie@deepexi.com"});
mailInfo.setSubject("测试主题");
mailInfo.setContent("邮件内容");
isSendMsgHandle.sendSimpleTextEmail(mailInfo);
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册