`
c_bai
  • 浏览: 36531 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

定时发送邮件

    博客分类:
  • java
阅读更多
package com.bai.mail.utils;

import java.util.*;

import javax.mail.*;
import javax.mail.internet.*;
import java.util.Date;
import javax.activation.*;

import org.apache.log4j.Logger;



import java.io.*;

/**
 * 发送邮件
 * @author 
 *2012-4-2
 */

public class sendMail {

	private Logger log = Logger.getLogger(getClass().getName());
	
	private MimeMessage mimeMsg; // MIME邮件对象

	private Session session; // 邮件会话对象
	private Properties props; // 系统属性
	private boolean needAuth = false; // smtp是否需要认证

	private String username = ""; // smtp认证用户名和密码
	private String password = "";

	private Multipart mp; // Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象

	/** 
* 
*/
	public sendMail() {
	//setSmtpHost(getConfig.mailHost);// 如果没有指定邮件服务器,就从getConfig类中获取
		//createMimeMessage();
	}

	public sendMail(String smtp) {
		setSmtpHost(smtp);
		createMimeMessage();

	}

	/**
	 * @param hostName
	 *            String
	 */
	public void setSmtpHost(String hostName) {
		System.out.println("设置系统属性:mail.smtp.host = " + hostName);
		if (props == null)
			props = System.getProperties(); // 获得系统属性对象

		props.put("mail.smtp.host", hostName); // 设置SMTP主机
	}

	/**
	 * @return boolean
	 */
	public boolean createMimeMessage() {
		try {
			log.debug("准备获取邮件会话对象!");
			//System.out.println("准备获取邮件会话对象!");
			
			session = Session.getDefaultInstance(props, null); // 获得邮件会话对象
		} catch (Exception e) {
			System.err.println("获取邮件会话对象时发生错误!" + e);
			return false;
		}

		System.out.println("准备创建MIME邮件对象!");
		try {
			mimeMsg = new MimeMessage(session); // 创建MIME邮件对象
			mp = new MimeMultipart();
			mimeMsg.setSentDate(new Date());// 发送邮件的时间

			return true;
		} catch (Exception e) {
			System.err.println("创建MIME邮件对象失败!" + e);
			return false;
		}
	}

	/**
	 * @param need
	 *            boolean
	 */
	public void setNeedAuth(boolean need) {
		System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);
		if (props == null)
			props = System.getProperties();

		if (need) {
			props.put("mail.smtp.auth", "true");
		} else {
			props.put("mail.smtp.auth", "false");
		}
	}

	/**
	 * @param name
	 *            String
	 * @param pass
	 *            String
	 */
	public void setNamePass(String name, String pass) {
		username = name;
		password = pass;
	}

	/**
	 * @param mailSubject
	 *            String
	 * @return boolean
	 */
	public boolean setSubject(String mailSubject) {
		System.out.println("设置邮件主题!");
		try {
			mimeMsg.setSubject(mailSubject);
			return true;
		} catch (Exception e) {
			System.err.println("设置邮件主题发生错误!");
			return false;
		}
	}

	/**
	 * @param mailBody
	 *            String
	 */
	public boolean setBody(String mailBody) {
		try {
			BodyPart bp = new MimeBodyPart();
			bp.setContent("" + mailBody, "text/html;charset=utf-8");

			mp.addBodyPart(bp);

			return true;
		} catch (Exception e) {
			System.err.println("设置邮件正文时发生错误!" + e);
			return false;
		}
	}

	/**
	 * @param name
	 *            String
	 * @param pass
	 *            String
	 */
	public boolean addFileAffix(String filename) {

		System.out.println("增加邮件附件:" + filename);
		try {
			BodyPart bp = new MimeBodyPart();
			FileDataSource fileds = new FileDataSource(filename);
			bp.setDataHandler(new DataHandler(fileds));
			// bp.setFileName(fileds.getName());
			bp.setFileName(MimeUtility.encodeText(fileds.getName(), "utf-8",
					"B")); // 解决附件乱码问题

			mp.addBodyPart(bp);

			return true;
		} catch (Exception e) {
			System.err.println("增加邮件附件:" + filename + "发生错误!" + e);
			return false;
		}
	}

	/**
	 * @param name
	 *            String
	 * @param pass
	 *            String
	 */
	public boolean setFrom(String from) {
		System.out.println("设置发信人!");
		try {
			mimeMsg.setFrom(new InternetAddress(from)); // 设置发信人
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * @param name
	 *            String
	 * @param pass
	 *            String
	 */
	public boolean setTo(String to) {
		if (to == null)
			return false;
		try {
			mimeMsg.setRecipients(Message.RecipientType.TO,
					InternetAddress.parse(to));
			return true;
		} catch (Exception e) {
			return false;
		}

	}

	/**
	 * @param name
	 *            String
	 * @param pass
	 *            String
	 */
	public boolean setCopyTo(String copyto) {
		if (copyto == null)
			return false;
		try {
			mimeMsg.setRecipients(Message.RecipientType.CC,
					(Address[]) InternetAddress.parse(copyto));
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * @param name
	 *            String
	 * @param pass
	 *            String
	 */
	public boolean sendout() {
		try {
			mimeMsg.setContent(mp);
			mimeMsg.saveChanges();
			System.out.println("正在发送邮件....");

			Session mailSession = Session.getInstance(props, null);
			Transport transport = mailSession.getTransport("smtp");
			transport.connect((String) props.get("mail.smtp.host"), username,
					password);
			transport.sendMessage(mimeMsg,
					mimeMsg.getRecipients(Message.RecipientType.TO));
			// transport.send(mimeMsg);

			System.out.println("发送邮件成功!");
			transport.close();

			return true;
		} catch (Exception e) {
			System.err.println("邮件发送失败!" + e);
			return false;
		}
	}


}


QuartzJob.java
/**
 * 定时任务
 * @author 
 *2012-4-7
 */
public class QuartzJob {
	public void work()  
    {  
		//当前时间
		Calendar cal   = Calendar.getInstance();
		SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
		String datetime=sdf.format(cal.getTime());
		
		Mails  mail = new Mails();
		MailDao maildao = new MailDao();
		//获取数据库所有信息
		List  list  = maildao.getAllMails(-1, -1);
		
		for(int i=0;i<list.size();i++){
			Mails mails = (Mails)list.get(i);
			
			String birth = mails.getBirth().toString();
			//System.out.println(birth);
			if(datetime.substring(datetime.indexOf("-")+1).equals(birth.substring(birth.indexOf("-")+1))){
				
				String email = mails.getEmail().toString();
				//System.out.println(email);
				String mailbody = "生日快乐!";
				
				sendMail themail = new sendMail("smtp.qq.com");
				themail.setNeedAuth(true);
				//邮件标题
				if (themail.setSubject("标题") == false)
					return;
				//邮件信息
				if (themail.setBody(mailbody) == false)
					return;
				//收件人
				if (themail.setTo(email) == false)
					return;
				//发送邮件的人
				if (themail.setFrom("xxxxxxx@qq.com") == false)
					return;
				//邮件附件
//				if (themail.addFileAffix("d:/学生.txt") == false)
//					return;
				//发邮件的用户名和密码
				themail.setNamePass("xxxxxxxx@qq.com", "a123456");
				//判断是否发送邮件
				if (themail.sendout() == false)
					return;
			}
			else{
				System.out.println("数据库中没有客户今天生日!!!");
			}
		}
	 
    }  
}

bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>  
    <!-- 要调用的工作类 -->  
    <bean id="quartzJob" class="com.bai.mail.biz.QuartzJob"></bean>  
    <!-- 定义调用对象和调用对象的方法 -->  
    <bean id="jobtask"  
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
        <!-- 调用的类 -->  
        <property name="targetObject">  
            <ref bean="quartzJob" />  
        </property>  
        <!-- 调用类中的方法 -->  
        <property name="targetMethod">  
            <value>work</value>  
        </property>  
    </bean>  
    <!-- 定义触发时间 -->  
    <bean id="doTime"  
        class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <property name="jobDetail">  
            <ref bean="jobtask" />  
        </property>  
        <!-- cron表达式 -->  
        <property name="cronExpression">  
            <value>0 35 09 ? * *</value>  
        </property>  
    </bean>  
    <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->  
    <bean id="startQuertz" lazy-init="false" autowire="no"  
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <property name="triggers">  
            <list>  
                <ref bean="doTime" />  
            </list>  
        </property>  
    </bean>  
</beans> 

public class Mails {
	//表识
	private int id;
	//客户的生日
	private Date birth;
	//客户的邮件
	private String email;

	public Mails() {
		super();
	}

	public Mails(int id, Date birth, String email) {
		this();
		this.id = id;
		this.birth = birth;
		this.email = email;
	}

	/**
	 * @return the id
	 */
	public int getId() {
		return id;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * @return the birth
	 */
	public Date getBirth() {
		return birth;
	}

	/**
	 * @param birth the birth to set
	 */
	public void setBirth(Date birth) {
		this.birth = birth;
	}

	/**
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * @param email the email to set
	 */
	public void setEmail(String email) {
		this.email = email;
	}


}
分享到:
评论

相关推荐

    mvc定时发邮件

    本项目“mvc定时发邮件”利用SpringMVC、MyBatis和Quartz框架,结合JavaMail API,实现了定时向指定邮箱发送邮件的功能。以下是对这个项目涉及的关键技术点的详细说明: 1. **SpringMVC**:SpringMVC是Spring框架的...

    notes定时发邮件

    在Lotus Notes(通常简称Notes)中,定时发送邮件是一项非常实用的功能,它允许用户预先设定邮件内容,并在特定的时间自动发送,无需手动操作。这个功能对于那些需要定期报告、提醒或者通知的情况非常有用。以下将...

    C#实现定时发送邮件功能

    3. **定时发送邮件**: 定时发送邮件的核心在于设置一个定时器,当达到预定时间时,调用邮件发送的逻辑。这可以通过创建一个`Timer`实例,并设置其回调函数来实现。在回调函数中,使用`SmtpClient`发送邮件。另一种...

    java使用定时器,定时发送邮件

    在Java编程中,定时任务是常见的一种需求,例如定时发送邮件。这通常涉及到Java的定时器(Timer)类和相关的API。在这个场景中,我们将会深入探讨如何利用Java的定时器来实现定时发送邮件的功能。 首先,Java的...

    定时发送邮件软件

    在IT领域,定时发送邮件软件是一种非常实用的工具,它允许用户预先设置好邮件内容和发送时间,系统会在指定的时间自动发送邮件。这种软件尤其适用于需要定期向多个人或团队发送报告、通知或者进行营销活动的情况。...

    java定时发送邮件

    具体实现可能涉及到对日期时间的操作,以及如何根据预定的时间触发邮件发送任务。 #### 四、注意事项与优化建议 - **安全性考虑**:确保邮件发送过程中的数据安全,尤其是敏感信息如密码等的存储和传输安全。 - **...

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

    将定时任务与JavaMailSender结合,可以创建一个定时任务,每隔一段时间自动发送邮件。在`@Scheduled`方法内,调用`JavaMailSender`的send()方法,传入邮件对象。 5. **配置文件与bean定义** 在Spring的配置文件...

    定期发送邮件 定时发送 可选附件

    【标签】"定期发送邮件" 是这个话题的关键,它代表了这个软件或服务的主要特性,即能设置预定时间发送邮件,而无需人工实时操作。 根据【压缩包子文件的文件名称列表】,我们可以推测这是一个用于定时发送邮件的...

    定时发送邮件(可参考)绝对好

    本教程将探讨如何实现“定时发送邮件”的功能,这在业务通知、自动化报告或日常维护提醒等方面非常实用。我们将主要围绕ASP.NET平台,利用心跳检测和Timer控件来构建这一功能。 1. **定时任务原理**: 定时任务...

    自动发送邮件 定时发送邮件 可带附件

    在IT领域,自动发送邮件和定时发送邮件是常见的需求,特别是在自动化办公、系统通知或数据报告等场景。这里,我们主要探讨如何实现这个功能,尤其是通过一个名为"sendmail.exe"的工具,以及如何配置"mail.ini"文件来...

    C# Windows服务 定时自动发送邮件(带附件)

    本文将深入探讨如何使用C#语言创建一个Windows服务,该服务具有定时自动发送邮件的功能,包括附件的处理。这在系统管理、数据报告或者自动化任务中非常实用。 首先,创建Windows服务需要使用C#的System.Service...

    spring定时发送邮件

    结合以上两点,我们可以创建一个定时任务,使其在指定时间自动发送邮件。首先,定义一个`Runnable`实现类,这个类中包含发送邮件的逻辑,使用Spring Mail的API。然后,将这个任务实例化,并在Spring配置中设置定时...

    spring+quartz+javamail定时发送邮件

    本项目“spring+quartz+javamail定时发送邮件”结合了Spring框架、Quartz调度器以及JavaMail API,构建了一个能够定时发送邮件的系统。以下将详细介绍这三个关键组件及其整合方式。 首先,Spring框架是一个广泛使用...

    c# 每天定时发送邮件(省事)

    帮你每天定时发送邮件,省下你宝贵的时间。

    .Net用线程来实现定时发送邮件

    总之,".Net用线程来实现定时发送邮件"这个项目结合了.NET的多线程技术、定时器和电子邮件服务,创建了一个能够按预定时间间隔自动发送邮件的实用工具。开发者可以借此学习和理解如何在.NET环境中实现并发和定时任务...

    springboot 定时发送邮件

    本项目是关于使用Spring Boot实现定时发送邮件的功能,这对于自动化通知、日志报告或者定期执行任务等场景非常实用。 首先,我们关注的是"定时"这一概念,这涉及到Spring Boot中的定时任务调度器——`@Scheduled`。...

Global site tag (gtag.js) - Google Analytics