문제:  관리자 화면단에서 고객 내용에 답변하는 HTML형식의 메일 발송하는데 


   HTML을 알아서 인식하여 적용된 화면을 보여주는 메일 사업자도 있었으나


   사용자가 많은 네이버나 다음메일에서는 적용이 안되고 HTML형식의 태그가 달린 원본글이 그대로 노출되었다.



연구 : sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"); 

   

   메일 내용에 메타테그 될줄 알았으나... 발송되는 문자열 자체를 


  그냥 통으로 인식해서 문자열 내부에 메타태그를 사용하더라도 인식이 안되는건 당연하다.



해결 :  MimeMessage mimeMessage = mailSender.createMimeMessage();

       MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "utf-8");


          helper.setText(body, true); // *HTML 적용!!


    기존발송시에는  Simple mail 인가 ? 보냈는데 그건 HTML설정하는 부분이 없어 MimeMessage 를 사용하니 잘되었다.





예>

- Controller 단 -


@SuppressWarnings("static-access")

@RequestMapping("/QNAXxxxxxxxx.do")

public ModelAndView qnaModify(HttpServletRequest request, HttpServletResponse response) throws Exception {

log.debug("QnaController qnaModify Start");

ServiceDataVo param = new ServiceDataVo();

bind(request, param);

//leftMenu 값

LeftMenuDataVo leftMenu = new LeftMenuDataVo();

bind(request, leftMenu);

//Session 체크 

if (!"".equals(userInfo(request)) && !isbReturnValue()) {

return new ModelAndView(userInfo(request));

}

LogDataVo logDataVo = util.setLogDataVo(request.getRequestURL().toString(), "U", userInfo.getUserId(), Const.QNA_UPDATE,                 userInfo.getUpperType());

param.setReply_id(userInfo.getUserId());

int updateResult = serviceManageService.getQnaModify(request, param, logDataVo);


param.setCarrigeRetrun("View");

ServiceDataVo result = serviceManageService.getQnaView(param);

// 메일내용

if(updateResult == 1) {

StringBuffer sb = new StringBuffer();

sb.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");

sb.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">");

sb.append("<head>");

sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");

sb.append("<title>고객센터</title>");

sb.append("</head>");

sb.append("<body style=\"font-family: Arial, '맑은 고딕', 'Malgun Gothic', Dotum, '돋움',sans-serif, Helvetica; font-size:12px; color:#464646; line-height:0;\">");

sb.append("<div style=\"width:100%; padding:20px 0;\">");

sb.append("<div style=\"width:700px; margin:0 auto;\">");

sb.append("<img src=\"http://xxxxxxxxxx.co.kr/images/mail_title.jpg\" width=\"700px\" height=\"80px\" />");

sb.append("<div style=\"padding:30px;\">");

sb.append("<p>여러분의 소중한 의견과 함께 커가는 xxxxx 고객센터입니다.</p>");

sb.append("<p style=\"background-color:#f4f4f4; color:#754c24; border:1px solid #d7d7d7; padding:30px; text-align:center; font-size:18px; font-weight:bold; margin-bottom:50px;\">문의하신 내용에 답변 드립니다.</p>");

sb.append("<p style=\"line-height:1.6em;\">문의하신 질문에 대한 답변입니다.</p>");

sb.append("<div style=\"background:url(http://xxxxxxxxxx.co.kr/images/icon_a.jpg) left 25px no-repeat; border-top:1px solid #d7d7d7; border-bottom:1px solid #d7d7d7; padding:10px 10px 10px 50px; margin-bottom:50px;\">");

sb.append("<p style=\"line-height:1.6em; color:#754c24;\">");

sb.append(result.getReply_body());

sb.append("</p>");

sb.append("</div>");

sb.append("<p style=\"line-height:1.6em;\">고객께서 문의하신 내용입니다.</p>");

sb.append("<<div style=\"background:url(http://xxxxxxxxxxx..co.kr/images/icon_q.jpg) left center no-repeat; border-top:1px solid #d7d7d7; border-bottom:1px solid #d7d7d7; padding:10px 10px 10px 50px;\">");

sb.append("<p style=\"line-height:1.4em; font-weight:bold;\">" + result.getTitle() + "</p>");

sb.append("<p style=\"font-size:11px; color:#636363;\">" + result.getRegistration_date_time() + "</p>");

sb.append("</div>");

sb.append("<div style=\"padding:20px 50px; line-height:1.6em; border-bottom:1px solid #d7d7d7;\">");

sb.append(result.getBody());

sb.append("</div>");

sb.append("</div>");

sb.append("<div style=\"font-size:11px; color:#636363; background-color:#f4f4f4; line-height:1.3em; padding:20px 30px; margin-top:50px;\">");

sb.append("본 메일은 발신 전용이므로 메일로 문의 시 확인이 불가능합니다.<br />");

sb.append("다른 궁금하신 사항은  웹사이트(<a href=\"http://xxxxxxxkr\" target=\"_blank\">www.smartmedia.co.kr</a>)의 FAQ에서 확인 또는 Q&amp;A에서 문의해 주세요.<br />");

sb.append("Copyrjght 2014 dfsdfdf All rights reserved.");

sb.append("</div>");

sb.append("</div>");

sb.append("</div>");

sb.append("</body>");

sb.append("</html>");

mailService.send("문의하신 내용에 답변 드립니다.", sb.toString(), Const.WEBMASTER_EMAIL_ID, result.getEmail());

}

