1. MailSender와 JavaMailSender 메일 발송

- 메일 발송 기능을 위한 MailSender 인터페이스 제공

- SimpleMailMessage(메일 제목, 단순 텍스트 내용)를 전달받아 메일을 발송하는 기능을 정의


package org.springframework.mail;

public interface MailSender {
	void send(SimpleMailMessage simpleMessage) throws MailException;
	void send(SimpleMailMessage[] simpleMessages) throws MailException;
}


- MailSender 인터페이스를 상속받은 JavaMailSender는 Java Mail API의 MimeMessage를 이용해서 메일을 발송하는 추가적인 기능 정의


package org.springframework.mail.javamail;

import java.io.InputStream;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.MailException;
import org.springframework.mail.MailSender;

public interface JavaMailSender extends MailSender {
	MimeMessage createMimeMessage();
	MimeMessage createMimeMessage(InputStream contentStream) throws MailException;
	void send(MimeMessage mimeMessage) throws MailException;
	void send(MimeMessage[] mimeMessages) throws MailException;
	void send(MimeMessagePreparator mimeMessagePreparator) throws MailException;
	void send(MimeMessagePreparator[] mimeMessagePreparators) throws MailException;
}


- MailException은 RuntimeException이므로 예외 처리가 필요한 경우에 처리

- JavaMailSender 인터페이스의 구현체로 JavaMailSenderImpl 클래스를 제공




1.1. JavaMailSender 빈 설정

- JavaMailSenderImpl 클래스는 Java Mail API를 이용, SMTP 프로토콜 사용

- SMTP 서버 주소와 포트 번호 필요




	

- host 프로퍼티 : 서버 주소

- port 프로퍼티 : 포트 번호, 기본 값 25

- defalutEncoding 프로퍼티 : 기본 인코딩 설정

- username 프로퍼티 : 인증을 위한 사용자명

- password 프로퍼티 : 인증을 위한 사용자 비밀번호


1.2. SimpleMailmessage 이용 메일 발송

- 단순 텍스트 구성 메일 메시지 생성할 때 이용


 메서드 

 설명 

 setFrom(String from) 

 발신자 설정 

 setReplyTo(String replyTo) 

 응답 주소 설정 

 setTo(String to) 

 수신자 설정 

 setTo(String[] to) 

 수신자 목록 설정 

 setCc(String cc)

 참조자 설정

 setCc(String[] cc) 

 참조자 목록 설정 

 setBcc(String bcc)

 숨은 참조자 설정 

 setBcc(String[] bcc) 

 숨은 참조자 목록 설정 

 setSentDate(Date sentDate) 

 메일 발송일 설정 

 setSubject(String subject) 

 메일 제목 설정 

 setText(String text) 

 메일 내용 설정 

// Member.java

package com.tistory.gangzzang;

public class Member {

	private String id;
	private String name;
	private String email;

	public Member() {
		super();
	}

	public Member(String id, String name, String email) {
		super();
		this.id = id;
		this.name = name;
		this.email = email;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

} // Member
// SendMailService.java

package com.tistory.gangzzang;

public interface SendMailService {
	public void sendEmail(Member member);
} // SendMailService
// SimpleMailMessageTest.java

package com.tistory.gangzzang;

import org.springframework.mail.MailException;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;

public class SimpleMailMessageTest implements SendMailService {
	
	private MailSender mailSender;
	
	public void setMailSender(MailSender mailSender) {
		this.mailSender = mailSender;
	}

	@Override
	public void sendEmail(Member member) {
		SimpleMailMessage message = new SimpleMailMessage();
		message.setSubject("[공지] 회원 가입 안내");
		message.setText("회원 가입을 축하합니다.");
		message.setFrom("kyung_ho@naver.com");
		message.setTo(member.getEmail());
		try {
			mailSender.send(message);
		} catch (MailException e) {
			e.printStackTrace();
		}
	} // sendEmail
	
} // SimpleMailMessageTest

1.3. SimpleMailmessage 재사용

- SimpleMailMessage 클래스는 다른 SimpleMailMessage 클래스로부터 내용을 복사해서 사용하는 기능을 제공

- 생성자를 통해 객체를 전달하면 설정 정보를 모두 복사

- simpleMailMessage를 스프링 설정파일에서 설정하고 필요로 하는 빈에서 재사용 가능




	
	

	
		
	

// SimpleMailMessageTest2.java

package com.tistory.gangzzang;

import org.springframework.mail.MailException;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;

public class SimpleMailMessageTest2 implements SendMailService {
	
	private MailSender mailSender;
	private SimpleMailMessage templateMailMessage;
	
	public void setMailSender(MailSender mailSender) {
		this.mailSender = mailSender;
	}

	public void setTemplateMailMessage(SimpleMailMessage templateMailMessage) {
		this.templateMailMessage = templateMailMessage;
	}

