spring简单实现邮件任务调度

来源:互联网 发布:电力市场占有率算法 编辑:程序博客网 时间:2024/06/06 02:00

虽然是叫简单实现,但对我来说确实花了一番功夫,可想而知自己对新事物的学习能力,或者说英语理解能力还需要很大提高。现说一下自己碰到的几个大坑(小坑不说了,太多记不清了)。1.在applicationContext.xml中配置MethodInvokingJobDetailFactoryBean的时候我误以为可以直接配targetClass=XX.class,但任务就是不会自动执行。2.在调用任务方法的时候我取bean的时候写成ApplicationContext context = new ClassPathXmlApplicationContext("applicationcontext.xml");MailSenderService mailSender = (MailSenderService) context.getBean("mailsenderService");导致了可悲的结果,任务被重复创建,无数次的发送邮件,最后阿里云把我发送邮件的功能都停止了5分钟尴尬。其他的不说了,头有点昏,上代码吧!

applicationContext.xml<!-- <context:component-scan base-package="com.gewb"></context:component-scan> --><!-- mail配置文件 --><bean name="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><list><value>classpath:mail.properties</value></list></property></bean><!-- 基本的mail发送类 --><bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"><property name="host" value="${mail.host}" /><property name="username" value="${mail.username}" /><property name="password" value="${mail.password}" /><property name="defaultEncoding" value="UTF-8"></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">true</prop> <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> <prop key="mail.smtp.socketFactory.fallback">false</prop> --></props></property></bean><!-- 定义mail消息,应该不是必须 --><bean id="simpleMailMessage" class="org.springframework.mail.SimpleMailMessage"scope="prototype"><property name="from"><value>${mail.default.from}</value></property></bean><!-- 引用模板vm需要用到的类 --><bean id="velocityEngine"class="org.springframework.ui.velocity.VelocityEngineFactoryBean"><property name="velocityProperties"><props><prop key="resource.loader">class</prop><prop key="class.resource.loader.class">org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader</prop><prop key="velocimacro.library"></prop></props></property></bean><!-- 自己实现的方法 --><bean id="mailsenderService" class="com.gewb.service.MailSenderService"><property name="mailSender" ref="mailSender" /><property name="simpleMailMessage" ref="simpleMailMessage" /><property name="velocityEngine" ref="velocityEngine" /></bean><!-- 方式二:使用MethodInvokingJobDetailFactoryBean,任务类可以不实现Job接口,通过targetMethod指定调用方法 --><!-- 定义目标bean和bean中的方法 --><!-- 需要调用方法的类 --><bean id="quartzTest" class="com.gewb.test.MailTest"><property name="mailSenderService" ref="mailsenderService"></property></bean><!-- 方法调用基类 --><bean id="SpringQtzJobMethod"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="quartzTest"><!-- <bean class="com.gewb.service.MailSenderService"></bean> --></property><!-- 要执行的方法名称 --><property name="targetMethod" value="quartzTest"></property> </bean><!-- ======================== 调度触发器,每到指定时间触发 ======================== --><bean id="CronTriggerBean"class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><property name="jobDetail" ref="SpringQtzJobMethod"></property><property name="cronExpression" value="0/30 * * * * ?"></property></bean><!-- 简单触发器,每隔5秒执行一次任务 -->  <!--   <bean id="simpleTrigger"                 class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">        <property name="jobDetail" ref="SpringQtzJobMethod" />        <property name="repeatInterval" value="5000" />        <property name="startDelay" value="1000" />    </bean> --><!-- ======================== 调度工厂 ======================== --><bean id="SpringJobSchedulerFactoryBean"class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref bean="CronTriggerBean" /></list></property><!-- <property name="jobDetails">            <list>                <ref bean="SpringQtzJobMethod" />            </list>        </property> --></bean>

mail.properties
mail.host=smtp.mail.aliyun.commail.port=25  mail.username=怎么可能告诉你mail.password=怎么可能告诉你mail.smtp.auth=true  mail.smtp.timeout=10000mail.default.from=怎么可能告诉你

mail.vm亲爱的${username}    欢迎加入!     当您收到这封信的时候,您已经可以正常登录了。  请点击链接登录首页:${url}  如果您的email程序不支持链接点击,请将上面的地址拷贝至您的浏览器(如IE)的地址栏进入。    如果您还想申请管理员权限,可以联系管理员${email}    我们对您产生的不便,深表歉意。    希望您在这里度过快乐的时光!        -----------------------         (这是一封自动产生的email,请勿回复。) 