FileInformationVo fileDataVo = new FileInformationVo();

fileDataVo.setLinkType(Const.QNA_LINK);

fileDataVo.setLinkID(param.getBbs_id());

fileDataVo.setReplayYN("Y");

List<FileInformationVo> file = systemService.getFileInfoList(fileDataVo);

ModelAndView mav = new ModelAndView();

mav.addObject("qna",result);

mav.addObject("userInfo", userInfo);

mav.addObject("leftMenu", leftMenu);

mav.addObject("file", file);

mav.addObject("param", param);

mav.setViewName("serviceManage/ows/qnaView.do");

return mav;

}



----------------------------------------



package com.osp.common.util;


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.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.mail.MailException;

import org.springframework.mail.SimpleMailMessage;

import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.mail.javamail.MimeMessageHelper;

import org.springframework.stereotype.Service;


import com.osp.common.exception.DoException;



@Service("MailService")

public class MailServiceImpl implements MailService {


private static final Logger log = LoggerFactory.getLogger(MailServiceImpl.class);

private JavaMailSender  mailSender;

private SimpleMailMessage messageSource;

public void setMailSender(JavaMailSender mailSender) {

this.mailSender = mailSender;

}

public void setMessageSource(SimpleMailMessage messageSource) {

this.messageSource = messageSource;

}


@Override

public void send(SimpleMailMessage arg0) throws MailException {

}


@Override

public void send(SimpleMailMessage[] arg0) throws MailException {

}


public boolean send(String subject, String body, String fromUser, String toUser) throws DoException{

log.debug("Mail Send !!");

try{

    MimeMessage mimeMessage = mailSender.createMimeMessage();

MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "utf-8");

helper.setText(body, true); //***HTML 적용

helper.setTo(toUser);

helper.setSubject(subject);

helper.setFrom("support@smartmedia.co.kr");

mailSender.send(mimeMessage);

return true;

        } catch (MailException e) {

            e.printStackTrace();

            return false;

        } catch (Throwable e) {

            e.printStackTrace();

            return false;

        }


}


public boolean sendFileAttach(String subject, String body, String fromUser, String toUser, String FileName ) throws MailException{

MimeMessage message = mailSender.createMimeMessage();

try{

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

messageHelper.setSubject(subject);

messageHelper.setText(body, true);

messageHelper.setFrom(fromUser);

            //messageHelper.setTo(new InternetAddress(member.getEmail(), member.getName(), "UTF-8"));

messageHelper.setTo(new InternetAddress(toUser, "KBS", "UTF-8"));

            DataSource dataSource = new FileDataSource("c:\\통합 문서1.xlsx");

            messageHelper.addAttachment(MimeUtility.encodeText("통합 문서1.xlsx", "UTF-8", "B"), dataSource);

            mailSender.send(message);

            return true;

        } catch (MailException e) {

            e.printStackTrace();

            return false;

        } catch (Throwable e) {

            e.printStackTrace();

            return false;

        }

}

}



---------------------------


servlet-osp.xml        //  발송만 잘되게 설정을 맞게 해주면된다.



<?xml version="1.0" encoding="UTF-8"?>


<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:jee="http://www.springframework.org/schema/jee" xmlns:context="http://www.springframework.org/schema/context"

.....

생략

<!-- SET default mail properties -->    // 메일 발신 입력

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">

<property name="host" value="dsmtp.naver.com" />

<property name="port" value="587" />

<property name="username" value="support@xxxxxxxxxx.co.kr" />

<property name="password" value="xxxxxxxx" />  

<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.smtp.EnableSSL.enable">true</prop>

   <prop key="mail.mime.charset">UTF-8</prop>

<prop key="mail.debug">true</prop>

</props>

</property>

</bean>

 <!-- You can have some pre-configured messagess also which are ready to send -->

 

    <bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">

        <property name="to" value=""></property>

        <property name="from" value="sport@xxxxxxxxxx.co.kr"></property>

        <property name="subject" value="FATAL - Application crash. Save your job !!"/>

    </bean>

    

    <bean id="MailService" class="com.sp.common.util.MailServiceImpl">

    <property name="mailSender"><ref bean="mailSender"/></property>

    <property name="messageSource"><ref bean="mailMessage"/></property>

    </bean>


</beans>

+ Recent posts