一步步搭建一个完整的web项目(二):定时任务及邮件发送功能

在web项目中,定时任务和邮件发送功能是非常常见的,所以这里我将这两个功能添加进去。

内容:每五分钟发送一封邮件给用户(QQ邮箱发送给163邮箱,并且抄送一份给QQ邮箱)。

本次需要导入的jar包为:

    mail-1.4.jar

    quartz-2.2.3.jar

    quartz-jobs-2.2.3.jar



首先,将发送邮件的JOB类完成,同样,注释非常详细,如果有看不太明白的,可以留言咨询。

SendMailJob.java

/**
	 * 邮件自动发送入口
	 */
	public void init(){
    	
        SendMailJob.send("toMail@163.com", "标题:newbie邮件测试", "内容:邮件测试", "smtp", "smtp.qq.com", "sendMail@qq.com", "端口号", "sendMail", "password");
    }
	
	 /**
     * QQ邮箱发送邮件到163邮箱
     * 
     * @param toMail 收件人
     * @param subject 主题
     * @param content 内容
     * @param smtp 协议
     * @param fromHost 发送方的服务器
     * @param sendName 邮件发送人
     * @param sendPort 邮件发送人端口(可以不指定)
     * @param userName 邮件发送人名
     * @param userPwd 邮件发送人密码(不是邮箱密码,而是开启SMTP功能时候设置的那个密码)
     * @return 成功或失败
     */
    public static boolean send(String toMail, String subject, String content, String smtp, String fromHost,
            String sendName, String sendPort, String userName, String userPwd) {

        // 创建Session
        Properties props = new Properties();
        // 指定邮件的传输协议,smtp(Simple Mail Transfer Protocol 简单的邮件传输协议)
        props.put("mail.transport.protocol", smtp);
        
        // 指定邮件发送服务器服务器 "smtp.qq.com"
        props.put("mail.host", fromHost);
       
        // 指定邮件的发送人(QQ邮箱)
        props.put("mail.from", sendName);
        
        // 设置安全传输协议为true
        props.put("mail.smtp.starttls.enable", "true");
        
        // 设置需要身份验证(不验证会不通过)
        props.put("mail.smtp.auth", "true"); 
        Authentication authentication = new Authentication(userName, userPwd); 
        Session session = Session.getDefaultInstance(props,authentication);

        // 开启调试模式(能够在控制台看到日志)
        session.setDebug(true);
        try {
            // 第二步:获取发送方对象
            Transport transport = session.getTransport();
            // 连接邮件服务器,链接您的QQ邮箱,用户名(可以不用带后缀)、密码
            transport.connect(userName, userPwd);
            // 接收方地址
            Address toAddress = new  InternetAddress(toMail);

            // 第三步:创建邮件消息体
            MimeMessage message = new MimeMessage(session);
            // 设置发件人昵称
            String nick="";
            try {
                nick=javax.mail.internet.MimeUtility.encodeText("神级程序员");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            // 用上面的nick作为发件人的昵称(收到邮件,发件人那一栏的内容)
            message.setFrom(new InternetAddress(nick+" <"+sendName+">"));
            // 直接用发件人的邮箱作为发件人那一栏的内容
//            message.setFrom(new InternetAddress(sendName));
            
            // 邮件的主题
            message.setSubject(subject);
            // 收件人
            message.addRecipient(Message.RecipientType.TO, toAddress); 
            // 抄送人
            Address ccAddress = new InternetAddress("493059742@qq.com"); 
            message.addRecipient(Message.RecipientType.CC, ccAddress);
            // 邮件的内容(最简单的方法,纯文本邮件内容)
//            message.setContent(content, "text/html;charset=utf-8");
            
            // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件  
            Multipart multipart = new MimeMultipart();  
            
            // 添加邮件正文  (如果没有附件,可以直接这样设置)
            BodyPart contentPart = new MimeBodyPart();  
            contentPart.setContent(content, "text/html;charset=utf-8");  
            multipart.addBodyPart(contentPart);  
            
            // 添加附件的内容  
            BodyPart attachmentPart = new MimeBodyPart();
            File file = new File("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt");
            DataSource source = new FileDataSource(file);
            // 将文件资源添加到邮件体中,并设定附件名
            attachmentPart.setDataHandler(new DataHandler(source));
            attachmentPart.setFileName(MimeUtility.encodeWord(file.getName()));  
            multipart.addBodyPart(attachmentPart);  
            message.setContent(multipart);
            message.saveChanges();  
            
            // 邮件发送时间
            message.setSentDate(new Date());

            // 第四步:发送邮件
            // 第一个参数:邮件的消息体
            // 第二个参数:邮件所有的接收人/抄送人
            transport.sendMessage(message, message.getAllRecipients());
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }


任务类写好后,需要将这个JOB类添加到配置文件中去。

quartz-job.xml

<!-- 邮件自动发送JOB  begin -->
	<!-- 定义JOB类 -->
	<bean id="getStockMoneyDirectionActualJob" class="com.leq.stock.moneydirection.job.GetStockMoneyDirectionActualJob"></bean>
	<!-- 指定JOB执行的方法 -->
	<bean id="methodGetStockMoneyDirectionActualJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!-- 定时执行的类 -->
        <property name="targetObject" ref="getStockMoneyDirectionActualJob"/>
        <!-- 具体的方法 -->
        <property name="targetMethod" value="init"/>
    </bean>
	<!-- 调度触发器,设置自己想要的时间规则 -->
    <bean id="timeGetStockMoneyDirectionActualTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <!-- 加入相关的执行类和方法 -->
        <property name="jobDetail" ref="methodGetStockMoneyDirectionActualJob"/>
        <!-- 设置时间规则  -->
        <property name="cronExpression" value="0 0/1 * ? * *"/>    
    </bean>
    <!-- 加入调度工厂 ,设置调度触发器即可-->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="timeGetStockMoneyDirectionActualTrigger"/>
            </list>
        </property>
    </bean>
<!-- 邮件自动发送JOB  end -->


配置文件配好后,需要在服务器启动的时候就加载这个配置文件。

上一篇有web.xml的配置详情,这里讲quartz-job.xml添加进去。

web.xml

<!-- 加载Spring容器配置 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- 设置Spring容器加载所有的配置文件的路径 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext*.xml,classpath:quartz-job.xml</param-value>
	</context-param>
好了,大功告成!
定时自动发送邮件服务使用说明 该软件运行环境需要.Net 3.5支持,Win7系统上可以直接运行. 主要功能可以定时自动发送邮件,发送程序做成服务形式,用户无需登录, 只要电脑是开启状态,就自动执行发送邮件. 包含的文件, 1.AutoSendMail.exe --设置程序 2.AutoSendMail_Log.txt --存放日志的文本文件. 可自动生成 3.AutoSendMail_Setting.xml --配置文件 4.AutoSendMailService.exe --服务程序 5.InstallUtil.exe --微软的安装服务必须程序 6.tasks.mdb --Access数据库文件,用于存放邮箱内容. 可更改文件 7.安装服务.bat 8.使用说明.txt 9.卸载服务.bat 安装步骤: 第一步:安装服务 运行“安装服务.bat”文件。(需要管理员权限) 第步:修改配置文件 修改好配置文件AutoSendMail_Setting.xml。确保Access数据库连接正确,每个任务的发送时点,和邮件信息。 每次修改配置文件必需重新启动服务才生效。 第三步:启动服务 a.从服务管理控制台启动服务,运行services.msc命令打开控制台。 b.通过设置程序启动服务。(需要管理员权限) 如果删除服务,则运行“卸载服务.bat”。 接口定义: 每个任务需要在指定的Access数据库里设置一个视图或表,用于存放邮件信息, 字段格式: 第一字段:ID 自动编号 第字段:收件人 文本类型 第三字段:抄送人 文本类型 第四字段:主题 文本类型 第五字段:内容 备注类型 第六字段:发送次数 数字类型 备注:程序通过ID查找记录,来更新发送次数的值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值