[Spring]¸ÞÀϼ¹ö(SMTP Server)¸¦ ÀÌ¿ëÇÑ ¸ÞÀÏ Àü¼Û 2
°³ÀÎ °øºÎ ÈÄ ÀڷḦ ³²±â±â À§ÇÑ ¸ñÀûÀ̱⿡ ³»¿ë »ó¿¡ ¿À·ù°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù.
¸ñÇ¥
1. ½ºÇÁ¸µ¿¡¼ SMTP ¼¹ö¸¦ ÀÌ¿ëÇÑ ¸ÞÀÏ Àü¼ÛÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù.
2. 1ÀÇ ¸ñÇ¥ ±â´ÉÀ» ±¸ÇöÇϱâ À§ÇØ ±¸±Û, ³×À̹ö, ´ÙÀ½¿¡ ¾î¶°ÇÑ ¼³Á¤À» ÇؾßÇÏ´ÂÁö ¾Ë¾Æº¾´Ï´Ù.
3. ´Ü¼øÇÑ ÅؽºÆ®¸¸ Àü¼Û, À̹ÌÁö¸¦ Æ÷ÇÔÇÑ ¸ÞÀÏÀü¼Û, ¾÷·Îµå¸¦ Æ÷ÇÔÇÑ ¸ÞÀÏÀü¼ÛÀ» ¾Ë¾Æº¾´Ï´Ù.
¸ñÂ÷
0. °³¿ä
1. ¸ÞÀÏ °èÁ¤ º¸¾È ¼³Á¤
2. pom.xml ¼³Á¤
3. mailSender Bean µî·Ï
----- ¡èÀÌÀü Æ÷½ºÆà -----
4. Controller ¸Þ¼µå Ãß°¡
5. ÅؽºÆ® / À̹ÌÁö / ¾÷·Îµå Àü¼Û
6. ¸ÞÀÏ Àü¼Û Å×½ºÆ®
4. Controller ¸Þ¼µå Ãß°¡
MimeMessage °´Ã¼¸¦ Á÷Á¢ »ý¼ºÇÏ¿© ¸ÞÀÏÀ» ¹ß¼ÛÇÏ´Â ¹æ¹ý°ú MimeMessagePreparator ¸¦ »ç¿ëÇؼ ¸ÞÀÏÀ» Àü¼ÛÇÏ´Â ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. µÎ°¡Áö ÄÚµå ¸ðµÎ ¾Ë¾Æº¸°Ú½À´Ï´Ù.
º¸³»´Â ÀÌ À̸ÞÀÏ, ¹Þ´Â ÀÌ À̸ÞÀÏ, ¸ÞÀÏ Á¦¸ñ, ¸ÞÀÏ ³»¿ë 4°¡ÁöÀÇ µ¥ÀÌÅ͸¦ ÀÔ·ÂÇØÁÖ¾î¾ßÇϴµ¥ ÇØ´ç µ¥ÀÌÅ͵éÀ» VO°´Ã¼¿¡ ´ã¾Æ¼µµ °¡´ÉÇÏ°í Controller ¸Þ¼µå ³»¿¡ Á÷Á¢ »ðÀÔ ÇÏ´Â °Íµµ °¡´ÉÇÕ´Ï´Ù. À̹ø Æ÷½ºÆÿ¡¼± Á÷Á¢ »ðÀÔ ¹æ½ÄÀ¸·Î ÁøÇàÇÏ°Ú½À´Ï´Ù.
¸ÞÀÏÀü¼ÛÀ» À§ÇØ ÇÊ¿ä·ÎÇÑ Á¤º¸¸¦ ¼¼ÆÃÇÏ¿´´ø "mailSender" BeanÀ» ÀÎÁ§¼Ç(ÀÇÁ¸¼º ÁÖÀÔ) ÇÏ¿© »ç¿ëÇÏ°Ú½À´Ï´Ù.
@Autowired private JavaMailSender mailSender; |
4.1 MimeMessage °´Ã¼¸¦ Á÷Á¢ »ý¼ºÇÏ¿© ¸ÞÀÏÀ» ¹ß¼ÛÇÏ´Â ¹æ¹ý
À̹æ½ÄÀ» »ç¿ëÇϱâ À§ÇØ import µÇ´Â Ŭ·¡½ºµéÀº ¾Æ·¡¿Í °°½À´Ï´Ù.
import javax.mail.internet.MimeMessage; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; |
*MimeMessage ´ë½Å SimpleMailMessage¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. µÑÀÇ Â÷ÀÌÁ¡Àº MimeMessageÀÇ °æ¿ì ¸ÖƼÆÄÆ® µ¥ÀÌÅ͸¦ ó¸® ÇÒ ¼ö ÀÖ°í SimpleMailMessage´Â ´Ü¼øÇÑ ÅؽºÆ® µ¥ÀÌÅ͸¸ Àü¼ÛÀÌ °¡´ÉÇÕ´Ï´Ù.
Controller¿¡ ¸Þ¼µå´Â ¾Æ·¡¿Í °°ÀÌ ÀÛ¼ºÇϸéµË´Ï´Ù.
@RequestMapping(value = "/sendMail", method = RequestMethod.GET) public void sendMailTest() throws Exception{ String subject = "test ¸ÞÀÏ"; String content = "¸ÞÀÏ Å×½ºÆ® ³»¿ë"; String from = "º¸³»´ÂÀÌ ¾ÆÀ̵ð@µµ¸ÞÀÎÁÖ¼Ò"; String to = "¹Þ´ÂÀÌ ¾ÆÀ̵ð@µµ¸ÞÀÎÁÖ¼Ò"; try { MimeMessage mail = mailSender.createMimeMessage(); MimeMessageHelper mailHelper = new MimeMessageHelper(mail,true,"UTF-8"); // true´Â ¸ÖƼÆÄÆ® ¸Þ¼¼Áö¸¦ »ç¿ëÇÏ°Ú´Ù´Â ÀÇ¹Ì /* * ´Ü¼øÇÑ ÅؽºÆ® ¸Þ¼¼Áö¸¸ »ç¿ë½Ã¿£ ¾Æ·¡ÀÇ Äڵ嵵 »ç¿ë °¡´É * MimeMessageHelper mailHelper = new MimeMessageHelper(mail,"UTF-8"); */ mailHelper.setFrom(from); // ºó¿¡ ¾ÆÀ̵𠼳Á¤ÇÑ °ÍÀº ´Ü¼øÈ÷ smtp ÀÎÁõÀ» ¹Þ±â À§ÇØ »ç¿ë µû¶ó¼ º¸³»´ÂÀÌ(setFrom())¹Ýµå½Ã ÇÊ¿ä // º¸³»´ÂÀÌ¿Í ¸ÞÀÏÁÖ¼Ò¸¦ ¼ö½ÅÇÏ´ÂÀÌ°¡ º¼¶§ ¸ðµÎ Ç¥±â µÇ°Ô ¿øÇÏ½Å´Ù¸é ¾Æ·¡ÀÇ Äڵ带 »ç¿ëÇÏ½Ã¸é µË´Ï´Ù. //mailHelper.setFrom("º¸³»´ÂÀÌ À̸§ <º¸³»´ÂÀÌ ¾ÆÀ̵ð@µµ¸ÞÀÎÁÖ¼Ò>"); mailHelper.setTo(to); mailHelper.setSubject(subject); mailHelper.setText(content, true); // true´Â htmlÀ» »ç¿ëÇÏ°Ú´Ù´Â ÀǹÌÀÔ´Ï´Ù. /* * ´Ü¼øÇÑ ÅؽºÆ®¸¸ »ç¿ëÇÏ½Å´Ù¸é ´ÙÀ½ÀÇ Äڵ带 »ç¿ëÇϼŵµ µË´Ï´Ù. mailHelper.setText(content); */ mailSender.send(mail); } catch(Exception e) { e.printStackTrace(); } } | cs |
- MimeMessageHelper mailHelper = new MimeMessageHelper(mail,true,"UTF-8") ¿¡¼ true´Â ¸ÖƼÆÄÆ® ¸Þ¼¼Áö¸¦ »ç¿ëÇÏ°Ú´Ù´Â ÀǹÌÀÔ´Ï´Ù. ´Ü¼øÇÑ ÅؽºÆ® ¸Þ¼¼Áö¸¸ »ç¿ëÇÏ½Å´Ù¸é ¾Æ·¡ÀÇ Äڵ带 »ç¿ëÇϽøéµË´Ï´Ù.
- mailHelper.setText(content, true) ¿¡¼ true´Â htmlÀ» »ç¿ëÇÑ´Ù´Â ÀǹÌÀÔ´Ï´Ù. htmlÀ» »ç¿ëÇϰԵǸé À̹ÌÁö¸¦ ÷ºÎ ÇÒ ¼ö ÀÖ´Â <img>ű׸¦ »ç¿ë ÇÒ ¼ö ÀÖ½À´Ï´Ù.
- ´Ü¼øÇÑ ÅؽºÆ®¸¸ »ç¿ëÇÒ ½Ã¿£ mailHelper.setText(content)·Î »ç¿ëÇÏ½Ã¸é µË´Ï´Ù.
- º¸³»´ÂÀÌ(from)Àº ¹Ýµå½Ã ÀÖ¾î¾ßÇÕ´Ï´Ù. mailSender ºó¿¡¼ ¾ÆÀ̵𸦠±âÀÔÇÏ¿´Áö¸¸ ÀÌ´Â SMTP »ç¿ë ±ÇÇÑÀ» ¾ò¾î ¿À´Â ¿ªÇÒÀ» ¼öÇàÇÕ´Ï´Ù.
* ¸ÞÀÏ ÁÖ¼Ò¿¡ º¸³»´ÂÀÌ¿Í ¸ÞÀÏÁÖ¼Ò¸¦ ¸ðµÎ Ç¥±â¸¦ ¿øÇÑ´Ù¸é ¾Æ·¡¿Í °°ÀÌ ÀÛ¼ºÇÏ½Ã¸é µË´Ï´Ù.
mailHelper.setFrom("º¸³»´ÂÀÌ À̸§ <º¸³»´ÂÀÌ ¾ÆÀ̵ð@µµ¸ÞÀÎÁÖ¼Ò>"); |
4.2 MimeMessagePreparator¸¦ »ç¿ëÇؼ ¸ÞÀÏÀ» Àü¼ÛÇÏ´Â ¹æ¹ý
ÇØ´ç ¹æ½ÄÀº MimeMessage¸¦ Á÷Á¢ °´Ã¼È ÇÏÁö ¾Ê°í MimeMessagePreparator Ŭ·¡½º¸¦ »ç¿ëÇÏ´Â ¹æ½ÄÀÔ´Ï´Ù. À̹æ½ÄÀ» »ç¿ëÇϱâÀ§ÇØ import µÇ´Â Ŭ·¡½º´Â ´ÙÀ½°ú °°½À´Ï´Ù.
- 4.1°ú ´Ù¸¥Á¡Àº import org.springframework.mail.javamail.MimeMessagePreparator °¡ Ãß°¡ÀûÀ¸·Î Ãß°¡ µÈ´Ù´Â Á¡ÀÔ´Ï´Ù.
import javax.mail.internet.MimeMessage; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.mail.javamail.MimeMessagePreparator; |
- Controller¿¡ ¸Þ¼µå´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼º ÇÏ½Ã¸é µË´Ï´Ù.
- new MimeMessageHelper(mail,true,"UTF-8") / mailHelper.setText(content, true) ´Â 4.1 ¼³¸í°ú µ¿ÀÏÇÕ´Ï´Ù.
@RequestMapping(value = "/sendMail", method = RequestMethod.GET) public void sendMailTest2() throws Exception{ String subject = "test ¸ÞÀÏ"; String content = "¸ÞÀÏ Å×½ºÆ® ³»¿ë."; String from = "º¸³»´ÂÀÌ ¾ÆÀ̵ð@µµ¸ÞÀÎÁÖ¼Ò"; String to = "¹Þ´ÂÀÌ ¾ÆÀ̵ð@µµ¸ÞÀÎÁÖ¼Ò"; final MimeMessagePreparator preparator = new MimeMessagePreparator() { public void prepare(MimeMessage mimeMessage) throws Exception{ final MimeMessageHelper mailHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8"); mailHelper.setFrom(from); mailHelper.setTo(to); mailHelper.setSubject(subject); mailHelper.setText(content, true); } }; try { mailSender.send(preparator); } catch(Exception e) { e.printStackTrace(); } } | cs |
5. ÅؽºÆ® / À̹ÌÁö / ¾÷·Îµå Àü¼Û
¼³¸íÇϱ⠾ռ À̹ÌÁö / ¾÷·Îµå Àü¼ÛÀ» À§Çؼ± ¸ÖƼÆÄÆ® ¸Þ¼¼Áö¸¦ Çã¿ëÇؾßÇϸç html Çã¿ëÀ» ¼³Á¤ÇØÁÖ¾î¾ßÇÕ´Ï´Ù. ÇØ´ç¹æ¹ýÀº 4.1¼³¸íÀ» Âü°í ºÎŹµå¸³´Ï´Ù. ÇØ´ç ¼³¸íÀº 4.1 ÀÇ Controller ¸Þ¼µå Äڵ带 ±â¹ÝÀ¸·Î ÁøÇàÇÏ°Ú½À´Ï´Ù.
// ¸ÖƼÆÄÆ® ¸Þ¼¼Áö Çã¿ë MimeMessageHelper mailHelper = new MimeMessageHelper(mail,true,"UTF-8"); // html mailHelper.setText(content, true); |
5.1 ´Ü¼ø ÅؽºÆ®
4.1 ÄÚµå ¿¹½Ã°¡ ¸Þ¼¼Áö ³»¿ëÀ» ´Ü¼øÇÑ ÅؽºÆ®·Î Àü¼ÛÇÏ´Â °ÍÀÔ´Ï´Ù.
5.2 À̹ÌÁö
À̹ÌÁö¸¦ ÷ºÎÇÏ´Â ¹æ¹ýÀº html Çã¿ëÀ» ¼³Á¤Ç߱⶧¹®¿¡ À̹ÌÁö ű×(<img>)¸¦ »ç¿ëÇÕ´Ï´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°½À´Ï´Ù.
@RequestMapping(value = "/sendMail", method = RequestMethod.GET) public void sendMailTest() throws Exception{ String subject = "test ¸ÞÀÏ"; String content = "¸ÞÀÏ Å×½ºÆ® ³»¿ë" + "<img src=\"https://t1.daumcdn.net/cfile/tistory/214DCD42594CC40625\">"; String from = "º¸³»´ÂÀÌ ¾ÆÀ̵ð@µµ¸ÞÀÎÁÖ¼Ò"; String to = "¹Þ´ÂÀÌ ¾ÆÀ̵ð@µµ¸ÞÀÎÁÖ¼Ò"; try { MimeMessage mail = mailSender.createMimeMessage(); MimeMessageHelper mailHelper = new MimeMessageHelper(mail,true,"UTF-8"); mailHelper.setFrom(from); mailHelper.setTo(to); mailHelper.setSubject(subject); mailHelper.setText(content, true); mailSender.send(mail); } catch(Exception e) { e.printStackTrace(); } } |
5.3 ¾÷·Îµå
¾÷·Îµå µÈ ÆÄÀÏÀ» Àü¼ÛÇϱâ À§Çؼ± Ãß°¡ÀûÀΠŬ·¡½º import°¡ ÇÊ¿ä·ÎÇÕ´Ï´Ù.
import org.springframework.core.io.FileSystemResource; import java.io.File; |
Ãß°¡ÇØÁÖ¾î¾ßÇÒ ÄÚµå´Â ´ÙÀ½°ú °°½À´Ï´Ù.
FileSystemResource file = new FileSystemResource(new File("°æ·Î\¾÷·ÎµåÇÒÆÄÀÏ.Çü½Ä")); helper.addAttachment("¾÷·ÎµåÆÄÀÏ.Çü½Ä", file); |
@RequestMapping(value = "/sendMail", method = RequestMethod.GET) public void sendMailTest() throws Exception{ String subject = "test ¸ÞÀÏ"; String content = "¸ÞÀÏ Å×½ºÆ® ³»¿ë" + "<img src=\"https://t1.daumcdn.net/cfile/tistory/214DCD42594CC40625\">"; String from = "º¸³»´ÂÀÌ ¾ÆÀ̵ð@µµ¸ÞÀÎÁÖ¼Ò"; String to = "¹Þ´ÂÀÌ ¾ÆÀ̵ð@µµ¸ÞÀÎÁÖ¼Ò"; try { MimeMessage mail = mailSender.createMimeMessage(); MimeMessageHelper mailHelper = new MimeMessageHelper(mail,true,"UTF-8"); mailHelper.setFrom(from); mailHelper.setTo(to); mailHelper.setSubject(subject); mailHelper.setText(content, true); FileSystemResource file = new FileSystemResource(new File("D:\\test.txt")); mailHelper.addAttachment("¾÷·ÎµåÆÄÀÏ.Çü½Ä", file); mailSender.send(mail); } catch(Exception e) { e.printStackTrace(); } } |
6. ¸ÞÀÏ Àü¼Û Å×½ºÆ®
Å×½ºÆ® Ŭ·¡½º¸¦ ÅëÇØ Controller ¸Þ¼µå¿¡ Ãß°¡Çß´ø ÄÚµåµéÀ» Å×½ºÆ® Çغ¸°Ú½À´Ï´Ù. Å×½ºÆ® Ŭ·¡½º¸¦ »ý¼º ÈÄ ¾Æ·¡ÀÇ Äڵ带 ÀÛ¼ºÇÏ¿´½À´Ï´Ù. mailSendTest(), mailSendTest2()°¡ Àִµ¥ µÑ Áß Çϳª¸¦ »ç¿ëÇÏ½Ã¸é µË´Ï´Ù.
import java.io.File; import javax.mail.internet.MimeMessage; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.FileSystemResource; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.mail.javamail.MimeMessagePreparator; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml") public class MailTestController { @Autowired JavaMailSenderImpl mailSender; // MimeMessage °´Ã¼¸¦ Á÷Á¢ »ý¼ºÇÏ¿© ¸ÞÀÏÀ» ¹ß¼ÛÇÏ´Â ¹æ¹ý @Test public void mailSendTest() throws Exception{ String subject = "test ¸ÞÀÏ"; String content = "¸ÞÀÏ Å×½ºÆ® ³»¿ë" + "<img src=\"https://t1.daumcdn.net/cfile/tistory/214DCD42594CC40625\">"; String from = "º¸³»´ÂÀÌ ¾ÆÀ̵ð@µµ¸ÞÀÎÁÖ¼Ò"; String to = "¹Þ´ÂÀÌ ¾ÆÀ̵ð@µµ¸ÞÀÎÁÖ¼Ò"; try { MimeMessage mail = mailSender.createMimeMessage(); MimeMessageHelper mailHelper = new MimeMessageHelper(mail, "UTF-8"); mailHelper.setFrom(from); mailHelper.setTo(to); mailHelper.setSubject(subject); mailHelper.setText(content, true); FileSystemResource file = new FileSystemResource(new File("D:\\test.txt")); mailHelper.addAttachment("test.txt", file); mailSender.send(mail); } catch(Exception e) { e.printStackTrace(); } } // MimeMessagePreparator¸¦ »ç¿ëÇؼ ¸ÞÀÏÀ» Àü¼ÛÇÏ´Â ¹æ¹ý @Test public void mailSendTest2() throws Exception{ String subject = "test ¸ÞÀÏ"; String content = "¸ÞÀÏ Å×½ºÆ® ³»¿ë" + "<img src=\"https://t1.daumcdn.net/cfile/tistory/214DCD42594CC40625\">"; String from = "º¸³»´ÂÀÌ ¾ÆÀ̵ð@µµ¸ÞÀÎÁÖ¼Ò"; String to = "¹Þ´ÂÀÌ ¾ÆÀ̵ð@µµ¸ÞÀÎÁÖ¼Ò"; try { final MimeMessagePreparator preparator = new MimeMessagePreparator() { public void prepare(MimeMessage mimeMessage) throws Exception{ final MimeMessageHelper mailHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8"); mailHelper.setFrom(from); mailHelper.setTo(to); mailHelper.setSubject(subject); mailHelper.setText(content, true); FileSystemResource file = new FileSystemResource(new File("D:\\test.txt")); mailHelper.addAttachment("test.txt", file); } }; mailSender.send(preparator); } catch(Exception e) { e.printStackTrace(); } } } |
Å×½ºÆ® °á°úÀÔ´Ï´Ù.
Reference
- https://seonhyungjo.github.io/Spring-SMTP/
- https://offbyone.tistory.com/167
- https://codevang.tistory.com/279
- https://blog.outsider.ne.kr/1051
- https://www.digicert.com/kr/what-is-ssl-tls-https/
Date
- 2020.08.27 ÀÛ¼º