记录下邮件发送的实现,方便初学者参考,实现方式多种多样,本文采用的是SpringBoot架构
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
package test;
import test.BusinessException;
import test.ErrorCodeEnum;
import test.TerminalEmailDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.List;
/**
* @Description: 发送邮件实现
* @Author: test
* @History: 变更记录
*/
@Service
@Slf4j
public class MailServiceImpl {
@Autowired
private JavaMailSender mailSender;
/**
* 发送短信
* @param emailDTO
* @throws BuorgException
*/
public void sendEmailTest(TestEmailDTO emailDTO) throws BusinessException {
log.info("邮件发送 emailDTO:{}", emailDTO);
if(null==emailDTO|| StringUtils.isBlank(emailDTO.getSubject())){
throw new BusinessException(-1,"发送邮件主题不能为空");
}
if(StringUtils.isBlank(emailDTO.getContent())){
throw new BusinessException(-1,"发送邮件内容不能为空");
}
if(null==emailDTO.getToAddress() || emailDTO.getToAddress().size()<1){
throw new BusinessException(-1,"接收人地址不能为空");
}
sendEmail(emailDTO);
}
/**
* 短信发送,失败重试3次
* @param emailDTO
* @throws BusinessException
*/
public void sendEmail(TestEmailDTO emailDTO)throws BusinessException{
log.info("调用发送邮件工具方法=== emailDTO:{}", emailDTO);
try{
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
mimeMessageHelper.setFrom(emailDTO.getFromAddress());
mimeMessageHelper.setTo(getAddress(emailDTO.getToAddress()));
mimeMessageHelper.setSentDate(new Date());
InternetAddress[] bccArray = getAddress(emailDTO.getBccAddress());
if(bccArray != null) {
mimeMessageHelper.setBcc(bccArray);
}
InternetAddress[] ccArray = getAddress(emailDTO.getCcAddress());
if (ccArray != null) {
mimeMessageHelper.setCc(ccArray);
}
//邮件主题
mimeMessageHelper.setSubject(emailDTO.getSubject());
//邮件正文内容
mimeMessageHelper.setText(emailDTO.getContent());
mailSender.send(mimeMessage);
} catch (MessagingException e) {
log.error("发送邮件失败--邮件信息错误 eMsg:{}", e.getMessage());
} catch (MailException e) {
log.error("发送邮件失败--邮件格式错误或邮箱无效 eMsg:{}", e.getMessage());
}catch (Exception e){
log.error("发送邮件失败 error:{}", e.getMessage());
throw new BusinessException(-1,"发送邮件失败--"+e.getMessage());
}
}
/**
* list 转 数组
* @param strList
* @return
* @throws AddressException
*/
private InternetAddress[] getAddress(List<String> strList) throws AddressException {
InternetAddress[] internetAddress = null;
if(!CollectionUtils.isEmpty(strList)) {
internetAddress = new InternetAddress[strList.size()];
for(int i = 0 ; i < strList.size(); i++ ) {
internetAddress[i] = new InternetAddress(strList.get(i));
}
}
return internetAddress;
}
}