yml文件
Controller内容
package com.bam.controller;
import com.hbyh.bam.dto.RespBean;
import com.hbyh.bam.model.Mail;
import com.hbyh.bam.service.MailService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
@Api(tags = "邮件发送")
@RestController
@RequestMapping("/email")
public class EmailController {
@Autowired
private MailService mailService;
public static String TEMPATH = "/war/template";
@PostMapping("/toEmail/{email}")
@ResponseBody
@ApiOperation(value = "发送邮件")
public RespBean toEmail(@RequestParam("file") MultipartFile multipartFile,String body,@PathVariable String email){
Mail mail=new Mail();
mail.setSubject("标题名"); //标题名
mail.setPersonal("发送人名称"); //发送人名称
mail.setContent(body);
int num=mailService.saveFile(mail,email,multipartFile);
if(num<=0){
return RespBean.goBack(1,"发送失败,请重试");
}else{
return RespBean.goBack(0,"已发送");
}
}
}
MailService类
package com.bam.service;
import java.util.List;
import com.hbyh.bam.model.Mail;
import org.springframework.web.multipart.MultipartFile;
public interface MailService {
int saveFile(Mail mail, String toUser, MultipartFile multipartFile);
}
MailServiceImpl实现类
package com.bam.service.impl;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import com.hbyh.bam.controller.EmailController;
import com.hbyh.bam.service.SendMailSevice;
import com.hbyh.bam.utils.IdWorker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.hbyh.bam.dao.MailDao;
import com.hbyh.bam.model.Mail;
import com.hbyh.bam.service.MailService;
import com.hbyh.bam.utils.UserUtil;
import org.springframework.web.multipart.MultipartFile;
@Service
public class MailServiceImpl implements MailService {
@Autowired
private SendMailSevice sendMailSevice;
@Autowired
private MailDao mailDao;
@Autowired
private IdWorker idWorker;
@Transactional
public int saveFile(Mail mail, String toUser,MultipartFile multipartFile) {
int status = 0;
try {
//获取文件
File file = MultiToFile(multipartFile);
sendMailSevice.sendMailFile(toUser, mail.getSubject(), mail.getContent(),mail.getPersonal(),file);
status=1;
} catch (Exception e) {
log.error("发送邮件失败", e);
status = -1;
}
return status;
}
/**
* 将multipartFile文件转为File文件
*/
public File MultiToFile(MultipartFile multipartFile) {
if(multipartFile==null){
return null;
}
//获取file名字
String filename = multipartFile.getOriginalFilename();
//获取文件后缀
String suffix = filename.substring(filename.lastIndexOf("."));
//创建一个不重名的文件
String employeesId = idWorker.nextId() + "";
File file = new File(EmailController.TEMPATH+"/"+employeesId+suffix);
try {
//输入流
InputStream ins=multipartFile.getInputStream();
//输出流
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);//开始写
}
os.close();
ins.close();
} catch (Exception e){
file=null;
e.printStackTrace();
}
return file;
}
}
Mail实体类
package com.bam.model;
public class Mail {
private String toUsers;
private String subject;
private String content;
private String personal;
}
SendMailSevice类
package com.bam.service;
import javax.mail.MessagingException;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.List;
public interface SendMailSevice {
/**
*
* @param toUser 发送人
* @param subject 标题
* @param text 内容
* @param personal 发送人名称
* @param file 文件
* @throws Exception
*/
void sendMailFile(String toUser, String subject, String text,String personal, File file) throws Exception;
}
SendMailSeviceImpl 实现类
package com.bam.service.impl;
import com.hbyh.bam.service.SendMailSevice;
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.Service;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.io.UnsupportedEncodingException;
@Service
public class SendMailSeviceImpl implements SendMailSevice {
@Autowired
private JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String serverMail;
public void sendMailFile(String toUser, String subject, String text,String personal, File file) throws MessagingException, UnsupportedEncodingException {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(serverMail,personal);
helper.setTo(toUser);
helper.setSubject(subject);
helper.setText(text!=null?text:"", true);
if(file!=null){
//获取文件名称
String filepathname=file.getName();
//添加附件
helper.addAttachment(filepathname, file);//附件
}
javaMailSender.send(message);
}
}
MailSocketFactory配置类
package com.bam.config.email;
import javax.net.SocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import com.bam.config.email.MailTrustManager;
/**
* email配置
*/
public class MailSocketFactory extends SSLSocketFactory {
private SSLSocketFactory factory;
public MailSocketFactory() {
try {
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(null, new TrustManager[] { new MailTrustManager() }, null);
factory = sslcontext.getSocketFactory();
} catch (Exception ex) {
// ignore
}
}
public static SocketFactory getDefault() {
return new MailSocketFactory();
}
@Override
public Socket createSocket() throws IOException {
return factory.createSocket();
}
@Override
public Socket createSocket(Socket socket, String s, int i, boolean flag) throws IOException {
return factory.createSocket(socket, s, i, flag);
}
@Override
public Socket createSocket(InetAddress inaddr, int i, InetAddress inaddr1, int j) throws IOException {
return factory.createSocket(inaddr, i, inaddr1, j);
}
@Override
public Socket createSocket(InetAddress inaddr, int i) throws IOException {
return factory.createSocket(inaddr, i);
}
@Override
public Socket createSocket(String s, int i, InetAddress inaddr, int j) throws IOException {
return factory.createSocket(s, i, inaddr, j);
}
@Override
public Socket createSocket(String s, int i) throws IOException {
return factory.createSocket(s, i);
}
@Override
public String[] getDefaultCipherSuites() {
return factory.getDefaultCipherSuites();
}
@Override
public String[] getSupportedCipherSuites() {
return factory.getSupportedCipherSuites();
}
}
MailTrustManager配置类
package com.bam.config.email;
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
/**
* email配置
*/
public class MailTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
#####最后可以使用,此操作避免阿里云的25端口未开启,创建的ssl协议格式发送邮件,可批量发送附件