Spring,Quartz和JavaMail集成教程

Quartz是一个作业调度框架,用于调度要在指定的时间表上执行的作业。JavaMail是一个用于从Java应用程序发送/接收电子邮件的API。

Spring具有集成点,可以集成Quartz和JavaMail,从而使这些API易于使用。 让我们创建一个小型演示应用程序,以展示如何集成Spring + Quartz + JavaMail。

我们的应用程序是每天早上6点向朋友发送生日祝福电子邮件。

Email.java

package com.sivalabs.reminders;import java.util.ArrayList;
import java.util.List;public class Email
{private String from;private String[] to;private String[] cc;private String[] bcc;private String subject;private String text;private String mimeType;private List<Attachment> attachments = new ArrayList<Attachment>();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[] getCc(){return cc;}public void setCc(String... cc){this.cc = cc;}public String[] getBcc(){return bcc;}public void setBcc(String... bcc){this.bcc = bcc;}public String getSubject(){return subject;}public void setSubject(String subject){this.subject = subject;}public String getText(){return text;}public void setText(String text){this.text = text;}public String getMimeType(){return mimeType;}public void setMimeType(String mimeType){this.mimeType = mimeType;}public List<Attachment> getAttachments(){return attachments;}public void addAttachments(List<Attachment> attachments){this.attachments.addAll(attachments);}public void addAttachment(Attachment attachment){this.attachments.add(attachment);}public void removeAttachment(int index){this.attachments.remove(index);}public void removeAllAttachments(){this.attachments.clear();}
}

Attachment.java

package com.sivalabs.reminders;public class Attachment
{private byte[] data;private String filename;private String mimeType;private boolean inline;public Attachment(){}public Attachment(byte[] data, String filename, String mimeType){this.data = data;this.filename = filename;this.mimeType = mimeType;}public Attachment(byte[] data, String filename, String mimeType, boolean inline){this.data = data;this.filename = filename;this.mimeType = mimeType;this.inline = inline;}public byte[] getData(){return data;}public void setData(byte[] data){this.data = data;}public String getFilename(){return filename;}public void setFilename(String filename){this.filename = filename;}public String getMimeType(){return mimeType;}public void setMimeType(String mimeType){this.mimeType = mimeType;}public boolean isInline(){return inline;}public void setInline(boolean inline){this.inline = inline;}}

EmailService.java

package com.sivalabs.reminders;import java.util.List;import javax.activation.DataSource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.mail.util.ByteArrayDataSource;import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;public class EmailService
{private JavaMailSenderImpl mailSender = null;public void setMailSender(JavaMailSenderImpl mailSender){this.mailSender = mailSender;}public void sendEmail(Email email) throws MessagingException {MimeMessage mimeMessage = mailSender.createMimeMessage();// use the true flag to indicate you need a multipart messageboolean hasAttachments = (email.getAttachments()!=null &&email.getAttachments().size() > 0 );MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, hasAttachments);helper.setTo(email.getTo());helper.setFrom(email.getFrom());helper.setSubject(email.getSubject());helper.setText(email.getText(), true);List<Attachment> attachments = email.getAttachments();if(attachments != null && attachments.size() > 0){for (Attachment attachment : attachments){String filename = attachment.getFilename() ;DataSource dataSource = new ByteArrayDataSource(attachment.getData(),attachment.getMimeType());if(attachment.isInline()){helper.addInline(filename, dataSource);}else{helper.addAttachment(filename, dataSource);}}}mailSender.send(mimeMessage);}
}

BirthdayWisherJob.java

package com.sivalabs.reminders;import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;import javax.mail.MessagingException;import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.quartz.QuartzJobBean;public class BirthdayWisherJob extends QuartzJobBean
{private EmailService emailService;public void setEmailService(EmailService emailService){this.emailService = emailService;}@Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException{System.out.println("Sending Birthday Wishes... ");List<User> usersBornToday = getUsersBornToday();for (User user : usersBornToday){try{Email email = new Email();email.setFrom("admin@sivalabs.com");email.setSubject("Happy BirthDay");email.setTo(user.getEmail());email.setText("<h1>Dear "+user.getName()+",Many Many Happy Returns of the day :-)</h1>");byte[] data = null;ClassPathResource img = new ClassPathResource("HBD.gif");InputStream inputStream = img.getInputStream();data = new byte[inputStream.available()];while((inputStream.read(data)!=-1));Attachment attachment = new Attachment(data, "HappyBirthDay","image/gif", true);email.addAttachment(attachment);emailService.sendEmail(email);}catch (MessagingException e){e.printStackTrace();}catch (Exception e){e.printStackTrace();}}}private List<User> getUsersBornToday(){List<User> users = new ArrayList<User>();User user1 = new User("Siva Prasad", "sivaprasadreddy.k@gmail.com", new Date());users.add(user1);User user2 = new User("John", "abcd@gmail.com", new Date());users.add(user2);return users;}
}

applicationContext.xml

<beans><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref bean="birthdayWisherCronTrigger" /></list></property></bean><bean id="birthdayWisherCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="birthdayWisherJob" /><!-- run every morning at 6 AM --><property name="cronExpression" value="0/5 * * * * ?" /></bean><bean name="birthdayWisherJob" class="org.springframework.scheduling.quartz.JobDetailBean"><property name="jobClass" value="com.sivalabs.reminders.BirthdayWisherJob" /><property name="jobDataAsMap"><map><entry key="emailService" value-ref="emailService"></entry></map></property></bean><bean id="emailService" class="com.sivalabs.reminders.EmailService"><property name="mailSender" ref="mailSender"></property></bean><bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"><property name="defaultEncoding" value="UTF-8"/><property name="host" value="smtp.gmail.com" /><property name="port" value="465" /><property name="protocol" value="smtps" /><property name="username" value="admin@gmail.com"/><property name="password" value="*****"/><property name="javaMailProperties"><props><prop key="mail.smtps.auth">true</prop><prop key="mail.smtps.starttls.enable">true</prop><prop key="mail.smtps.debug">true</prop></props></property></bean></beans>

TestClient.java

package com.sivalabs.reminders;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestClient {public static void main(String[] args){ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); }}

