SpringBoot 메 일 발송 기능 구현

7845 단어 springboot우편물
배경
어떤 친구 가 나 에 게 네가 이전에 메 일 기능 을 어떻게 했 느 냐 고 물 었 다.그리고 나 서 나 는 그 에 게 데 모 를 찾 아 주 었 는데,마침 여기에 도 써 서 모두 에 게 나 누 어 주 었 다.
통 증 을 정리 하 다
메 일 을 보 내 면 구덩이 가 어디 에 있 는 지 생각해 보 세 요.
세 개 라 고 생각 합 니 다.
첫째:메 일 화이트 리스트 문제.
둘째:메 일 시간 초과 문제.
셋째:메 일 첨부 파일 문제.
내 다음 데 모 는 모두 이 문제 들 을 소개 하고 해결 할 것 이다.
실현 방안
준비 작업
우 리 는 먼저 보 낼 수 있 는 메 일 을 준비 해 야 한다.나 는 나의 163 메 일 을 예 로 들 어 지금 메 일 을 보 내 는 규칙 은 권한 수여 코드 라 는 것 을 입력 하 라 고 요구한다.이 물건 은 비밀번호 가 아니 라 는 것 을 주의해 야 한다.
인증 코드 를 가 져 오 는 절차:



오픈 을 선택 하면 인증 을 통 해 인증 코드 를 얻 을 수 있 습 니 다.인증 코드 리 셋 을 선택 하 셔 도 가 져 올 수 있 습 니 다.17 년 전에 demo 를 썼 는데 19 년 에 또 하 나 를 열 었 습 니 다.예전 에 잊 어 버 렸 기 때 문 입 니 다.
SpringBoot 프로젝트 패키지 도입

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
yml 설정 메 일 관련

spring:
 mail:
 #       
 host: smtp.163.com
 #   ,     
 port: 25
 #     
 default-encoding: utf-8
 #    
 username: [email protected]
 #    ,               
 password: xxx
 #     
 properties:
  mail:
  smtp:
   #      SSL   ,        ,  qq        
   ssl:
   enable: true
   required: true
   #          ,    
   timeout: 10000
   #        ,    
   connectiontimeout: 10000
   #          ,    
   writetimeout: 10000
위 에서 제시 한 시간 초과 문제 에 대해 시간 초과 이상 을 포착 하면 해결 할 수 있다.
메 일 발송 도구 클래스
주로 다음 도구 류 를 통 해 자바 메 일 을 보 내 는 수 요 를 만족 시 킬 수 있 습 니 다.yml 설정 을 잘 하면 SpringBoot 는 자바 MailSender 를 자동 으로 설정 하 는 데 도움 을 줄 것 입 니 다.우 리 는 이 자바 류 를 통 해 자바 작업 을 통 해 메 일 을 보 낼 수 있 습 니 다.다음은 몇 가지 자주 사용 하 는 우편물 을 열거 하 였 다.

