2011-10-18 9 views
2

내 웹 응용 프로그램에서 메일을 보내려고합니다. Spring MVC로 할 수있는 방법이 있습니까? 그리고 그것을하는 가장 좋은 방법은 무엇입니까? Spring을 사용하여 웹 응용 프로그램에서 메일 보내기

+1

그래서, 문제는 무엇인가? 나는 방법이있을 것이라고 확신한다. 연구에 시간을 할애하십시오. – mre

답변

5

은 쉽게 이메일을 보내 봄의 메일 추상 계층을 사용할 수 있습니다. mypackage.MySendMailService에, 당신의 applicationContext.xml 그리고

<!-- Mail sender bean --> 
<bean id="mailSender" 
     class="org.springframework.mail.javamail.JavaMailSenderImpl">   
<property name="host" value="my.smtp.host" /> 
<property name="username" value="my_username" /> 
<property name="password" value="my_password" /> 
</bean> 

<!-- Simple mail template --> 
<bean id="basicEmailMessage" 
     class="org.springframework.mail.SimpleMailMessage"> 
    <property name="from"> 
     <value>whateverSenderAddress</value> 
    </property> 
</bean> 

<!-- Your service with sender and template injected --> 
<bean id="mySendMailService" 
     class="mypackage.MySendMailService"> 
    <property name="mailSender"> 
    <ref bean="mailSender" /> 
    </property> 
    <property name="emailTemplate"> 
     <ref bean="basicEmailMessage" /> 
    </property> 
</bean> 

에서 다음 콩을 정의

public class SendMailService { 
    private MailSender mailSender; 
    private SimpleMailMessage emailTemplate; 
    public void sendEmail(String to, String from, String subject, String body) 
         throws MailException { 
     SimpleMailMessage message = new SimpleMailMessage(this.emailTemplate); 
     message.setTo(to); 
     message.setFrom(from); 
     message.setSubject(subject); 
     message.setText(body); 
     mailSender.send(message); 
    } 

    public void setMailSender(MailSender mailSender) { 
     this.mailSender = mailSender; 
    } 
    public void setEmailTemplate(SimpleMailMessage emailTemplate) { 
     this.emailTemplate = emailTemplate; 
    } 
} 
+0

고마워. 그게 내가 찾고 있었던거야. – Khalifa

1

Spring MVC 웹 프레임 워크입니다 감사하고, 이메일과는 아무 상관이 없습니다. Spring 프레임 워크의 또 다른 부분은 메일 전송을 지원한다. chapter 24 of the ref guide을 살펴보십시오.

3

전자 메일 템플릿 시스템으로 Apache Velocity를 사용하고 있습니다. "VelocityEngine"인스턴스를 스프링 빈으로 정의하여 컨트롤러에 삽입 할 수 있습니다. 그러나 훨씬 깨끗한 해결책은 메일 전송 코드를 서비스에 넣고 컨트롤러에 서비스를 주입하는 것입니다.

@Autowired private VelocityEngine velocityEngine; 
    @Autowired private JavaMailSender mailSender; 

     MimeMessagePreparator preparator = new MimeMessagePreparator() { 
        @Override 
        public void prepare(MimeMessage mimeMessage) throws Exception { 
         MimeMessageHelper message = new MimeMessageHelper(mimeMessage); 
         message.setTo("[email protected]"); 
         message.setFrom("[email protected]"); 
         message.setSubject("You got mail!"); 

           Map<String, Object> model = new HashMap<String, Object>(); 
         model.put("param1", new Date()); 

         String text = 
          VelocityEngineUtils.mergeTemplateIntoString(
            velocityEngine, 
            "com/myapp/mailtemplates/email.vm", 
            model 
          ); 

         mimeMessage.setText(text,"utf-8", "html"); 
         mimeMessage.setHeader("Content-Type", "text/html; charset=utf-8"); 
        } 
       }; 

mailSender.send(preparator); 

HashMap을 사용하여 속도 템플릿 내에서 사용할 수있는 매개 변수를 전달할 수 있습니다. 그러면 스프링 빈으로 정의 할 수있는 "JavaMailSender"를 사용하여 전자 메일을 보낼 수 있습니다.

당신은 mailSender이 유사한 velocityEngine 콩을 정의 할 수 있습니다

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
     <property name="host" value="smtp.mail.com" /> 
     <property name="username" value="sender" /> 
     <property name="password" value="password" /> 
     <property name="javaMailProperties"> 
      <props> 
       <!-- Use SMTP-AUTH to authenticate to SMTP server --> 
       <prop key="mail.smtp.auth">true</prop> 
       <!-- Use TLS to encrypt communication with SMTP server --> 
       <!-- <prop key="mail.smtp.starttls.enable">true</prop> --> 
      </props> 
     </property> 
    </bean> 

    <!-- Apache Velocity Email Template Engine --> 
    <bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean"> 
     <property name="velocityProperties"> 
      <value> 
       resource.loader=class 
       class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader 
      </value> 
     </property> 
    </bean> 
관련 문제