[자바] 이메일발송

Nux·2022년 7월 14일
0
post-custom-banner

설정

pom.xml

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

빈 설정

  • 호스트, 포트, 메일주소, 패스워드,
<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="메일계정"/> //보내는사람 메일계정
<property name="password" value="xxxxx(비밀번호)"/> //보내는사람 비밀번호
<property name="javaMailProperties">
    <props>
        <prop key="mail.smtp.ssl.trust">smtp.gmail.com</prop>
        <prop key="mail.smtp.starttls.enable">true</prop>
        <prop key="mail.smtp.auth">true</prop>
        </props>
    </property>
</bean>	

관련 클래스

SimpleMailMessage

SimpleMailMessage(메일제목, 메일내용)
  • 메일 메세지가 단순한 텍스트로 이루어져 있을 때 사용
  • 발신자, 수신자, 참조자 등 설정 가능

MimeMessage

  • 파일이 첨부되거나 메일 내용이 HTML로 구성되어 있을 때 사용
MimeMessage message = javaMailSender.createMimeMessage();
message.setSubject("제목", "UTF-8");
String htmlMsg = "<h1>내용</h1>";
			
message.setText(htmlMsg, "UTF-8", "html");
message.setFrom(new InternetAddress("발신자 이메일"));
message.addRecipient(RecipientType.TO, new InternetAddress("수신자 이메일", "USER", "UTF-8"));

javaMailSender.send(message);
  • 메일제목, html메일내용, 받는이 등 설정
Session session = Session.getDefaultInstance(prop, new javax.mail.Authenticator() {
	protected PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(user, password);
	}
});

try{
	MimeMessage msg = new MimeMessage(session);
	msg.setFrom(new InternetAddress(FROM, FROMNAME));
	msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));
	msg.setSubject(SUBJECT);
	msg.setContent(BODY, "text/html;charset=euc-kr");
	Transport.send(message);
} catch (MessagingException m) {
	m.printStackTrace();
}

MimeMessageHelper

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

helper.setFrom(new InternetAddress(sessionVO.getEmail(), sessionVO.getName()));
helper.setTo(toEmail);
helper.setSubject(title);
// 포함된 텍스트가 HTML이라는 의미로 true 플래그를 사용한다
helper.setText(body, true);

mailSender.send(message);

예제

  • 발신이 네이버 메일이므로 네이버 기준으로 세팅
  • gmail은 메일을 수신 할 때 태그가 적용되지 않음

네이버메일 설정

한명의 수신자에게 발신

	public void sendEmail() throws Exception {
		String host = "smtp.naver.com";
		String port = "587";
		String pass = "네이버 비밀번호";
		
		JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
		mailSender.setHost(host);
		mailSender.setPort(NumberUtils.toInt(port, 587));
		mailSender.setUsername("네이버 아이디(@ 뒤로 적지 않음)");
		mailSender.setPassword(pass);

		Properties props = mailSender.getJavaMailProperties();
		props.setProperty("mail.transport.protocol", "smtp");
		props.setProperty("mail.smtp.auth", "true");
		props.setProperty("mail.smtp.starttls.enable", "true");
		props.put("mail.smtp.ssl.protocols", "TLSv1.2");
		props.put("mail.debug", "true");

		try {
			// 메일 내용 넣을 객체와, 이를 도와주는 Helper 객체 생성
			MimeMessage mail = mailSender.createMimeMessage();
			MimeMessageHelper mailHelper = new MimeMessageHelper(mail, "UTF-8");

			// 메일 내용을 채워줌
			mailHelper.setFrom("보내는 사람 메일주소");	// 보내는 사람 셋팅
			mailHelper.setTo("받는 사람 메일주소");		// 받는 사람 셋팅
			mailHelper.setSubject("제목세팅");	// 제목 셋팅
			mailHelper.setText("<h1>공지사항</h1>");	// 내용 셋팅

			// 메일 전송
			mailSender.send(mail);
			
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

복수의 수신자에게 발신

  • 수신자 메일주소를 List에 담음
  • String body에 내용 넣음
List<String> mailList = userService.getUserEmail();

String host = "smtp.naver.com";
String port = "587";
String pass = "비밀번호";

JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(host);
mailSender.setPort(NumberUtils.toInt(port, 587));
mailSender.setUsername("네이버아이디");
mailSender.setPassword(pass);

Properties props = mailSender.getJavaMailProperties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.ssl.protocols", "TLSv1.2"); // 얘를 추가하니까 메일 전송이 됨
props.put("mail.debug", "true");

try {
	// 메일 내용 넣을 객체와, 이를 도와주는 Helper 객체 생성
	for(String mail : mailList) {
	MimeMessage message = mailSender.createMimeMessage();
	MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
	helper.setFrom("발신자 메일주소");
	helper.setTo(수신자[i]);
	helper.setSubject("제목");
	helper.setText("내용", true);
	mailSender.send(message);
	}

참고

https://www.tabnine.com/code/java/methods/javax.mail.internet.MimeMessage/%3Cinit%3E
https://kkangdda.tistory.com/86

post-custom-banner

0개의 댓글