`

手把手教你 ,spring定时发送邮件

阅读更多

我这里只是一个简单的例子,也是在网上找到的一个邮件发送的例子,然后自己修改成了quartz定时发送,下面有源代码大家可以下载,可以根据需要进行修改。

第一步:建立一个web Project

 

加入必须的包 到lib中  

    activation-1.1.jar

    mail-1.4.jar
    commons-collections-3.2.jar
    commons-lang-2.5.jar
    commons-logging-1.1.jar
    quartz-1.6.1.jar
    spring-2.5.jar
    spring-context-support-2.5.6.jar
    spring-web-2.5.6.jar
    velocity-1.6.4.jar

 最好不要用myeclipse自带的包,可能会有冲突。

 

 

第二步:配置web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  
   <listener>
	  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
	  <param-name>contextConfigLocation</param-name>
	  <param-value>classpath:applicationContext.xml</param-value>
	 </context-param>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

我这里applicationContext.xml就直接放在了classpath下

文件目录如图:

 

第三步:加入所需要的配置文件

   applicationContext.xml   :

 

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
	xmlns:tx="http://www.springframework.org/schema/tx">
	
	<!-- 属性文件加载 -->
	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				 <value>classpath:mail.properties</value>
				<!--<value>WEB-INF/mail.properties</value> -->
			</list>
		</property>
	</bean>

	<!-- 邮件发送器 -->
	<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>
			</props>
		</property>
	</bean>
	<!--velocity模板引擎 -->
	<bean id="velocityEngine"
		class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
		<property name="resourceLoaderPath" value="classpath:velocity"></property>
	</bean>

	<bean id="mailUtil" class="com.ryt.mail.MailUtil">
		<property name="javaMailSender" ref="mailSender"></property>
		<property name="from" value="${mail.from}"></property>
		<property name="encoding" value="UTF-8"></property>
		<property name="templateLocation" value="hello.vm"></property>
		<property name="velocityEngine" ref="velocityEngine"></property>
		<property name="title" value="youTitle"></property>
	</bean>
   <!-- *****定时任务开始************************************************* -->
        <bean id="JobServiceImpl" class="com.ryt.mail.MailManager" >
       		 <property name="mailUtil" ref="mailUtil"></property>
        </bean>
        <!-- -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
            <bean class="org.springframework.scheduling.quartz.CronTriggerBean">
                    <property name="jobDetail">
                        <bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
                            <property name="targetObject" ref="JobServiceImpl" />
                            <property name="targetMethod" value="sendMail" />
                        </bean>
                    </property>
                    <property name="cronExpression" value="0 0 12 * * ?" />
                </bean>
            </list>
        </property>
    </bean>
    
</beans>

  

mail.properties   :

修改成你的邮箱吧,注意哦。邮箱设置里面要:开启POP3/SMTP服务 

如:qq邮箱-->邮箱设置-->账户-->POP3/IMAP/SMTP服务-->开启POP3/SMTP服务 

mail.from=youMail@qq.com
mail.host=smtp.qq.com
mail.password=youPassword
mail.smtp.auth=true
mail.smtp.timeout=25000
mail.username=youUserName

 

log4j.properties (根据你的需要添加,也 可以不要) :

log4j.rootLogger=info, A1,logfile  

#log4j.rootLogger=INFO,A1,R
# ConsoleAppender
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%F:%L] [%p] - %m%n
##logfile
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=${catalina.base}/logs/proj.log 
log4j.appender.logfile.DatePattern='_'yyyyMMdd'.log'
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%F:%L] [%p] - %m%n

 

第四步:编写邮件发送器

 

package com.ryt.mail;

import java.util.Map;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.VelocityException;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.velocity.VelocityEngineUtils;

/**
 * 邮件发送器
 */
public class MailUtil {

    protected final Log log = LogFactory.getLog(getClass());
    
    private JavaMailSender javaMailSender;
    private VelocityEngine velocityEngine;
    private String from;
    private String title;
    private String encoding;
    private String templateLocation;
    private String[] toEmails;
    private Map<String,String> model;

    public boolean send(){
        try {
			MimeMessage msg = javaMailSender.createMimeMessage();
			MimeMessageHelper message = new MimeMessageHelper(msg, true, "UTF-8");
            message.setFrom(from);
            message.setSubject(title);
            message.setTo(toEmails);
			message.setText(getMessage(), true); // 如果发的不是html内容去掉true参数
			message.addAttachment("testMyImg.gif", new ClassPathResource("doc/myImg.gif"));
//			message.addAttachment("Erlang-ch.pdf", new ClassPathResource("doc/Erlang-ch.pdf")); //添加附件
//			message.addInline("myLogo.gif",new ClassPathResource("doc/myImg.gif"));
//			System.out.println(System.getProperty("java.class.path"));
			javaMailSender.send(msg);
            
        } catch (MessagingException e) {
        	e.printStackTrace();
            if(log.isWarnEnabled()) {
                log.warn("邮件信息导常! 邮件标题为: "+title);
            }
            return false;
        } catch (MailException me) {
        	me.printStackTrace();
            if(log.isWarnEnabled()) {
                log.warn("发送邮件失败! 邮件标题为: "+title);
            }
            return false;
        }
        return true;    
    }
    
    
    /**
     * 邮件模板中得到信息
     * @return 返回特发送的内容
     */
    private String getMessage() {
        try {
			return VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, templateLocation, encoding, model);
		} catch (VelocityException e) {
			e.printStackTrace();
			log.error("邮件模板读取失败!邮件标题为: "+title);
		}
		return "";
    }

    private String[] createToEmail(String to) {
        return new String[] {to};
    }
    
    public void setToEmail(String to) {
        setToEmails(createToEmail(to));
    }
    
    public void setJavaMailSender(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }
    
    public void setVelocityEngine(VelocityEngine velocityEngine) {
        this.velocityEngine = velocityEngine;
    }

    public void setEncoding(String encoding) {
        this.encoding = encoding;
    }

    public void setModel(Map<String,String> model) {
        this.model = model;
    }

    public void setTemplateLocation(String templateLocation) {
        this.templateLocation = templateLocation;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setToEmails(String[] toEmails) {
        this.toEmails = toEmails;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getTemplateLocation() {
        return templateLocation;
    }
}

写一个Velocity模板hello.vm:放在velocity下

 

${username},您好,欢迎来到<a href="http://i.firefoxchina.cn/" target="_blank">欢迎来到firfox</a>!

 

接下来 测试一下吧

public class TestMailSend {
	
	public static void main(String[] args) {
		MailUtil mailUtil = (MailUtil) new ClassPathXmlApplicationContext("applicationContext.xml").getBean("mailUtil");
		Map<String, String> data = new HashMap<String, String>();
		data.put("username", "mir liu");
		mailUtil.setTemplateLocation("hello.vm");
		mailUtil.setModel(data);
		mailUtil.setToEmail("346435400@qq.com");
		mailUtil.setTitle("mail with veloctiy and spring");
		System.out.println("发送中请等待.....");
		mailUtil.send();
		System.out.println("发送成功.....");
	}
}

 

 测试通过的话我们接下来就开始写quartz 触发器调用的类了:

 

package com.ryt.mail;

import java.util.HashMap;
import java.util.Map;

public class MailManager {
	MailUtil mailUtil;
	
	public void setMailUtil(MailUtil mailUtil) {
		this.mailUtil = mailUtil;
	}

	public void sendMail(){
		Map<String, String> data = new HashMap<String, String>();
		data.put("username", "mir liu");
		mailUtil.setTemplateLocation("hello.vm");
		mailUtil.setModel(data);
		mailUtil.setToEmail("346435400@qq.com");
		mailUtil.setTitle("auto send mail with veloctiy and spring!!!");
		boolean isSuccess=mailUtil.send();
		if(isSuccess)
		   System.out.println("quartz 发送成功.....");
		else
		   System.out.println("发送失败!!!");
	}
}

 

 那么这个怎么测试呢?把这个部分改成你电脑 马上要到的时间

  <property name="cronExpression" value="0 0 12 * * ?" />

 

这个是Quartz的cron表达式 ,该怎么改还是baidu一下吧

 

所有环节都完成。

  • 大小: 11.7 KB
分享到:
评论
1 楼 bbwodni 2012-06-11  
呵呵!3Q,感觉还可以!

相关推荐

    手把手教你学DSP:基于TMS320F28335

    手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F...

    手把手教你学28335

    手把手教你学28335PDF文档,看了这个确实和2812有了对比

    手把手教你学dsp2812,手把手教你学dsp2812pdf下载,C,C++

    《手把手教你学DSP2812》是一本专为初学者设计的 DSP(Digital Signal Processor)学习指南,主要围绕TI公司的TMS320F2812 DSP芯片进行讲解。这本书以其全面且易懂的特性,为读者提供了一个深入理解数字信号处理及其...

    手把手教你学DSPPDF

    【标题】"手把手教你学DSPPDF"是一份针对数字信号处理(DSP)初学者的教程性PDF文档,旨在引领读者逐步掌握这一领域的基础知识。该文档可能包含了从理论概念到实际应用的全面讲解,适合那些希望踏入数字信号处理世界...

    手把手教你学DSP28335

    手把手教你学DSP28335,PDF格式,有助于随时随地可以学习知识。

    手把手教你dsp28335,高清pdf

    手把手教你学DSP28335高清pdf文件,北京航空航天大学出版社

    手把手教你学dsp

    手把手教你学dsp F2812 顾伟刚

    《手把手教你学51单片机》教材pdf

    《手把手教你学51单片机》是一本专为初学者设计的嵌入式开发入门教程,旨在帮助读者从零开始掌握51单片机的基础知识和应用技能。51单片机是嵌入式系统中最基础且广泛应用的一类微控制器,广泛应用于智能家居、工业...

    手把手教你spring hibernate struts配置与开发

    ssh的开发平台已经受到越来越多人的青睐,本文从小处着眼,手把手教你如何开始自己的ssh开发,可以说之前版本的补充,旨在教你怎样把复杂的事情简单化。

    003《老HRD手把手教你做绩效考核》.pdf

    003《老HRD手把手教你做绩效考核》.pdf

    手把手教你学51单片机-资源

    《手把手教你学51单片机》是宋雪松先生编写的一本深入浅出的单片机学习教程,特别适合初学者入门。51单片机是微控制器领域非常经典的一款芯片,由Intel公司推出,因其8051内核而得名,现在由许多厂商如Atmel、...

    struts spring hibernate ssh 三大框架集成详细步骤 手把手教你搭框架

    Struts、Spring、Hibernate,这三大框架是Java Web开发中的基石,它们的集成极大地提高了开发效率,降低了代码的复杂性。SSH(Struts + Spring + Hibernate)框架集成旨在实现MVC(Model-View-Controller)设计模式...

    手把手教你学51单片机C语言版PDF

    《手把手教你学51单片机C语言版》是一本专为初学者设计的教程,旨在帮助读者从零开始掌握51系列单片机的编程与应用。这本书由权威的电子技术教育平台www.kingst.org提供,是学习单片机C语言编程的宝贵资源。下面将...

    手把手教你学单片机(第二版) 周兴华.pdf

    手把手教你学单片机(第二版) 周兴华.pdf

    手把手教你DSP配套资料

    “手把手教你DSP配套资料”这一压缩包很可能是包含了一系列关于DSP的学习材料,可能包括教程文档、示例代码、实验指导等。通过这些资料,你可以深入理解DSP的基本原理、算法和应用,逐步掌握实际操作技能,为你的...

    《手把手教你学dsp2812》顾卫刚.PDF

    根据给出的文件信息,《手把手教你学dsp2812》是顾卫刚所著的一本关于DSP2812的教材书籍。DSP2812指的是德州仪器(Texas Instruments,简称TI)的TMS320F2812数字信号处理器。TMS320F2812是一款32位的高性能数字信号...

    手把手教你如何从一无所有到财务自由.pdf

    "手把手教你如何从一无所有到财务自由.pdf" 本文主要讲述的是如何从零开始创业,到达财务自由的三个步骤。作者通过幽默诙谐的语言,浅显易懂的思维高度,指导小屁孩创业,并提供了非常好的指引方向。 第一部分:...

    《Qt5 PyQt 5实战指南-手把手教你掌握100个精彩案例》.rar

    《Qt5 PyQt 5实战指南—手把手教你掌握100个精彩案例》 《Qt5 PyQt 5实战指南—手把手教你掌握100个精彩案例》 《Qt5 PyQt 5实战指南—手把手教你掌握100个精彩案例》

Global site tag (gtag.js) - Google Analytics