2011-10-18 31 views
2

在我的Web應用程序中,我想發送郵件。有沒有辦法用Spring MVC做到這一點?什麼是最好的方法呢?使用Spring從Web應用程序發送郵件

謝謝

+1

那麼,有什麼問題嗎?我確信有一種方法。花一些時間研究。 – mre

回答

5

您可以使用Spring郵件抽象層可以輕鬆地發送電子郵件。定義你的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> 

那麼下面豆,在mypackage.MySendMailService

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

3

我使用Apache Velocity作爲電子郵件模板系統。您可以將「VelocityEngine」的實例定義爲spring bean並將其注入到控制器中。然而,更清潔的解決方案是將郵件發送代碼放入服務中,並將您的服務注入到控制器中。

@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」發送您的電子郵件,該郵件也可以定義爲spring bean。

可以定義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> 
相關問題