/**
 * ÀÌ ¼Ò½º´Â Spring ÇÁ·¹ÀÓ¿öÅ© ¿öÅ©ºÏ¿¡¼­ »ç¿ëÇÑ ¿¹Á¦ ¼Ò½ºÀÔ´Ï´Ù. 
 * ÀÌ ¼Ò½º´Â ¸ðµç °³¹ßÀÚµéÀÌ ÀÚÀ¯·Ó°Ô ¼öÁ¤ ¹× ¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. 
 * ´Ü, ÀÌ ¼Ò½º¸¦ ±â¹ÝÀ¸·Î »õ·Î¿î ¾ÖÇÃ¸®ÄÉÀÌ¼ÇÀ» °³¹ßÇÒ °æ¿ì ÃâÃ³¸¦ ¸í½ÃÇØ ÁÖ½Ã¸é µË´Ï´Ù. 
 */
package net.javajigi.common.mail;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import net.javajigi.common.util.StringUtil;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.mail.javamail.MimeMessageHelper;

/**
 * ÁÖ¼®À» ³Ö¾î ÁÖ¼¼¿ä. ¹è°¡ °íÆÄ¿ä.
 * 
 * @author ¹ÚÀç¼º(ÀÚ¹ÙÁö±â, javajigi@gmail.com)
 */
public class ExceptionMailSender extends AbstractMessageSender {
	protected final Log logger = LogFactory.getLog(getClass());
	
	private MessageSourceAccessor msAccessor = null;
	
	public void setMessageSourceAccessor(MessageSourceAccessor msAccessor) {
		this.msAccessor = msAccessor;
	}
	
	public void sendMessage(Throwable e) {
		if( logger.isDebugEnabled() ) {
			logger.debug("sendMessage() ½ÃÀÛ");
		}
		
		try {
			MimeMessage msg = sender.createMimeMessage();
			MimeMessageHelper helper = new MimeMessageHelper(msg);
			
			helper.setTo(to);
			helper.setFrom(from);
			helper.setSubject(e.getMessage());

			StringBuffer sb = new StringBuffer();
			sb.append("<html><head></head><body>");
			sb.append("<h1>");
			sb.append(e.getMessage());
			sb.append("</h1><br/>");
			sb.append(StringUtil.stackTraceToString(e));
			sb.append("</body></html>");

			helper.setText(sb.toString());

			sender.send(msg);
			
			if( logger.isDebugEnabled() ) {
				logger.debug("sendMessage() Á¾·á");
			}
		} catch (MessagingException me) {
			if( logger.isErrorEnabled() ) {
				logger.error(msAccessor.getMessage("email.not.send"), me);
				logger.error(msAccessor.getMessage("original.error.message"), e);
			}
		} catch (Exception ex) {
			if( logger.isErrorEnabled() ) {
				logger.error(msAccessor.getMessage("email.not.send"), ex);
				logger.error(msAccessor.getMessage("original.error.message"), e);
			}			
		}
	}
}
