spring 的org.springframework.mail包提供的对邮件的支持。
1.封装一个方法用于发送邮件的方法:
package com.ql.v2.utils;
import java.util.Properties;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
/**
isValate:是否校验(或者授权):true
to:邮件接收者地址数组。:{"***@qq.com","***@qq.com"},因为是数组所以支持群发。
subject:邮件主题
context:邮件内容
*/
public static void sendEmails( String isValate, String[] to, String subject, String context) throws Exception {
//邮件服务器的配置信息
JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
senderImpl.setHost("smtp.exmail.qq.com");//发件服务器HOST
// 根据自己的情况,设置username
senderImpl.setUsername("***");//发件人名称
// 根据自己的情况, 设置password
senderImpl.setPassword("***");//发件邮箱密码
Properties pp = new Properties();
pp.put("mail.smtp.auth", isValate);//是否校验(或者授权):true
senderImpl.setJavaMailProperties(pp);
// 获取邮件的样板
SimpleMailMessage msg = new SimpleMailMessage();
msg.setFrom("123123123@qq.com");// 发邮件邮箱
msg.setTo(to);
msg.setSubject(subject);// 邮件主题
msg.setText(context);
MimeMessage mimeMsg = senderImpl.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMsg, true, "UTF-8");
helper.setTo(msg.getTo());//邮件接收地址
helper.setSubject(msg.getSubject());//邮件主题
helper.setFrom(msg.getFrom(), "别名");//邮件发送人-别名
helper.setText(msg.getText(), true);//邮件内容
senderImpl.send(mimeMsg);//发送邮件
}
2.定义一个发送邮件的定时类
package com.ql.v2.controller.tasks;
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.springframework.core.io.ClassPathResource;
import com.ql.v2.utils.SendEmailUtil;
/**
* 自动统计类
* @author huayafei
*
*/
public class AutoStatisticsTask {
/**
* 自动统计微信端定存宝、活期宝的投资金额与人数信息。
*/
public void autoStatisticWxInfo(){
try {
//读取文件,然后发送邮件。
ClassPathResource resource=new ClassPathResource("/");
String filepath=resource.getFile().getParent()+"/other_pages/statistic.html";
//利用oapche提供的方法把一个文件读取成字符串
String html=FileUtils.readFileToString(new File(filepath),"UTF-8");
/*
* 群发邮件
*/
String isValate = "true";//邮件授权
String[] to = {"***@qinlian.me","***@qq.com"};//收件人
String subject = "微信端投资统计记录";//邮件主题
//调用发送邮件的方法
SendEmailUtil.sendEmails(isValate, to, subject, html);
} catch (Exception e) {
throw new RuntimeException(e.getMessage(),e);
}
}
}
3.设置spring配置文件定时调用发送邮件的方法。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<!-- 总调度,用于启动定时器 -->
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="autoStatistics_time" />
</list>
</property>
</bean>
<!-- 注入调度的object -->
<bean id="autoStatisticsTask" class="com.ql.v2.controller.tasks.AutoStatisticsTask"/>
<!--自动发送统计数据-->
<bean id="autoStatisticsTaskProperties" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="autoStatisticsTask"></property><!-- 定时器类 -->
<property name="targetMethod" value="autoStatisticWxInfo"></property><!-- 定时器类的具体处理方法 -->
<property name="concurrent" value="false"></property> <!-- 定时器是否支持并发 -->
</bean>
<!-- 自动发送统计数据 -->
<bean id="autoStatistics_time" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="autoStatisticsTaskProperties"></property>
<property name="cronExpression" value="0 0/1 * * * ?"></property> <!--每1分钟执行一次 -->
</bean>
</beans>
sping配置文件关联图解: