zoukankan      html  css  js  c++  java
  • 定时发送邮件小程序

    之前写过一篇用JAVA实现邮件发送的博客,那个使用起来比较麻烦,可以参考文章:java实现邮件发送
    今天看到了Spring为我们简化了这些步骤,下面来介绍如何使用Spring和quartz来实现邮件定时发送功能。

    项目架构:

    发送邮件的服务接口:

    package com.sunflower.service;
    
    /**
     * @author Caihanyuan
     * @time 2012-10-28 上午09:55:15
     */
    public interface SendMailService {
        public void sendMail();
    }

    发送邮件的服务实现类:

     1 package com.sunflower.serviceimp;
     2 
     3 import java.util.ResourceBundle;
     4 
     5 import org.springframework.mail.SimpleMailMessage;
     6 import org.springframework.mail.javamail.JavaMailSenderImpl;
     7 
     8 import com.sunflower.service.SendMailService;
     9 
    10 /**
    11  * @author Caihanyuan
    12  * @time 2012-10-28 上午10:01:18
    13  */
    14 public class SendMailServiceImp implements SendMailService {
    15     private JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    16 
    17     public JavaMailSenderImpl getMailSender() {
    18         return mailSender;
    19     }
    20 
    21     public void setMailSender(JavaMailSenderImpl mailSender) {
    22         this.mailSender = mailSender;
    23     }
    24 
    25     private void getHostInformation() {
    26         ResourceBundle resource = ResourceBundle.getBundle("mailhost");
    27         mailSender.setHost(resource.getString("hostname"));
    28         mailSender.setPort(Integer.valueOf(resource.getString("hostport")));
    29         mailSender.setUsername(resource.getString("username"));
    30         mailSender.setPassword(resource.getString("password"));
    31     }
    32 
    33     @Override
    34     public void sendMail() {
    35         getHostInformation();
    36         SimpleMailMessage simpleMessage = new SimpleMailMessage();
    37         simpleMessage.setTo("1****@139.com");
    38         simpleMessage.setFrom(mailSender.getUsername());
    39         simpleMessage.setSubject("老师您好");
    40         simpleMessage.setText("老师你好,我的作业已经提交了,请查看");
    41 
    42         mailSender.send(simpleMessage);
    43     }
    44 }

    到目前为止,一个发送邮件的服务已经建立好了,而且可以运行,这里使用的是简单的邮件类型。Spring为我们提供了org.springframework.mail.javamail.JavaMailSenderImpl类,它封装了发送邮件的步骤,让我们使用起来更加简单。org.springframework.mail.SimpleMailMessage是简单邮件的封装类,如果要发送更复杂的邮件类型,要使用javax.mail.internet.MimeMessage类和org.springframework.mail.javamail.MimeMessageHelper类。如何进行各种邮件类型的发送,请查看怎样使用Spring发邮件一文。
    JavaMailSenderImpl的邮件发送功能是建立在JavaMail基础之上的,所以要导入mail.jar包 。

     

    使用调度器对这个邮件发送服务进行调度:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     4     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
     5 
     6     <bean id="javaMailSenderImp" class="org.springframework.mail.javamail.JavaMailSenderImpl"></bean>
     7 
     8     <bean id="sendMailService" class="com.sunflower.serviceimp.SendMailServiceImp">
     9         <property name="mailSender">
    10             <ref bean="javaMailSenderImp" />
    11         </property>
    12     </bean>
    13 
    14     <!-- 被触发器调用,指定被调用的方法 -->
    15     <bean id="sendJob"
    16         class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    17         <property name="targetObject">
    18             <ref bean="sendMailService" />
    19         </property>
    20         <property name="targetMethod">
    21             <value>sendMail</value>
    22         </property>
    23     </bean>
    24 
    25     <!--一个简单的触发器-->
    26     <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
    27         <property name="jobDetail" ref="sendJob" />
    28         <!-- 在调度程序启动多少毫秒后启动任务 -->
    29         <property name="startDelay" value="1" />
    30         <!-- 表示每隔多少毫秒启动 -->
    31         <property name="repeatInterval" value="180000" />
    32     </bean>
    33 
    34 
    35     <!--一个定时的触发器-->
    36     <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    37         <property name="jobDetail" ref="sendJob" />
    38         <!-- 指明每天早上6点启动任务,表达式的解释见下篇文章 -->
    39         <property name="cronExpression" value="0 0 6 * * ?" />
    40     </bean>
    41     
    42     <!-- 调度器 -->
    43     <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    44         <property name="triggers">
    45             <list>
    46                 <ref bean="simpleTrigger" />
    47             </list>
    48         </property>
    49     </bean>
    50 </beans>

    ------------------------------------

    在定时触发器中<property name="cronExpression"/>属性指定何时进行触发。
    一个cron表达式有至少6个(也可能7个)由空格分隔的时间元素。从左到右,这些元素的定义如下:
    1.秒(0~59)
    2.分钟(0~59)
    3.小时(0~23)
    4.月份中的日期(1~31)
    5.月份(1~12或者JAN~DEC)
    6.星期中的日期(1~7或者SUN~SAT)
    7.年份(1970~2099)
    每一个元素都可以显式地规定一个值(如5),一个区间(如5-12),一个列表(如4,7,10),或一个通配符(如*)。“月份中的日期”和“星期中的日期”这两个元素是互斥的。因此通过设置一个问号(?)来表示你不想设置的那个字段。

    ------------------------------------

    要使用quartz实现定时操作,需要下载quartz的jar包。

     

    定时定时发送的测试:

     1 package com.sunflower.maintest;
     2 
     3 import org.quartz.SchedulerException;
     4 import org.quartz.impl.StdScheduler;
     5 import org.springframework.context.ApplicationContext;
     6 import org.springframework.context.support.ClassPathXmlApplicationContext;
     7 
     8 /**
     9  * @author Caihanyuan
    10  * @time 2012-10-28 下午02:37:10
    11  */
    12 public class SendMailTest {
    13     public static void main(String[] args) {
    14         ApplicationContext context = new ClassPathXmlApplicationContext(
    15                 "applicationContext.xml");
    16         StdScheduler scheduler = (StdScheduler) context.getBean("scheduler");
    17         
    18         try {
    19             scheduler.start();
    20         }
    21         catch (SchedulerException e) {
    22             e.printStackTrace();
    23         }
    24     }
    25 }

    项目源码下载

    一颗平常心,踏踏实实,平静对待一切
  • 相关阅读:
    牛顿迭代法
    C语言补遗
    Manjaro添加开机启动脚本
    tensorboard查看pytorch模型
    Kindle最佳排版记录
    01背包问题详解
    差分法介绍
    BFS详解
    UVA11732 "strcmp()" Anyone?
    LA3942 Remember the Word
  • 原文地址:https://www.cnblogs.com/hanyuan/p/2743698.html
Copyright © 2011-2022 走看看