'gmail을 사용한 스프링 jpetstore의 메일 발송 설정'에 해당되는 글 1건

  1. 2008.07.09 gmail을 사용한 스프링 jpetstore의 메일 발송 설정

Gmail을 메일서버로 사용하여 메일을 발송할 수 있도록 설정합니다. 스프링 프레임워크의 jpetstore 샘플 프로젝트에서 보면 pet을 구매하고 결재할 때 고객의 메일주소로 감사메일을 보내게 되어있는데 그 부분의 설정을 정리해봅니다.

 

 

applicationContext.xml

 

 <!-- MailSender used by EmailAdvice -->
 <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="protocol" value="smtp"/>
  <property name="host" value="smtp.gmail.com"/>
  <property name="port" value="587"/>
  <property name="username" value="yourID
@gmail.com"/>
  <property name="password" value="******"/>
  <property name="defaultEncoding" value="utf-8"/>
  <property name="javaMailProperties">
   <props>
    <prop key="mail.smtp.auth">true</prop>
    <prop key="mail.smtp.starttls.enable">true</prop>
    <prop key="mail.smtp.quitwait">false</prop>
    <prop key="mail.debug">true</prop>
    <prop key="mail.from">thankyou@spring.com</prop>
   </props>
  </property>
 </bean>

 

 

SendOrderConfirm!ationEmailAdvice.java

package org.springframework.samples.jpetstore.domain.logic;

import! java.lang.reflect.Method;

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

import! org.apache.commons.logging.Log;
import! org.apache.commons.logging.LogFactory;

import! org.springframework.aop.AfterReturningAdvice;
import! org.springframework.beans.factory.InitializingBean;
import! org.springframework.mail.MailException;
import! org.springframework.mail.MailSender;
import! org.springframework.mail.javamail.JavaMailSenderImpl;
import! org.springframework.mail.javamail.MimeMessageHelper;
import! org.springframework.mail.SimpleMailMessage;
import! org.springframework.samples.jpetstore.domain.Account;
import! org.springframework.samples.jpetstore.domain.Order;

/**
 * AOP advice that sends confirm!ation email after order has been submitted
 * @author  Dmitriy Kopylenko
 */
public class SendOrderConfirm!ationEmailAdvice implements AfterReturningAdvice, InitializingBean {

 private static final String DEFAULT_MAIL_FROM = "thankyou@spring.com";
 private static final String DEFAULT_SUBJECT = "Thank you for your order!";
 private final Log logger = LogFactory.getLog(getClass());
 private JavaMailSenderImpl mailSender;
 private String mailFrom = DEFAULT_MAIL_FROM;
 private String subject = DEFAULT_SUBJECT;

 /**
  * @param mailSender
  * @uml.property  name="mailSender"
  */
 public void setMailSender(JavaMailSenderImpl mailSender) {
  this.mailSender = mailSender;
 }

 /**
  * @param mailFrom
  * @uml.property  name="mailFrom"
  */
 public void setMailFrom(String mailFrom) {
  this.mailFrom = mailFrom;
 }

 /**
  * @param subject
  * @uml.property  name="subject"
  */
 public void setSubject(String subject) {
  this.subject = subject;
 }

 public void afterPropertiesSet() throws Exception {
  if (this.mailSender == null) {
   throw new IllegalStateException("mailSender is required");
  }
 }

 public void afterReturning(Object returnValue, Method m, Object[] args, Object target) throws Throwable {
  Order order = (Order) args[0];
  Account account = ((PetStoreFacade) target).getAccount(order.getUsername());

  // don't do anything if email address is not set
  if (account.getEmail() == null || account.getEmail().length() == 0) {
   return;
  }

  StringBuffer text = new StringBuffer();
  text.append("Dear ").append(account.getFirstName()).append(' ').append(account.getLastName());
  text.append(", \n\n thank your for your order from JPetStore. \nPlease note that your order number is ");
  text.append(order.getOrderId());

  // non-SSL
  /*
  SimpleMailMessage mailMessage = new SimpleMailMessage();
  mailMessage.setTo(account.getEmail());
  mailMessage.setFrom(this.mailFrom);
  mailMessage.setSubject(this.subject);
  mailMessage.setText(text.toString());
  */

  // SSL #1 using MimeMessage
  /*
  MimeMessage mailMessage = this.mailSender.createMimeMessage();
  mailMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(account.getEmail()));
  mailMessage.setFrom(new InternetAddress(this.mailFrom));
  mailMessage.setSubject(this.subject);
  mailMessage.setText(text.toString());
  */

  // SSL #3 using MimeMessageHelper
  MimeMessage mailMessage = this.mailSender.createMimeMessage();
  MimeMessageHelper helper = new MimeMessageHelper(mailMessage);
  helper.setTo(account.getEmail());
  helper.setFrom(this.mailFrom);
  helper.setSubject(this.subject);
  helper.setText(text.toString());

  try {
   this.mailSender.send(mailMessage);
  }
  catch (MailException ex) {
   // just log it and go on
   logger.warn("An exception occured when trying to send email", ex);
  }
 }
}

 

참고사항: Gmail Hep에서 제시한 메일 클라이언트 설정조건

http://mail.google.com/support/bin/answer.py?hl=en&answer=13287

 

1) Incoming Mail (POP3) Server - requires SSL: pop.gmail.com
Use SSL: Yes
Port: 995 

 

2) Outgoing Mail (SMTP) Server - requires TLS: smtp.gmail.com (use authentication)
Use Authentication: Yes
Use STARTTLS: Yes (some clients call this SSL)
Port: 465 or 587 (587이 맞음) 

 

3) Account Name:  your Gmail username (including @gmail.com) 
4) Email Address:  your full Gmail email address (
username@gmail.com
5) Password:  your Gmail password 

Posted by [czar]
,