Gmail SMTP ์„ ์ž‘์„ฑํ•˜๋ฉด์„œ ๊ตฌ๊ธ€ ๊ณ„์ •์œผ๋กœ ์ด๋ฉ”์ผ์„ ๋ฐœ์†กํ•˜๋Š” ๊ฒƒ์„ ๋‹ค๋ฃฌ ๊ฒƒ๋„ 1๋…„์ด ๋„˜๊ฒŒ ์ง€๋‚ฌ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ์ ํŠธ์—์„œ spring-boot-starter-mail ๋ชจ๋“ˆ์„ ํ†ตํ•ด JavaMailSender๋กœ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ตฌํ˜„์„ ์‰ฝ๊ฒŒ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์šฐ์—ฐํžˆ ์•Œ๊ฒŒ๋œ Simple Java Mail ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” JavaMailSender ์™€ MimeMessageHelper์™€ ๊ฐ™์€ ํด๋ž˜์Šค์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฉ”์ผ ๋ฐœ์†ก์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก API๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค.

Features

์ด๋ฉ”์ผ ๋ฐœ์†ก์— ๋Œ€ํ•œ ์„ค์ •์„ ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐ€๋ฉด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์œผ๋‚˜ ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ ํ•ฉํ•œ ํŠน์ง•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

SSL and TLS with Google mail

๊ธฐ์กด์— ํ”„๋ฆฌ๋งˆ์ปค ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ด๋ฉ”์ผ ๋ฐœ์†กํ•˜๊ธฐ ์—์„œ ์ฒ˜๋Ÿผ Gmail SMTP ์„œ๋ฒ„๋ฅผ ์ด์šฉํ•  ๋•Œ STARTTLS ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ์—ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผํ•˜๋Š”์ง€๋ฅผ SSL and TLS with Google mail์—์„œ ์„ค๋ช…ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค. STARTTLS ๋ฐฉ์‹์€ SMTP_TLS๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

@Import(SimpleJavaMailSpringSupport.class)
@SpringBootApplication
public class SimpleMailApplication {
    public static void main(String[] args) {
        SpringApplication.run(SimpleMailApplication.class, args);
    }
}
application.yml
simplejavamail.javaxmail.debug: true simplejavamail.smtp.host: smtp.gmail.com simplejavamail.smtp.port: 587 simplejavamail.transportstrategy: SMTP_TLS simplejavamail.smtp.username: kdevkr@gmail.com simplejavamail.smtp.password: '์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ'
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
class GmailSmtpTests {
    @Autowired
    Mailer mailer;

    @Test
    void sendMail() {
        Assertions.assertDoesNotThrow(() -> mailer.testConnection());

        Email email = EmailBuilder.startingBlank()
                .from("Mambo <kdevkr@gmail.com>")
                .to("kdevkr@gmail.com")
                .withSubject("Java Mail Test with simplejavamail")
                .withPlainText("Hello world")
                .buildEmail();

        Assertions.assertDoesNotThrow(() -> mailer.sendMail(email));
    }
}

์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฐœ๊ธ‰์€ Gmail SMTP ๊ธ€์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

Convert Email to MimeMessage

EmailConverter, MailerHelper, JMail ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ EmailConverter๋ฅผ ์ด์šฉํ•˜๋ฉด Email ์„ MimeMessage๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์ œ๊ณตํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— JavaMailSender์™€์˜ ํ†ตํ•ฉ๋„ ์œ ์šฉํ•ด๋ณด์ธ๋‹ค.

Email email = EmailBuilder.startingBlank().buildEmail();
MimeMessage mimeMessage = EmailConverter.emailToMimeMessage(email);

๋” ์ž์„ธํžˆ spring-boot-starter-mail ๊ณผ ๋น„๊ตํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด Feature Comparison Matrix ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด์„ธ์š”.