	@Override
	public void sendEmail(Member member) {
		SimpleMailMessage message = new SimpleMailMessage(templateMailMessage);
		message.setText("회원 가입을 축하합니다.");
		message.setTo(member.getEmail());
		try {
			mailSender.send(message);
		} catch (MailException e) {
			e.printStackTrace();
		}
	} // sendEmail
	
} // SimpleMailMessageTest2

1.4. Java Mail API - MimeMessage 이용 메시지 생성

- 파일 첨부 또는 HTML로 구성되어 있는 경우 MimeMessage를 이용

- JavaMailSender 인터페이스는 MimeMessage 객체를 생성해주는 createMimeMessage() 메서드를 제공

- 이 메서드가 리턴한 MimeMessage 객체를 이용해서 메시지를 구성한 뒤 메일 발송

// MimeMessageTest.java

package com.tistory.gangzzang;

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

import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;

public class MimeMessageTest implements SendMailService {
	private JavaMailSender mailSender;

	public void setMailSender(JavaMailSender mailSender) {
		this.mailSender = mailSender;
	}

	@Override
	public void sendEmail(Member member) {
		MimeMessage message = mailSender.createMimeMessage();
		try {
			message.setSubject("[공지] 회원 가입 안내", "UTF-8");
			String htmlContent = "안녕하세요, 반갑습니다.";
			message.setText(htmlContent, "UTF-8", "html");
			message.setFrom(new InternetAddress("gz.kyungho@gmail.com"));
			message.addRecipient(RecipientType.TO, new InternetAddress(member.getEmail()));
			mailSender.send(message);
		} catch (MessagingException e) {
			e.printStackTrace();
			return;
		} catch (MailException e) {
			e.printStackTrace();
			return;
		} // try - catch
	}
	
} // MimeMessageTest




2. MimeMessageHelper 이용 파일 첨부

- MimeMessage를 이용하여 파일 첨부를 할 수 있지만 복잡하므로, 스프링이 제공하는 MimeMessageHelper 클래스를 사용


2.1. MimeMessageHelper 이용 첨부 파일 추가

- 생성자의 첫번째 파라미터는 메일 메시지를 구성할 때 사용 될 MimeMessage 객체를 전달

- 두번째 파라미터는 MultiPart 여부를 설정 (true 이면 첨부 파일 추가)

- 파일 정보를 제공할 javax.activation.DataSource를 생성

- FileDataSource 클래스를 사용, MimeMessageHelper.addAttachment() 메서드로 파일을 메일에 첨부

- MimeUtilty 클래스는 Java Mail API에서 제공하는 클래스, ASCII 이외의 문자로 구성된 문장을 알맞게 인코딩

// MimeMessageHelperFileTest.java

package com.tistory.gangzzang;

import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;

public class MimeMessageHelperFileTest implements SendMailService {

	private JavaMailSender mailSender;

	public void setMailSender(JavaMailSender mailSender) {
		this.mailSender = mailSender;
	}

	@Override
	public void sendEmail(Member member) {
		MimeMessage message = mailSender.createMimeMessage();
		try {
			MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
			messageHelper.setSubject("[공지] 회원 가입 안내");
			String htmlContent = "안녕하세요, 반갑습니다.";
			messageHelper.setText(htmlContent, true);
			messageHelper.setFrom("gz.kyungho@gmail.com", "갱짱");
			messageHelper.setTo(new InternetAddress(member.getEmail(), member.getName(), "UTF-8"));
			DataSource dataSource = new FileDataSource("c:\\책목록.xlsx");
			messageHelper.addAttachment(MimeUtility.encodeText("책목록.xlsx", "UTF-8", "B"), dataSource);
			mailSender.send(message);
		} catch (MailException e) {
			e.printStackTrace();
			return;
		} catch (Throwable e) {
			e.printStackTrace();
			return;
		} 
	}

} // MimeMessageHelperFileTest

2.2. MimeMessageHelper 이용 인라인 자원 추가

- MimeMessageHelper.addInline() 메서드를 사용, 메일 내용에 이미지나 파일 등을 삽입

- setText() 메서드를 호출한 이후, addInline() 메서드를 호출

// MimeMessageInlineTest.java

package com.tistory.gangzzang;

import javax.activation.FileDataSource;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;

public class MimeMessageInlineTest implements SendMailService {
	private JavaMailSender mailSender;

	public void setMailSender(JavaMailSender mailSender) {
		this.mailSender = mailSender;
	}

	@Override
	public void sendEmail(Member member) {
		MimeMessage message = mailSender.createMimeMessage();
		try {
			MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
			messageHelper.setSubject("[공지] 회원 가입 안내");
			String htmlContent = "안녕하세요, 반갑습니다." + "";
			messageHelper.setText(htmlContent, true);
			messageHelper.setFrom("gz.kyungho@gmail.com", "갱짱");
			messageHelper.setTo(new InternetAddress(member.getEmail(), member.getName(), "UTF-8"));
			messageHelper.addInline("abc", new FileDataSource("abc.jpg"));
			mailSender.send(message);
		} catch (MailException e) {
			e.printStackTrace();
			return;
		} catch (Throwable e) {
			e.printStackTrace();
			return;
		}
	}
	
} // MimeMessageInlineTest

+ Recent posts