• javaWeb之自动发送邮件生日祝福(ServletContextListener监听)


    在看完本随笔仍然不理解的可以看  javaWeb邮箱发送  :里面有具体的邮箱服务器配置

    企业在员工生日当天发送邮箱生日祝福:

      一般是用监听器完成:  而合适的监听是ServletContextListener   ,每天都定时查看该天过生日的员工,并发送邮件祝福

    创建一个监听器:

    package com.study.mail;
    import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Timer; import java.util.TimerTask; import javax.mail.MessagingException; import javax.mail.internet.AddressException; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; import com.study.utils.DataSourceUtils; public class MyServletContextListener implements ServletContextListener { public void contextInitialized(ServletContextEvent arg0) { Timer timer=new Timer(); final SimpleDateFormat sdf=new SimpleDateFormat("MM-dd"); final QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource()); timer.schedule(new TimerTask() { @Override public void run() { //判断今天的日期 String today=""%"+sdf.format(new Date())+"%""; // today 容易写成 "%"+sdf.format(new Date())+"%" // 导致生成的sql语句为: select * from user where birthday like %11-13% // 正常运行的sql语句为: select * from user where birthday like "%11-13%", //因此使用 ‘’ 转义符把 " 转化 //今天生日的员工 String sql="select * from user where birthday like "+today; List<User> userList =null; try { System.out.println(sql); userList = qr.query(sql, new BeanListHandler<User>(User.class)); } catch (SQLException e) { e.printStackTrace(); } if (userList!=null) { for (User user : userList) { String emailMsg="亲爱的"+user.getName()+"<br/>祝你生日快乐"; try { MailUtils.sendMail(user.getEmail(), "生日祝福", emailMsg); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } } } } }, new Date(), 1000*5); //new Date() 具体的项目不为这个, 1000*5 // 真正项目是1000*60*60*24 一天 } public void contextDestroyed(ServletContextEvent arg0) { // TODO Auto-generated method stub } }

    User  类:

    package com.study.mail;
    
    public class User {
        
        private String name;
        private String passWord;
        private String email;
        private String birthday;
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPassWord() {
            return passWord;
        }
        public void setPassWord(String passWord) {
            this.passWord = passWord;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
        public String getBirthday() {
            return birthday;
        }
        public void setBirthday(String birthday) {
            this.birthday = birthday;
        }
        
        
    }

    MailUtils类:

    package com.study.mail;
    
    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 {
    
        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("tom", "123456");//发送邮件的账号认证
                }
            };
    
            Session session = Session.getInstance(props, auth);
    
            // 2.创建一个Message,它相当于是邮件内容
            Message message = new MimeMessage(session);
    
            message.setFrom(new InternetAddress("tom@study.com")); // 设置发送者
    
            message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 设置发送方式与接收者
    
            message.setSubject(subject);//设置邮件的主题
            // message.setText("这是一封激活邮件,请<a href='#'>点击</a>");
            //设置邮件的内容
            message.setContent(emailMsg, "text/html;charset=utf-8");
            
            // 3.创建 Transport用于将邮件发送
    
            Transport.send(message);
        }
    }

    DataSourceUtils类

    package com.study.utils;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import javax.sql.DataSource;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class DataSourceUtils {
    
        private static DataSource dataSource = new ComboPooledDataSource();
    
        private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
    
        // 直接可以获取一个连接池
        public static DataSource getDataSource() {
            return dataSource;
        }
        
        public static Connection getConnection() throws SQLException{
            return dataSource.getConnection();
        }
    
        // 获取连接对象
        public static Connection getCurrentConnection() throws SQLException {
    
            Connection con = tl.get();
            if (con == null) {
                con = dataSource.getConnection();
                tl.set(con);
            }
            return con;
        }
    
        // 开启事务
        public static void startTransaction() throws SQLException {
            Connection con = getCurrentConnection();
            if (con != null) {
                con.setAutoCommit(false);
            }
        }
    
        // 事务回滚
        public static void rollback() throws SQLException {
            Connection con = getCurrentConnection();
            if (con != null) {
                con.rollback();
            }
        }
    
        // 提交并且 关闭资源及从ThreadLocall中释放
        public static void commitAndRelease() throws SQLException {
            Connection con = getCurrentConnection();
            if (con != null) {
                con.commit(); // 事务提交
                con.close();// 关闭资源
                tl.remove();// 从线程绑定中移除
            }
        }
    
        // 关闭资源方法
        public static void closeConnection() throws SQLException {
            Connection con = getCurrentConnection();
            if (con != null) {
                con.close();
            }
        }
    
        public static void closeStatement(Statement st) throws SQLException {
            if (st != null) {
                st.close();
            }
        }
    
        public static void closeResultSet(ResultSet rs) throws SQLException {
            if (rs != null) {
                rs.close();
            }
        }
    
    }

    C3p0-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
        <default-config>
            <property name="user">root</property>
            <property name="password">root</property>
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql:///WEBListener</property>
        </default-config> 
    </c3p0-config> 

    mysql数据库:

     

    foxmail用户

    应用开启:生日当天的user收到邮件

  • 相关阅读:
    完全N叉树寻找祖先
    MySql_Front新建数据库遇到访问地址冲突问题
    C++金额的中文大写
    STL_sort cmp
    螺旋数组
    ~
    Struts向JSP中传值
    Struts1-配置文件部分
    jQuery Ajax 的 load()方式
    jquery animate
  • 原文地址:https://www.cnblogs.com/shaoxiaohuan/p/7828071.html
Copyright © 2020-2023  润新知