参考:我的JCG合作伙伴 Siva的“ Spring + Quartz + JavaMail集成教程” ,在My Experiments on Technology博客上 。

相关文章 :
  • 使用Spring使用Java发送电子邮件– GMail SMTP服务器示例
  • Spring MVC开发–快速教程
  • GWT 2 Spring 3 JPA 2 Hibernate 3.5教程
  • Spring MVC3 Hibernate CRUD示例应用程序

翻译自: https://www.javacodegeeks.com/2011/06/spring-quartz-javamail-tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java_Web三大框架之Hibernate操作数据库(三)

使用Hibernate操作数据库需要七个步骤&#xff1a;&#xff08;1&#xff09;读取并解析配置文件Configuration conf newConfiguration().configure(); &#xff08;2&#xff09;读取并解析映射信息&#xff0c;创建SessionFactorySessionFactory sf conf.buildSessionFacto…

android布局1

第二类&#xff1a;属性值必须为id的引用名“id/id-name” 仅RelativeLayout中有效 android:layout_below 在某元素的下方 android:layout_above 在某元素的的上方 android:layout_toLeftOf 在某元素的左边 android:layout_toRightOf 在某元素的右…

Spring MVC开发–快速教程

这是我们的JCG合作伙伴之一&#xff0c;来自Manoj的有关使用Spring开发Web应用程序的简短教程&#xff0c; 网址为“ The Khangaonkar Report ”。 &#xff08;注意&#xff1a;对原始帖子进行了少量编辑以提高可读性&#xff09; Spring MVC使用基于模型视图控制器体系结构&…

spring mvc controller间跳转 重定向 传参

url&#xff1a;http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ 1. 需求背景 需求&#xff1a;spring MVC框架controller间跳转&#xff0c;需重定向。有几种情况&#xff1a;不带参数跳转&#xff0c;带参数拼接url形式跳转&#xff0c;带参数不拼接参…

寻找数组的中心索引

给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为在下标的左侧不存在元素。这一点…

STL sector 应用

1 #include <iostream>2 #include <string>3 #include <vector>4 #include <cstdio>5 using namespace std;6 int n;7 vector<int> pile[30];8 9 //找到a所在pile和height&#xff0c;以应用的形式返回调用者&#xff0c; 10 void find_block(in…

将Jersey与Spring整合

Spring提供了很多好处&#xff0c;并通过其依赖项注入机制&#xff0c;应用程序生命周期管理和Hibernate支持&#xff08;仅举几例&#xff09;促进了最佳实践。 另外&#xff0c;当您想拥有干净的类似于REST的服务器端JSON Api时&#xff0c;我发现Jersey非常方便。 本文简要介…

JAVAWEB 生成excel文字在一格显示两位不变成#号

在用java生成excel的时候会发现这种问题&#xff0c; 如果是人家给的模板还好&#xff0c;如果不是模板&#xff0c;而是通过代码生成的话&#xff0c; 就需要进行处理了&#xff0c; 一个小单元格&#xff0c;如果是一位的话&#xff0c;如1-9显示没有问题&#xff0c;一旦是两…

