超简单的Java定时发送带附件邮件

spring常用包外还用到的Jar

       quartz-1.6.5.jar           mail.jar          activation.jar


本人的业务需求是:

每月月末000分给指定的email地址发送月Excel报表,指定的email地址经常变化。

先说介绍一下我对Spring定时发送邮件的理解,有不对的地方请大家指正。

       首先,Spring本身就嵌入了发送邮件和定时任务的功能。我们要做的就是导入相应的jar包,配置邮件属性和定时属性就可以了。下面是简单定时邮件的实现(网上搜一下“java定时邮件“,到处都是,为了方便大家我在这再重复一次)

 

1、Spring的加载方式设置成在web.xml中加载,在web.xml加入

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-clss>

</listener>

 

2、 Spring中配置邮件属性

<!—配置邮件发送端-->

<bean id="mailSender"

        class="org.springframework.mail.javamail.JavaMailSenderImpl">

        <property name="host" value="邮件服务器地址"/>

        <property name="username" value="用户名"/>

        <property name="password" value="密码"/>

        <property name="javaMailProperties">

            <props>

                <prop key="mail.smtp.auth">true</prop>

            </props>

        </property>

</bean>

  <!—配置邮件属性-->

<bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">

        <property name="to" value="目标地址"/>

        <property name="from" >

             <list>

                <value></value>

             </list>

        </property>

        <property name="subject" value="test"/>

      <property name="subject" value="test"/>

</bean>

  <!—指定邮件发送的方法-->

<bean id="ms" class="com.open.quartz.MailService" autowire="byName"/>

 

3、 编写邮件发送的方法

public class MailService {

private MailSender mailSender;    

private SimpleMailMessage mailMessage;//邮件模板public void sendMail() {        

System.out.println("-----------发送邮件!---------");        

SimpleMailMessage msg=new SimpleMailMessage(this.mailMessage);        msg.setText("this is a test mail");        

try {            

mailSender.send(msg);        

} catch (MailException e) {            

e.printStackTrace();        

}        

System.out.println("-----------发送成功!---------");
}    //
省略set,get方法

}

4、 配置定时发送属性,再回到Spring配置文件中

<bean id="reportJob"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="ms"/>
        <property name="targetMethod" value="sendMail"/>
    </bean>
       <!--
一个定时的调度器-->
    <bean id="cronTrigger"
        class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="reportJob"/>

<!--指定每月月末000秒进行发送-->
        <property name="cronExpression" value="0 0 0 1 * ?"/>     </bean>
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="simpleTrigger"/>
            </list>
        </property>
    </bean>

 

需要说明的是cronExpression的值得规则

例如:0 21 12 1 5 ?表示每年的511221分发送,

例子一下就清楚了吧

我们的需求中要随时改变发送目标地址,并且邮件中还有附件,这两点功能上面都实现不了。好像还没有人动态的生成Spring的配置文件。下面是我这两个需求的实现

 

我的思路是:将SimpleMailMessage替换成能够添加附件的类MimeMessage

并且手动初始化JavaMailSenderImplMimeMessage,这样就可以用自定义配置文件来实现动态设置email属性。

 

1、上述Spring配置中的

<bean id="mailSender"

        class="org.springframework.mail.javamail.JavaMailSenderImpl">

        <property name="host" value="邮件服务器地址"/>

        <property name="username" value="用户名"/>

        <property name="password" value="密码"/>

        <property name="javaMailProperties">

            <props>

                <prop key="mail.smtp.auth">true</prop>

            </props>

        </property>

</bean>

  <!—配置邮件属性-->

<bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">

        <property name="to" value="目标地址"/>

        <property name="from" >

             <list>

                <value></value>

             </list>

        </property>

        <property name="subject" value="test"/>

      <property name="subject" value="test"/>

</bean>

删掉或注释掉

 

2、 修改发送类MailService 

public class MailService {

private MailSender mailSender;    

private SimpleMailMessage mailMessage;//邮件模板

 

public MailService (){

         Properties prop = new Properties();

       InputStream is = ReportServiceImpl.class.getClassLoader()

                       .getResourceAsStream("reportset.properties");

        try {

            prop.load(is);

            is.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

        String host = prop.getProperty("host");

        String userName = prop.getProperty("userName");

        String pwd = prop.getProperty("password");

        String from = prop.getProperty("fromEmail");

        String to = prop.getProperty("toEmail");

        Date date = new Date();

        String subject = date.getMonth() + "-" + date.getYear() + " " +

            prop.getProperty("subject");

        String reportPath = prop.getProperty("reportPath");

 

 

 

file = new FileSystemResource(reportPath);

 

        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();

        mailSender.setHost(host);

        mailSender.setUsername(userName);

        mailSender.setPassword(pwd);

 

        Properties p = new Properties();

        p.setProperty("mail.smtp.auth", "true");

        mailSender.setJavaMailProperties(p);

 

        MimeMessage mm = mailSender.createMimeMessage();

        MimeMessageHelper mmh;

 

        try {

            mmh = new MimeMessageHelper(mm,

                MimeMessageHelper.MULTIPART_MODE_MIXED,

"utf-8");

            mmh.setFrom(from);

            mmh.setTo(to.split(";"));

            mmh.setSubject(subject);

            mmh.addAttachment(file.getFilename(), file.getFile());

        } catch (Exception e) {

            e.printStackTrace();

        }

 

}

 

public void sendMail() {        

System.out.println("-----------发送邮件!---------");        

try {            

mailSender.send(mailMessage);        

} catch (MailException e) {            

e.printStackTrace();        

}        

System.out.println("-----------发送成功!---------");
}    //
省略set,get方法

}

 

 

3、 配置文件reportset.properties,放在工程的src

host=www.iesgroup.com.cn

userName=liu.yijie

password=lyj2009

fromEmail=liu.yijie

toEmail=liu.yijie@iesgroup.com.cn

subject=Asset monthly report

reportPath=C://devices.xls

 

至此,我们就可以定时发送带附件的邮件了发送

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值