2018. 5. 9. 14:50
반응형

스프링 프레임워크에서 smtp를 이용해서 간편하게 메일을 보낼 수 있다.

많은 사람이 쓰는 gmail을 이용해서 보낸다고 가정한다.

메일 발송은 간단하게 JUnit 테스트를 통해 발송한다.



우선 pom.xml에 다음 디펜던시 추가

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
</dependency>
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-mail</artifactId>
    <version>${org.springframework-version}</version>
</dependency>



root-context.xml에 다음을 추가한다.

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
	<property name="host" value="smtp.gmail.com"/>
	<property name="port" value="587" />
	<property name="username" value="name@gmail.com" />
	<property name="password" value="password" />
	<property name="javaMailProperties">
		<props>
			<prop key="mail.transport.protocol">smtp</prop>
			<prop key="mail.smtp.auth">true</prop>
			<prop key="mail.smtp.starttls.enable">true</prop>
			<prop key="mail.debug">true</prop>
		</props>
	</property>
</bean>


MailTest.java 파일을 다음과 같이 만든다.

저렇게 하고 실행하면 메일이 발송된다. (그전에 gmail에 로그인해서 무슨 설정을 해야 한다.)


2가지 경우를 만들었는데 큰 차이는 없다.

위의 예제에서는 MimeMessageHelper를 사용했다.

큰 차이는 발견하지 못했고, 굳이 차이가 있다면 답장받을 주소를 배열로 받지 못한다는 점이 보였다.

답장받을 주소를 변경하는 경우는 잘 없기 때문에 큰 의미가 없다.


import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
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(locations = {"file:src/main/webapp/WEB-INF/spring/root-context.xml"})
public class MailTest {
	@Autowired
	JavaMailSender mailSender;

	@Test
	public void mailTest() {
		String mailTo = "a@a.com, b@b.com";
		MimeMessagePreparator preparator = new MimeMessagePreparator() {

			@Override
			public void prepare(MimeMessage mimeMessage) throws Exception {
				MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
				messageHelper.setFrom(new InternetAddress("name@gmail.com","nickname", "UTF-8")); // 보내는 사람
				messageHelper.setTo(InternetAddress.parse(mailTo)); // 받는사람
				messageHelper.setSubject("test mail"); // 제목
				messageHelper.setText("", "<div>test mail</div>"); // 내용
				messageHelper.setReplyTo(new InternetAddress("a@a.com","replyTo", "UTF-8")); // 답장받을 주소
			}
		};

		try {
			mailSender.send(preparator);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void sendMail() {
		String mailTo = "a@a.com, b@b.com";
		MimeMessagePreparator preparator = new MimeMessagePreparator() {

			@Override
			public void prepare(MimeMessage mimeMessage) throws Exception {
				mimeMessage.setFrom(new InternetAddress("name@gmail.com","nickname", "UTF-8"));
				mimeMessage.setSubject("test mail", "UTF-8");
				mimeMessage.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mailTo));
				mimeMessage.setContent("test mail", "text/html;charset=UTF-8");
				mimeMessage.setReplyTo(InternetAddress.parse(mailTo));
			}
		};

		try {
			mailSender.send(preparator);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

반응형