티스토리 뷰

Spring

[스프링]이메일 보내기 (1)

김판다 2021. 11. 16. 23:07

1.pom.xml추가하기

<!-- 이메일 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>javax.mail-api</artifactId>
			<version>1.5.4</version>
		</dependency>
		<dependency>
			<groupId>com.sun.mail</groupId>
			<artifactId>javax.mail</artifactId>
			<version>1.5.3</version>
		</dependency>

2. 이메일 보낼 계정

[Google계정관리] > 좌측의 [보안]카테고리 > 보안 수준이 낮은 앱의 액세스 허용


3.[기본 설정]@Configuration 로 계정 연결 및 메일방식 세부설정 정하기

MailConig.java

@Configuration
public class MailConfig {
    @Bean
    public static JavaMailSender mailSender() {
        JavaMailSenderImpl jms = new JavaMailSenderImpl();
        jms.setHost("smtp.gmail.com");//google smtp 서버 설정(고정)
        jms.setPort(587);//네이버는 465(고정) //메일 포트
        jms.setUsername("/* 보내는 사람의 이메일 */");
        jms.setPassword("/*보내는 사람의 이메일의 패스워드*/");

	//세부사항
        Properties prop = new Properties();
        prop.setProperty("mail.transport.protocol", "smtp");
        prop.setProperty("mail.smtp.auth", "true"); 
        prop.setProperty("mail.smtp.starttls.enable", "true");
        prop.setProperty("mail.debug", "true");
        jms.setJavaMailProperties(prop);

        return jms;
    }
}

xml로 하는 방법도 있지만 어노테이션을 사용하여 만들었다.

smtp : 메일전송 프로토콜

mail.smtp.auth: 사용자 인증을 할 것인가

mail.smtp.starttls.enable : 보안 처리를 할 것인가

mail.debug : 콘솔에 내용이 출력된다


4.컨트롤러

MailController.java

@Controller
public class MailController {
	@Autowired
	MailService ms;

	@GetMapping("sendmail")
	public void sendMail(HttpServletResponse response) throws Exception {
		StringBuffer sb = new StringBuffer();
		sb.append("<h1>제품소개</h1>");
		sb.append("<a href="주소">");/*~보낼 내용~*/
		sb.append("ex)<img src=\"http://blog.jinbo.net/attach/615/200937431.jpg\">");
		sb.append("</a>");

		String msg = sb.toString();
		// ms.sendMail("받을 사람 이메일","제목","내용");
		ms.sendMail("/*받을 사람 이메일*/", "(제목)광고", msg);

		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.print("메일이 전송되었습니다");
	}

서비스에서 sendMail()메소드로 메일 보내기를 할 것이다.

여기서 throws한것은 out.print를 사용하기 위함.

-->메일을 보내고 나서 html에 뜸


5.서비스

MailService

@Service
public class MailService {
	@Autowired
	JavaMailSender mailsender;// 보내는 사용자

	// 받는 사용자
	public void sendMail(String to, String subject, String body) {
		MimeMessage message = mailsender.createMimeMessage();
		try {
			MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8");

			helper.setTo(to);
			helper.setSubject(subject);
			helper.setText(body, true);

			mailsender.send(message);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
 }

helper.setText(body, true); 여기서 true를 쓰면 html문으로 처리해주겠다는 것이다(*없으면 텍스트로 받음)

mailsender은 위의 MailConfig에서 보내는 사용자를 설정한 빈을 받는다

MimeMessage 는 우리가 보내고자하는 데이터를 보조하는 역할을 해준다.

     ->전송하고자 하는 목적지

     ->제목

     ->내용

 

message를 바로 쓰는게 아니라 이것을 통해서 또하나 변경을 하고 그것을 통해서 세팅을 할 것이다.

==>MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8");

MimeMessageHelper 이 실질적으로 사용자에게 보내기 위한 내용들을 저장

    >그것을 만들기 위해서 MimeMessage가 필요했다.

    >여기서 true는 멀티파트도 허용하겠다는 것

 

최종적으로 mailsender.send(message); 로 메일을 보낸다.

 

 

이렇게 하면 /sendmail로 가면 메일이 전송된다.

 

 

 

 

 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함