메일 발신자를 고정, 구글 SMTP 서버를 사용하여 메일을 전송할 수 있습니다. 파일 첨부 가능하며 템플릿 형식으로도 전송 가능합니다.
주요 기능
– 메일 발신자 고정
– 파일 첨부 가능(로컬 또는 AWS S3)
– 템플릿 형식 가능(Thymeleaf)
사전 작업
– Google SMTP 서버를 이용하기 위해서는 앱 비밀번호 필수
1. spring-boot-starter-mail 의존성 추가
// build.gradle
implementation 'org.springframework.boot:spring-boot-starter-mail'
2. google smtp 설정
– 메일 발신자 고정 세팅
// application.properties
# Mail Settings
spring.mail.default-encoding=UTF-8
# Google SMTP
#spring.mail.host=smtp.gmail.com
#spring.mail.port=587
#spring.mail.username=cloudtechflow@gmail.com(구글 계정)
#spring.mail.password=ajdkelshfnvbqier(앱비밀번호)
#spring.mail.properties.mail.smtp.auth=true
#spring.mail.properties.mail.debug=true
#spring.mail.properties.mail.smtp.starttls.enable=true
#spring.mail.properties.mail.mime.charset=UTF-8
#spring.mail.properties.mail.transport.protocol=smtp
3. JavaMailSender 사용하여 메일 전송
@Service
@AllArgsConstructor
public class EmailService {
private JavaMailSender emailSender;
public void sendMail() {
MimeMessage message = emailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
//제목, 내용 설정
helper.setSubject("제목");
helper.setText("내용", false);
// 참조자 설정
helper.setCc("cloudtechflow@gmail.com");
// 발신자 설정(연동된 구글 계정으로 고정)
// helper.setFrom("cloudtechflow@gmail.com");
// 로컬 첨부 파일 설정
File file = new File("파일 경로");
FileItem fileItem = new DiskFileItem("mainFile", Files.probeContentType(file.toPath()), false, file.getName(), (int) file.length(), file.getParentFile());
InputStream input = new FileInputStream(file);
OutputStream os = fileItem.getOutputStream();
IOUtils.copy(input, os);
MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
String fileName = StringUtils.cleanPath(multipartFile.getOriginalFilename());
helper.addAttachment(MimeUtility.encodeText(fileName, "UTF-8", "B"), new ByteArrayResource(IOUtils.toByteArray(multipartFile.getInputStream())));
// AWS S3 첨부 파일 설정
// File file = new File("loginbg.jpeg");
// FileUtils.copyURLToFile(new URL("https://s3.ap-northeast-2.amazonaws.com/cloudtechflow.com/image/image/image.jpeg"), file);
// FileItem fileItem = new DiskFileItem("mainFile", Files.probeContentType(file.toPath()), false, file.getName(), (int) file.length(), file.getParentFile());
// InputStream input = new FileInputStream(file);
// OutputStream os = fileItem.getOutputStream();
// IOUtils.copy(input, os);
// MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
// List<MultipartFile> multipartFileList = Arrays.asList(multipartFile);
//메일 전송(setTo 파라미터에 문자열 리스트를 넘기면 한번에 여러명에게 전송 가능)
helper.setTo("cloudtechflow@gmail.com");
emailSender.send(message)
}
}
4. JavaMailSender 사용하여 메일 전송(템플릿 형식)
@Service
@AllArgsConstructor
public class EmailService {
private JavaMailSender emailSender;
public void sendMail() {
MimeMessage message = emailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
//템플릿에 전달할 데이터 설정
HashMap<String, String> emailValues = new HashMap<>();
emailValues.put("title", "제목");
emailValues.put("text", "내용");
Context context = new Context();
emailValues.forEach((key, value)->{
context.setVariable(key, value);
});
//메일 내용 설정 : 템플릿 프로세스
String html = templateEngine.process("mail/mail", context);
helper.setText(html, true);
//템플릿에 들어가는 이미지 cid로 삽입
helper.addInline("image1", new ClassPathResource("static/images/image.jpeg"));
// 참조자 설정
helper.setCc("cloudtechflow@gmail.com");
// 발신자 설정(연동된 구글 계정으로 고정)
// helper.setFrom("cloudtechflow@gmail.com");
// 첨부 파일 설정
File file = new File("파일 경로");
FileItem fileItem = new DiskFileItem("mainFile", Files.probeContentType(file.toPath()), false, file.getName(), (int) file.length(), file.getParentFile());
InputStream input = new FileInputStream(file);
OutputStream os = fileItem.getOutputStream();
IOUtils.copy(input, os);
MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
String fileName = StringUtils.cleanPath(multipartFile.getOriginalFilename());
helper.addAttachment(MimeUtility.encodeText(fileName, "UTF-8", "B"), new ByteArrayResource(IOUtils.toByteArray(multipartFile.getInputStream())));
// AWS S3 첨부 파일 설정
// File file = new File("loginbg.jpeg");
// FileUtils.copyURLToFile(new URL("https://s3.ap-northeast-2.amazonaws.com/cloudtechflow.com/image/image/image.jpeg"), file);
// FileItem fileItem = new DiskFileItem("mainFile", Files.probeContentType(file.toPath()), false, file.getName(), (int) file.length(), file.getParentFile());
// InputStream input = new FileInputStream(file);
// OutputStream os = fileItem.getOutputStream();
// IOUtils.copy(input, os);
// MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
// List<MultipartFile> multipartFileList = Arrays.asList(multipartFile);
//메일 전송(setTo 파라미터에 문자열 리스트를 넘기면 한번에 여러명에게 전송 가능)
helper.setTo("cloudtechflow@gmail.com");
emailSender.send(message)
}
}