在Spring中使用Gmail的SMTP寄信

前一陣子,要使用Send Mail的功能,並且要將整個Resources整併到專案中,所以找了一些文件,但找到的文件中,幾乎都是片斷的SourceCode,還是無法在單一教學的文件中,一次將所有的設定檔完成,因此將試驗的結果Po出來,給有需要的人參考,在這裡成功的將Gmail的組態註冊到Tomcat/JBoss中,並在Spring中使用這些資源。另外在Mail Message的Template上,也使用Velocity來協助處理。

所有的步驟共分成三個部份

首先,開啟Tomcat的server.xml,將Mail Resources的資料,加到WebApp的Context下
<Context …>
<Resource name="mail/Session"
type="javax.mail.Session"
mail.transport.protocol="smtp"
mail.smtp.host="smtp.gmail.com"
mail.smtp.auth="true"
mail.smtp.port="465"
mail.smtp.socketFactory.port="465"
mail.smtp.socketFactory.class="javax.net.ssl.SSLSocketFactory"
mail.smtp.user="yourname@gmail.com"
password="yourpassword"
mail.smtp.starttls.enable="true"/>
</Context>


再來,開啟WebApp中WEB-INF/web.xml,將這個Resources的資源註冊進去
<res-ref-name>mail/Session</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>


最後,設定Spring的ApplicationContent.xml
<bean name="mailSession" class="org.springframework.jndi.JndiObjectFactoryBean">
 <property name="jndiName" value="java:comp/env/mail/Session"/>
</bean>
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
 <property name="session" ref="mailSession"/>
</bean>
<bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">
 <property name="from" value="your sender email address" />
</bean>
<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
  input.encoding=UTF-8
  output.encoding=UTF-8
 </value>
 </property>
</bean>
<bean id="mailService" class="your.MailService">
 <property name="mailSender" ref="mailSender" />
 <property name="velocityEngine" ref="velocityEngine"/>
 <property name="mailMessage" ref="mailMessage" />
 <property name="orderConfirmationSubject" value="order subject" />
 <property name="orderConfirmationTemplateURI" value="cmail_order_confirmation.vm" />
</bean>


而Velocity的用法,可參考Spring Framework上的Velocity & FreeMarker這篇文章


留言

熱門文章