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
- spring简单实现邮件任务调度
- Spring的任务调度发送邮件
- spring整合quartz实现简单的任务调度
- Spring与Quartz集成配置实现简单定时任务调度
- Spring与Quartz集成配置实现简单定时任务调度
- Quartz 集成Spring实现简单的任务调度Demo
- Spring任务调度之Spring-Task--应用实例:实现邮件(带附件)定时发送功能
- Spring 注释实现任务调度
- quartz+spring 实现任务调度
- Spring Schedule 任务调度实现
- spring+quartz实现任务调度
- Quartz 框架和cron表达式任务调度的例子(spring下实现定时发送邮件)
- Spring + Quartz 做简单的任务调度
- Spring Boot任务调度简单入门
- quartz结合spring轻松实现任务调度
- quartz结合spring轻松实现任务调度
- quartz结合spring轻松实现任务调度
- quartz结合spring轻松实现任务调度
- Unity Mecanim中AnimatorController动画转化条件设置解释
- 将web应用打包成war包
- 使用JAI扩展Java Image的功能
- Objective-c快速遍历小计
- MyBatis结果集的嵌套以及结果集的继承
- spring简单实现邮件任务调度
- elementary os配置环境
- HTTP 请求报头详解
- Spring XmlBeanFactory的Bean注册流程
- TCP/IP、Http的区别
- Appstore提交权限问题,[com.apple.developer.in-app-payments]
- Jquery的loading插件
- VirtualBox Linux虚拟机与主机SSH互联
- Servlet入门