自动发送邮件

主要原理:
实现该功能原理运行ServletContextListener监听器中的定时器Time类。
步骤:
1.安装邮件服务器
添加链接描述
2.安装客户邮件集成软件
比如:Foxmail
主要:设置发送协议为POP3
3.写代码:(我实现的功能是自动发送生日祝福)

package domain;

public class Customer {
	private int id;
	private String username;
	private String password;
	private String realname;
	private String birthday;
	private String email;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getRealname() {
		return realname;
	}
	public void setRealname(String realname) {
		this.realname = realname;
	}
	public String getBirthday() {
		return birthday;
	}
	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}


}

package utils;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
 
public class MailUtils {
 
	//email:邮件发给谁  subject:主题  emailMsg:邮件的内容
	public static void sendMail(String email, String subject, String emailMsg)
			throws AddressException, MessagingException {
		
		// 1.创建一个程序与邮件服务器会话对象 Session
		Properties props = new Properties();
		props.setProperty("mail.transport.protocol", "SMTP");//发邮件的协议
		props.setProperty("mail.host", "localhost");//发送邮件的服务器地址
		props.setProperty("mail.smtp.auth", "true");// 指定验证为true
 
		// 创建验证器
		Authenticator auth = new Authenticator() {
			public PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("admin", "123");//设置发送人的帐号和密码
			}
		};
 
		Session session = Session.getInstance(props, auth);
 
		// 2.创建一个Message,它相当于是邮件内容
		Message message = new MimeMessage(session);
 
		message.setFrom(new InternetAddress("admin@wx.com")); // 设置发送者
 
		message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 设置发送方式与接收者
 
		message.setSubject(subject);//邮件的主题
 
		message.setContent(emailMsg, "text/html;charset=utf-8");
 
		// 3.创建 Transport用于将邮件发送
		Transport.send(message);
	}
}


package web;

import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import utils.*;

import javax.mail.MessagingException;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.commons.dbutils.QueryRunner;

import domain.Customer;
import service.BirthdayService;


public class BirthdayListener  implements ServletContextListener{

	

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		//当web应用启动 开启任务调动---功能在用户的生日当前发送邮件
				//开启一个定时器
				Timer timer = new Timer();
				
				timer.scheduleAtFixedRate(new TimerTask() {
					
					@Override
					public void run() {
						// 为当前的生日的用户发邮件
						//1、获得今天过生日的人
						//获得今天的日期
						SimpleDateFormat format = new SimpleDateFormat("MM-dd");
						String currentDate = format.format(new Date());
						BirthdayService service=new BirthdayService();
						ArrayList<Customer> customerList=null;
						try {
							
							customerList = (ArrayList<Customer>) service.findPeopleByDate(currentDate);
							System.out.println(customerList);
						} catch (SQLException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
						//2、发邮件
						if(customerList!=null&&customerList.size()>0){
							for(Customer c : customerList){
								String emailMsg = "亲爱的:"+c.getRealname()+",生日快乐!";
								try {
									MailUtils.sendMail(c.getEmail(), "生日祝福", emailMsg);
									System.out.println(c.getRealname()+"邮件发送完毕");
								} catch (MessagingException e) {
									e.printStackTrace();
								}
							}
						}
						
						
					}
				}, new Date(), 1000*10);
				//实际开发中起始时间是一个固定的时间,这里为了方便演示
				//实际开发中间隔时间是1天

	
		
	}
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		
	}
}

package service;

import java.sql.SQLException;
import java.util.List;
import dao.BirthdayDao;
import domain.Customer;

public class BirthdayService {
	public static List<Customer> findPeopleByDate(String currentDate) throws SQLException{
		BirthdayDao dao=new BirthdayDao();
		return dao.findPeopleByCurrentDate(currentDate);
	}
}

package dao;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import domain.Customer;
import utils.DataSourceUtils;



public class BirthdayDao {
	public static List<Customer>findPeopleByCurrentDate(String currentDate) throws SQLException{
		//根据当前时间从数据查询今天过生日的人
		QueryRunner runner=new QueryRunner(DataSourceUtils.getDataSource());
		String sql = "select * from customer where birthday like ?";
		List<Customer> customerList = null;
		
			customerList = runner.query(sql, new BeanListHandler<Customer>(Customer.class) ,"%"+currentDate+"%");
		
		return customerList;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值