의존성 추가 + Gmail 과의 연동은 위의 블로그에서 참조했다.
@RequiredArgsConstructor
@Service
public class MailService {
private final JavaMailSender mailSender;
public void sendEmailWithAttachment(String receiverEmail
, String subject, String body, String filePath)
throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo(receiverEmail);
helper.setSubject(subject);
helper.setText(body);
File attachment = new File(filePath);
// 패스에 이미 저장해놓은 텍스트 파일임 ( 먼저 실행된 Job에서 생성됨 )
helper.addAttachment(attachment.getName(), attachment);
mailSender.send(message);
}
}
위에 작성한 코드는 이메일을 보내는 "기능" 이므로, Job 으로 설정해서 자동화 하면 더 좋을 것 같다. 의존 주입해서, 자동 발송해보자
@RequiredArgsConstructor
@Component
public class JobCaller {
private final JobLauncher jobLauncher;
private final Job simpleJob1; // bean으로 등록되어 있기 때문에 의존 주입 받을 수 있다.
private final MailService mailService;
@Value("${output.file.path}")
private String outputFilePath;
@Scheduled(cron = "0 * * * * *")
public void runApiCallJob() throws JobParametersInvalidException,
JobExecutionAlreadyRunningException,
JobRestartException, JobInstanceAlreadyCompleteException, MessagingException {
JobParameters jobParameters = new JobParametersBuilder()
.addDate("date", new Date())
.toJobParameters();
jobLauncher.run(simpleJob1, jobParameters);
String receiverEmail = "receiver@naver.com"; // 받는 사람 이메일 주소
String subject = "테스트 : 제목"; // 제목
String body = "테스트를 위해서 발송됩니다"; // 내용
// 파일 만들 때 시간 저장하던 놈들. 시간을 찍어주기 위해서 사용한다
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy_MM_dd");
String formattedDate = currentDate.format(formatter);
String filePath = outputFilePath + "/movie_" + formattedDate + ".txt"; // 파일 경로
mailService.sendEmailWithAttachment(receiverEmail, subject, body, filePath);
}
}
저번 시간 만든 파일의 형식은 movie_yyyy_MM_dd.txt 와 같은 형식이므로, 해당 디렉토리 + 정확한 파일 이름을 만들어준다.
의존 주입 받은 서비스에서 우리가 만들어준 sendEmailWithAttachment 매서드를 사용, 메일을 보내준다.
위와 같이 보낸 편지로 잘 가는 모습
더불어 네이버 메일로 발신했는데, 수신자는 어떻게 보일까?
이런 식으로, 우리가 작성한 파일 이름과 함께 잘 도착하고 있는 모습.
Docker 에 올리게 되면 루트 디렉토리에 대한 설정을 다시 해야 할거고, 따라서 파일 저장 / 저장한 파일 이메일 전송 등에서 문제가 있을 것이 분명하다.
그렇다면 컨테이너 환경에서의 설정은 어떻게 할까? - 그것은 잠시 후에 포스팅 하도록 하겠습니다...