MailSenderServicepublic JavaMailSender getMailSender() {return mailSender;}public void setMailSender(JavaMailSender mailSender) {this.mailSender = mailSender;}public SimpleMailMessage getSimpleMailMessage() {return simpleMailMessage;}public void setSimpleMailMessage(SimpleMailMessage simpleMailMessage) {this.simpleMailMessage = simpleMailMessage;}public VelocityEngine getVelocityEngine() {return velocityEngine;}public void setVelocityEngine(VelocityEngine velocityEngine) {this.velocityEngine = velocityEngine;}private JavaMailSender mailSender; //spring配置中定义private SimpleMailMessage simpleMailMessage; //spring配置中定义  private VelocityEngine velocityEngine;//spring配置中定义 //spring配置中定义private String from;  //发件人private String to;   //收件人private String subject;  //邮件主题private String content;  //邮件内容private String templateName; //引用模板名private boolean validate = false; //是否需要验证public String getFrom() {return from;}public void setFrom(String from) {this.from = from;}public String getTo() {return to;}public void setTo(String to) {this.to = to;}public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getTemplateName() {return templateName;}public void setTemplateName(String templateName) {this.templateName = templateName;}public boolean isValidate() {return validate;}public void setValidate(boolean validate) {this.validate = validate;}/**      * 发送模板邮件      *      */      public void sendWithTemplate(Map model){        //    simpleMailMessage.setFrom(getFrom());    simpleMailMessage.setTo(getTo());    simpleMailMessage.setSubject(getSubject());        String text = null;try {text = VelocityEngineUtils.mergeTemplateIntoString(getVelocityEngine(), this.getTemplateName(), "UTF-8",model);} catch (VelocityException e) {e.printStackTrace();}         simpleMailMessage.setText(text);    mailSender.send(simpleMailMessage);    }        /**      * 发送普通文本邮件      *      */      public void sendText(){       // mailSender = this.getMailSender();           simpleMailMessage.setTo(this.getTo()); //接收人             simpleMailMessage.setFrom(simpleMailMessage.getFrom()); //发送人,从配置文件中取得           simpleMailMessage.setSubject(this.getSubject());         simpleMailMessage.setText(this.getContent());         mailSender.send(simpleMailMessage);      }        /**      * 发送普通Html邮件      *      */      public void sendHtml(){          // mailSender = this.getMailSender();    // 调用MimeMessageHelper辅助类        MimeMessage mimeMessage = mailSender.createMimeMessage();          MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);          try {              messageHelper.setTo(this.getTo());              messageHelper.setFrom(simpleMailMessage.getFrom());            messageHelper.setSubject(this.getSubject());            messageHelper.setText(this.getContent(),true);      //true使用html格式          } catch (MessagingException e) {            e.printStackTrace();        }          mailSender.send(mimeMessage);      }          /**      * 发送普通带一张图片的Html邮件      *      */      public void sendHtmlWithImage(String imagePath){          //mailSender = this.getMailSender();          MimeMessage mimeMessage = mailSender.createMimeMessage();          try {              MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true);              messageHelper.setTo(this.getTo());              messageHelper.setFrom(simpleMailMessage.getFrom());              messageHelper.setSubject(this.getSubject());              messageHelper.setText(this.getContent(),true);  //          Content="<html><head></head><body><img src=\"cid:image\"/></body></html>";              //图片必须这样子:<img src='cid:image'/>            FileSystemResource img = new FileSystemResource(new File(imagePath));              messageHelper.addInline("im",img);          } catch (MessagingException e) {              e.printStackTrace();          }          mailSender.send(mimeMessage);      }              /**      * 发送普通带附件的Html邮件      *      */      public void sendHtmlWithAttachment(String filePath){    SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");    String data = format.format(new Date());    System.out.println("邮件发送程序开始:" + data);            // mailSender = this.getMailSender();        MimeMessage mimeMessage = mailSender.createMimeMessage();          try {              MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true);              messageHelper.setTo(this.getTo());              messageHelper.setFrom(simpleMailMessage.getFrom());              messageHelper.setSubject(this.getSubject());            messageHelper.setText(this.getContent(),true);              FileSystemResource file = new FileSystemResource(new File(filePath));              messageHelper.addAttachment(file.getFilename(),file);          } catch (MessagingException e) {              e.printStackTrace();          }          mailSender.send(mimeMessage);      }

MailTestprivate MailSenderService mailSenderService;public MailSenderService getMailSenderService() {return mailSenderService;}public void setMailSenderService(MailSenderService mailSenderService) {this.mailSenderService = mailSenderService;}public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationcontext.xml");MailSenderService mailSender = (MailSenderService) context.getBean("mailsenderService");mailSender.setTo(******); //收件人mailSender.setSubject("测试邮件!"); //邮件主题//mailSender.setTemplateName("mail.vm"); //引用的模板//mailSender.setContent("<html><head></head><body>发送附件测试<br><img src=\"cid:image\"/></body></html>"); //发送图片mailSender.setContent("附件测试!");//Map model=new HashMap(); //设置页面参数//model.put("username", "Bingo");//model.put("url", "www.gewb.com.cn");//model.put("email", ******);//mailSender.sendWithTemplate(model);//mailSender.sendText();//mailSender.sendHtml();//mailSender.sendHtmlWithImage("D:\\workspace\\velocityQuartz\\velocityQuartz\\src\\main\\resources\\eg_tulip.jpg");//mailSender.sendHtmlWithAttachment("C:\\Users\\Administrator\\Desktop\\公司网络设置.PNG");System.out.println("邮件发送成功!");}public void quartzTest() {//ApplicationContext context = new ClassPathXmlApplicationContext("applicationcontext.xml");//MailSenderService mailSender = (MailSenderService) context.getBean("mailsenderService");//SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");//    String data = format.format(new Date());//    System.out.println(data);System.out.println("i am coming");mailSenderService.setTo("******"); //收件人mailSenderService.setSubject("测试邮件!"); //邮件主题mailSenderService.setContent("这是一封定时任务发送的文件!");mailSenderService.sendHtmlWithAttachment("C:\\Users\\Administrator\\Desktop\\公司网络设置.PNG");}



大哭大哭大哭不说了,都是泪啊~~~~



0 0
原创粉丝点击