@Service
public class MailService {
 private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);

 @Autowired
 private JavaMailSender mailSender;

 private static final String SENDER = "[email protected]";

 /**
  *       
  *
  * @param to     
  * @param subject   
  * @param content   
  */
 @Override
 public void sendSimpleMailMessge(String to, String subject, String content) {
  SimpleMailMessage message = new SimpleMailMessage();
  message.setFrom(SENDER);
  message.setTo(to);
  message.setSubject(subject);
  message.setText(content);
  try {
   mailSender.send(message);
  } catch (Exception e) {
   logger.error("           !", e);
  }
 }

 /**
  *    HTML   
  *
  * @param to     
  * @param subject   
  * @param content   
  */
 @Override
 public void sendMimeMessge(String to, String subject, String content) {
  MimeMessage message = mailSender.createMimeMessage();
  try {
   //true        multipart message
   MimeMessageHelper helper = new MimeMessageHelper(message, true);
   helper.setFrom(SENDER);
   helper.setTo(to);
   helper.setSubject(subject);
   helper.setText(content, true);
   mailSender.send(message);
  } catch (MessagingException e) {
   logger.error("  MimeMessge     !", e);
  }
 }

 /**
  *         
  *
  * @param to     
  * @param subject   
  * @param content   
  * @param filePath     
  */
 @Override
 public void sendMimeMessge(String to, String subject, String content, String filePath) {
  MimeMessage message = mailSender.createMimeMessage();
  try {
   //true        multipart message
   MimeMessageHelper helper = new MimeMessageHelper(message, true);
   helper.setFrom(SENDER);
   helper.setTo(to);
   helper.setSubject(subject);
   helper.setText(content, true);

   FileSystemResource file = new FileSystemResource(new File(filePath));
   String fileName = file.getFilename();
   helper.addAttachment(fileName, file);

   mailSender.send(message);
  } catch (MessagingException e) {
   logger.error("      MimeMessge     !", e);
  }
 }

 /**
  *           
  *
  * @param to     
  * @param subject   
  * @param content   
  * @param rscIdMap          
  */
 @Override
 public void sendMimeMessge(String to, String subject, String content, Map<String, String> rscIdMap) {
  MimeMessage message = mailSender.createMimeMessage();
  try {
   //true        multipart message
   MimeMessageHelper helper = new MimeMessageHelper(message, true);
   helper.setFrom(SENDER);
   helper.setTo(to);
   helper.setSubject(subject);
   helper.setText(content, true);

   for (Map.Entry<String, String> entry : rscIdMap.entrySet()) {
    FileSystemResource file = new FileSystemResource(new File(entry.getValue()));
    helper.addInline(entry.getKey(), file);
   }
   mailSender.send(message);
  } catch (MessagingException e) {
   logger.error("        MimeMessge     !", e);
  }
 }
}
메 일 보 낸 demo

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbooEmailDemoApplicationTests {

 @Autowired
 private MailService mailService;

 private static final String TO = "[email protected]";
 private static final String SUBJECT = "    ";
 private static final String CONTENT = "test content";

 /**
  *         
  */
 @Test
 public void sendSimpleMailMessage() {
  mailService.sendSimpleMailMessge(TO, SUBJECT, CONTENT);
 }

 /**
  *     html  
  */
 @Test
 public void sendHtmlMessage() {
  String htmlStr = "<h1>Test</h1>";
  mailService.sendMimeMessge(TO, SUBJECT, htmlStr);
 }

 /**
  *           
  * @throws FileNotFoundException
  */
 @Test
 public void sendAttachmentMessage() throws FileNotFoundException {
  File file = ResourceUtils.getFile("classpath:test.txt");
  String filePath = file.getAbsolutePath();
  mailService.sendMimeMessge(TO, SUBJECT, CONTENT, filePath);
 }

 /**
  *           
  * @throws FileNotFoundException
  */
 @Test
 public void sendPicMessage() throws FileNotFoundException {
  String htmlStr = "<html><body>  :  1 <br> <img src=\'cid:pic1\'/> <br>  2 <br> <img src=\'cid:pic2\'/></body></html>";
  Map<String, String> rscIdMap = new HashMap<>(2);
  rscIdMap.put("pic1", ResourceUtils.getFile("classpath:pic01.jpg").getAbsolutePath());
  rscIdMap.put("pic2", ResourceUtils.getFile("classpath:pic02.jpg").getAbsolutePath());
  mailService.sendMimeMessge(TO, SUBJECT, htmlStr, rscIdMap);
 }
}
화이트 리스트 문제
고정 메 일 로 보 내 는 경우 에는 고정 메 일 로 화이트 리스트 를 직접 설정 할 수 있 으 며,여러 메 일 로 자주 보 내 는 경우 에는 다음 과 같은 발송 시간 간격 을 두 고 한 메 일 로 계속 보 내지 않 는 것 이 좋다.
총결산
위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 SpringBoot 메 일 발송 기능 이 실현 되 었 습 니 다.여러분 께 도움 이 되 셨 으 면 합 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

좋은 웹페이지 즐겨찾기