力扣面试题 01.07. 旋转矩阵

给你一幅由 N N 矩阵表示的图像&#xff0c;其中每个像素的大小为 4 字节。请你设计一种算法&#xff0c;将图像旋转 90 度。 不占用额外内存空间能否做到&#xff1f; 代码一 思路&#xff1a;对于矩阵中第 ii 行的第 jj 个元素&#xff0c;在旋转后&#xff0c;它出现在倒数…

依赖注入–手动方式

依赖注入是一种将行为与依赖解决方案分开的技术。 用简单的话来说&#xff0c;它允许开发人员定义具有特定功能的类&#xff0c;这些功能取决于各种协作者&#xff0c;而不必定义如何获取对这些协作者的引用。 以此方式&#xff0c;实现了各个组件之间的解耦&#xff0c;并且通…

一个疏忽引发的思考!(strerror)

前几天写代码因为自己的疏忽导致一遍又一遍的Segmentation fault (core dumped)。该问题是因为strerror&#xff08;errno&#xff09;返回的指针指向非法的内存导致程序打印错误时崩溃。 尝试数次无果&#xff0c;为了进度。简单粗暴的换成了perror(str)。今天忙里偷闲&#x…

力扣面试题 01.08. 零矩阵

编写一种算法&#xff0c;若M N矩阵中某个元素为0&#xff0c;则将其所在的行与列清零 代码一思路&#xff1a; 第一次遍历时记录&#xff0c;用两个布尔类型数组标记行和列中是否有0元素&#xff1b; 第二次遍历时置零 class Solution {public void setZeroes(int[][] matr…

Java最佳实践–字符串性能和精确字符串匹配

在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将讨论String性能调优。 我们将专注于如何有效地处理字符串创建&#xff0c; 字符串更改和字符串匹配操作。 此外&#xff0c;我们将提供我们自己的用于精确字符串匹配的最常用算法的…

mac下开发环境常用操作与命令

【1】 修改hosts文件 vim /private/etc/hosts转载于:https://www.cnblogs.com/zsmynl/p/4714492.html

keil里面填数据

编译后寄存器和堆栈的内存数据可以直接写进去的。 寄存器&#xff0c;双击就可以&#xff0c;注意里面是十六进制 堆栈&#xff0c;也是十六进制&#xff0c;八位的 00 00 00 00 &#xff0c;但这个是从右到左的&#xff0c;比如0x00000006 应该填 06 00 00 00 把数据取出来 取…

力扣498. 对角线遍历

给你一个大小为 m x n 的矩阵 mat &#xff0c;请以对角线遍历的顺序&#xff0c;用一个数组返回这个矩阵中的所有元素。 代码思路&#xff1a;以第一行和右边最后一列作为每轮的开始元素&#xff0c;先用temp存储&#xff0c;全部按 从左上到右下 的顺序遍历&#xff0c;但是…

调试生产服务器– Eclipse和JBoss展示

您是否编写有错误的代码&#xff1f; 不&#xff0c;当然不。 对于我们其余的确实会编写带有错误的代码的凡人&#xff0c;我想解决一个非常敏感的问题&#xff1a;调试在生产服务器上运行的应用程序。 因此&#xff0c;您的应用程序已准备好进行部署。 单元测试全部成功&…

ubuntu server获取并自动设置最快镜像的方法

一&#xff0c;安装方法1 add-apt-repository ppa:ossug-hychen/getfastmirrorapt-get install getfastmirror 如果添加了临时源&#xff0c;这样移除add-apt-repository --remove ppa:ossug-hychen/getfastmirror 二&#xff0c;安装方法2 wget -O getfastmirror-master.zip h…

linux之x86裁剪移植---ffmpeg的H264解码显示(420、422)

在虚拟机上yuv420可以正常显示 &#xff0c;而945&#xff08;D525&#xff09;模块上却无法显示 &#xff0c;后来验证了directdraw的yuv420也无法显示 &#xff0c;由此怀疑显卡不支持 &#xff0c;后把420转换为422显示。420显示如下&#xff1a;/* 编译命令&#xff1a;arm…

Spring依赖注入技术的发展

回顾Spring框架的历史&#xff0c;您会发现实现依赖注入的方式在每个发行版中都在增加。 如果您使用该框架已经超过一个月&#xff0c;那么在这篇回顾性文章中可能不会发现任何有趣的东西。 除了Scala中的最后一个示例&#xff0c;没有其他希望&#xff0c;这种语言在Spring中意…