Spring 整合 JavaMail 成功後,將大量代碼配置到 Spring 設定檔,降低 JavaMail 對郵箱、端口、協議、主題、內容等的耦合。客戶端只需調用一行代碼即可發送郵件。
專案 lib 目錄無需導入 jar,但需在 Tomcat lib 目錄導入 3 個 jar:activation.jar、jspsmartupload.jar、mail.jar,這樣 Tomcat 不會報錯。
package com.cgt.itspiderman.service.email;
public interface SendManagerService {
public void sendMail(String email);
}
package com.cgt.itspiderman.service.email;
import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessagePreparator;
public class SendManagerServiceImp implements SendManagerService {
private JavaMailSender mailSender;
private SimpleMailMessage message;
public void sendMail(final String email) {
MimeMessagePreparator preparator = new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage) throws Exception {
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(email));
mimeMessage.setFrom(new InternetAddress(message.getFrom()));
mimeMessage.setSubject(message.getSubject(), "gbk");
mimeMessage.setText(message.getText(), "gbk");
}
};
mailSender.send(preparator);
}
// getter/setter 省略
}
messages.properties(放在 WEB-INF 下)host=smtp.gmail.com
username=zhengchengqiaobusiness@gmail.com
password=xxxxxx
port=465
mail.smtp.auth=true
mail.smtp.timeout=25000
mail.smtp.starttls.enable=true
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
mail.smtp.socketFactory.fallback=false
from=zhengchengqiaobusiness@gmail.com
subject=標題
text=內容啊
applicationContext.xml<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list><value>WEB-INF/mail.properties</value></list>
</property>
</bean>
<!-- gmail 發送郵箱配置 -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host"><value>${host}</value></property>
<property name="username"><value>${username}</value></property>
<property name="password"><value>${password}</value></property>
<property name="port"><value>${port}</value></property>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
<prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
<prop key="mail.smtp.starttls.enable">${mail.smtp.starttls.enable}</prop>
<prop key="mail.smtp.socketFactory.class">${mail.smtp.socketFactory.class}</prop>
<prop key="mail.smtp.socketFactory.fallback">${mail.smtp.socketFactory.fallback}</prop>
</props>
</property>
</bean>
<bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">
<property name="from"><value>${from}</value></property>
<property name="subject"><value>${subject}</value></property>
<property name="text"><value>${text}</value></property>
</bean>
<bean id="sendmail" class="com.cgt.itspiderman.service.email.SendManagerServiceImp">
<property name="mailSender" ref="mailSender"></property>
<property name="message" ref="mailMessage"></property>
</bean>
<!-- end -->
public static void main(String[] args) {
ApplicationContext context = null;
context = new ClassPathXmlApplicationContext("applicationContext.xml");
SendManagerService sms = (SendManagerService) context.getBean("sendmail");
sms.sendMail("zhengchengqiaobusiness@gmail.com");
}
Action 加上 private SendManagerService sendemail;(含 getter/setter),Spring 配置 Action 時加 <property name="sendemail" ref="sendmail"></property>。Action 中調用:
sendemail.sendMail("zhengchengqiaobusiness@gmail.com");
WebApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletActionContext.getServletContext());
((SimpleMailMessage) context.getBean("mailMessage")).setText("我現在修改了郵件內容 呵呵");