Spring整合javamail成功之后,把大量的代码配置到spring的配置文件里了,从而降低了Javamail对邮箱、端口、协议、主题、内容…… 的耦合。在客户端上只需要调用一行代码就可以发送邮件了。
首先不需要往项目的lib里导入jar,但是需要在tomcat的lib里导入3个jar文件activation.jar ,jspsmartupload.jar,mail.jar 导入这3个jar文件,这样tomcat就不会报错了。
SendManagerService .java
package
com.cgt.itspiderman.service.email;
public interface SendManagerService {
public void sendMail(String email);
}
定义一个发送邮件的接口.
public interface SendManagerService {
public void sendMail(String email);
}
SendManagerServiceImp.java
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) {
// TODO Auto-generated method stub
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);
}
public JavaMailSender getMailSender() {
return mailSender;
}
public void setMailSender(JavaMailSender mailSender) {
this .mailSender = mailSender;
}
public SimpleMailMessage getMessage() {
return message;
}
public void setMessage(SimpleMailMessage message) {
this .message = message;
}
}
发送邮件的实现类.
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) {
// TODO Auto-generated method stub
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);
}
public JavaMailSender getMailSender() {
return mailSender;
}
public void setMailSender(JavaMailSender mailSender) {
this .mailSender = mailSender;
}
public SimpleMailMessage getMessage() {
return message;
}
public void setMessage(SimpleMailMessage message) {
this .message = message;
}
}
然后在WEB-INF下面创建一个文件messages.properties 以后修改配置信息直接在这里修改就可以了。
host
=
smtp.gmail.com
username = [email protected]
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 = [email protected]
subject = \u6807\u9898
text = \u5185\u5BB9\u554A
username = [email protected]
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 = [email protected]
subject = \u6807\u9898
text = \u5185\u5BB9\u554A
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 -->
............................
< 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( " [email protected] " );
}
ApplicationContext context = null ;
context = new ClassPathXmlApplicationContext( " applicationContext.xml " );
SendManagerService sms = (SendManagerService)context.getBean( " sendmail " );
sms.sendMail( " [email protected] " );
}
如果是在struts2里使用的话需要在Action里加上private SendManagerService sendemail;(加上get和set),然后在spring里配置这个Action的时候加上<property name="sendemail" ref="sendmail"></property>
然后在Action里调用下面这一行代码就可以发送了。
sendemail.sendMail("[email protected]");
写到这里大家会问,如果需要动态的修改这个邮件的内容呢?方法很简单
WebApplicationContext context
=
WebApplicationContextUtils.getRequiredWebApplicationContext(ServletActionContext.getServletContext());
((SimpleMailMessage) context.getBean( " mailMessage " )).setText( " 我现在修改了邮件的内容 呵呵呵 " );
((SimpleMailMessage) context.getBean( " mailMessage " )).setText( " 我现在修改了邮件的内容 呵呵呵 " );