송민준의 개발노트

email 서비스(네이버) 본문

웹/Spring Framework

email 서비스(네이버)

송민준 2019. 12. 31. 17:02

1. 네이버로 가서 내 메일함 옆에 환경설정 버튼 누른 후 다음과 같이 세팅

 

2. 코드 추가

- root.context.xml

<!--  프로퍼티 파일을 이용해서 값을 주입하는 방법
		<util:properties>를 이용해서 properties 타입의 빈으로 만든다. -->
	<util:properties id="mailinfo" location ="classpath:pro/mail.roperties"/>
	<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
		<property name="host" value="smtp.naver.com"/>
		<property name="port" value="587"/>
		<property name="username" value="#{mailinfo['id']}"/>
		<property name="password" value="#{mailinfo['password']}"/>
		<property name="javaMailProperties">
			<props> <prop key="mail.smtp.auth">true</prop></props>
            <prop key="mail.smtp.ssl.trust">smtp.naver.com</prop>
		</property>
	</bean>

- MailVO.java

import lombok.Data;

@Data
public class MailVO {
	private String from="dkaskgkdua@naver.com";
	private String to;
	private String subject = "회원 가입을 축하드립니다. - 제목";
	private String content = "회원 가입을 축하드립니다. - 내용";
}

 

- SendMail.java

import javax.mail.internet.MimeMessage;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;

import com.naver.myhome5.domain.MailVO;

public class SendMail {
	@Autowired
	private JavaMailSenderImpl mailSender;
	
	public void sendMail(MailVO vo) {
		MimeMessagePreparator mp = new MimeMessagePreparator() {

			@Override
			public void prepare(MimeMessage mimeMessage) throws Exception {
				// 두 번째 인자 true는 멀티 파트 메시지를 사용하겠다는 의미입니다.
				MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
				helper.setFrom(vo.getFrom());
				helper.setTo(vo.getTo());
				helper.setSubject(vo.getSubject());
				
				// 1. 문자로만 전송하는 경우
				helper.setText(vo.getContent(), true);//두번째 인자는 html을 사용하겠다는 뜻
				
				
			}
			
		};
		mailSender.send(mp); // 메일 전송한다.
		System.out.println("메일 보냄");
	}
}

- pom.xml

<!-- 메일 전송 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>com.sun.mail</groupId>
			<artifactId>javax.mail</artifactId>
			<version>1.5.6</version>
		</dependency>

- mail.properties

id= 아이디
password= 비밀번호

- Controller.java

@RequestMapping(value = "/joinProcess.net", method = RequestMethod.GET)
	public void joinProcess(Member member, HttpServletResponse response) throws Exception {
		/*
		 * Member m = new Member(); m.setId(id); m.setPassword(password);
		 * m.setName(name); m.setAge(age); m.setGender(gender); m.setEmail(email);
		 */
		int result = memberservice.insert(member);

		response.setContentType("text/html;charset=utf-8");

		PrintWriter out = response.getWriter();
		out.println("<script>");
		if (result == 1) {
			
			MailVO vo = new MailVO();
			vo.setTo(member.getEmail());
			vo.setContent(member.getId() + "님 회원가입을 축하드립니다.");
			sendMail.sendMail(vo);
			
			out.println("alert('가입성공');");
			out.println("location.href='login.net';");
		} else if (result == -1) {
			out.println("alert('아이디 중복');");
			out.println("history.go(-1);");
		}
		out.println("</script>");
		out.close();

	}

● 파일 및 html 식으로 보내고 싶다면?

SendMail.java

import java.io.File;

import javax.mail.internet.MimeMessage;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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.stereotype.Component;

import com.naver.myhome5.domain.MailVO;
@Component
public class SendMail {
	@Autowired
	private JavaMailSenderImpl mailSender;
	
	@Value("${sendfile}")
	private String sendfile;
	
	public void sendMail(MailVO vo) {
		MimeMessagePreparator mp = new MimeMessagePreparator() {

			@Override
			public void prepare(MimeMessage mimeMessage) throws Exception {
				// 두 번째 인자 true는 멀티 파트 메시지를 사용하겠다는 의미입니다.
				MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
				helper.setFrom(vo.getFrom());
				helper.setTo(vo.getTo());
				helper.setSubject(vo.getSubject());
				
				// 1. 문자로만 전송하는 경우
				//helper.setText(vo.getContent(), true);//두번째 인자는 html을 사용하겠다는 뜻
				
				// 2. 이미지를 내장해서 보내는 경우
				String content = "<img src='cid:Home'>" + vo.getContent();
				helper.setText(content, true);
				
				FileSystemResource file = new FileSystemResource(new File(sendfile));
				
				helper.addInline("Home", file);
				/* 첫번째 인자 - "Home"
				 * contentId 사용할 콘텐츠 id
				 * src="cid:myId" : myId"표현식을 통해 HTML 소스에서 참조할 수 있다.
				 * <img src="/read/image/original/?mimSN=1577767951.538782.9219
				 * */
				
				//3 파일을 첨부해서 보내는 경우
				FileSystemResource file1 = new FileSystemResource(new File(sendfile));
				
				//첫번째 인자 : 첨부될 파일의 이름
				//두번째 : 첨부파일
				helper.addAttachment("remove.jpg", file1);
				
				
			}
			
		};
		mailSender.send(mp); // 메일 전송한다.
		System.out.println("메일 보냄");
	}
}

savefolder.properties

sendfile=C:\\Users\\user1\\Downloads\\remove.png

' > Spring Framework' 카테고리의 다른 글

transaction  (0) 2020.01.03
AOP(Aspect Oriented Programming)  (0) 2020.01.02
404 에러, Exception 처리  (0) 2019.12.30
Spring lombok 설치(이클립스, STS)  (0) 2019.12.25
Spring 간단 정리  (0) 2019.12.22