精华内容
下载资源
问答
  • Java实现定时发送邮件功能

    万次阅读 2018-08-30 22:49:25
    定时发送邮件 发送邮件在很多场景下都可以被使用到,例如:项目报错,将异常信息及时发送给开发人员;将服务器运行状态及时发送给运维人员;注册成功发送邮件给用户等等。这些都是为了及时将信息反馈给相关人员,...

    定时发送邮件

    发送邮件在很多场景下都可以被使用到,例如:项目报错,将异常信息及时发送给开发人员;将服务器运行状态及时发送给运维人员;注册成功发送邮件给用户等等。这些都是为了及时将信息反馈给相关人员,以便知道详情。
    在这里是结合线程发送邮件,首先先创建发送邮件工具类:

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.commons.mail.EmailAttachment;
    import org.apache.commons.mail.EmailException;
    import org.apache.commons.mail.HtmlEmail;
    import org.apache.commons.mail.SimpleEmail;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.google.common.collect.Maps;
    import MailConfig;
    
    /**
     * 
     * <b>Description:</b>发送邮件工具类<br>
     */
    public class MailUtil {
        private static Logger log = LoggerFactory.getLogger(MailUtil.class);
    
        private static String userName = MailConfig.getUserName();
        private static String passWord = MailConfig.getPassWord();
        private static String smtpHost = MailConfig.getSmtpHost();
        private static String fromEmail = MailConfig.getFromEmail();
        private static String charset = MailConfig.getCharset();
        private static String senderName = MailConfig.getSenderName();
        private static String encryptionType = MailConfig.getEncryptionType();
        private static int mailPort = Integer.valueOf(MailConfig.getMailPort());
    
        /**
         * <b>Description:</b>发送Html邮件<br>
         * 
         * @param to 收件人
         * @param cc 抄送
         * @param list
         * @param subject 主题
         * @param htmlContent 内容
         */
        public static void sendHtmlMailWithoutSSL(Map<String, String> to, Map<String, String> cc, String subject, String htmlContent) {
    
            HtmlEmail email = new HtmlEmail();
    
            email.setCharset(MailUtil.charset);
            email.setHostName(smtpHost);
            email.setAuthentication(userName, passWord);
            email.setSubject(subject);
    
            email.setSSL(true);
            email.setSmtpPort(mailPort);
            try {
                email.setFrom(fromEmail);
    
                if (to != null) {
                    for (Map.Entry<String, String> map : to.entrySet()) {
                        email.addTo(map.getValue(), map.getKey());
                    }
                }
    
                if (cc != null) {
                    for (Map.Entry<String, String> map : cc.entrySet()) {
                        email.addCc(map.getValue(), map.getKey());
                    }
                }
    
                if (list != null) {
                    for (EmailAttachment attachment : list) {
                        email.attach(attachment);
                    }
                }
    
                email.setMsg(htmlContent);
    
                email.send();
            } catch (EmailException e) {
                log.error("$$$ Error sending mail, catch a EmailException !userName:" + userName);
                e.printStackTrace();
            }
            log.debug("$$$ Send email successful!");
        }
    }
    
    

    工具类中到的一些配置是放在xml中,一下邮件配置类:

    
    /**
     * 
     * <b>Description:</b>邮箱配置类<br> 
     */
    public class MailConfig {
        /**
         * 邮箱登录名
         */
        private static String userName;
        /**
         * 邮箱登录密码
         */
        private static String passWord;
        /**
         * smtp
         */
        private static String smtpHost;
        /**
         * 发送邮箱
         */
        private static String fromEmail;
        /**
         * 字符设置
         */
        private static String charset;
        /**
         * 发送者名称
         */
        private static String senderName;
        /**
         * 加密类型
         */
        private static String encryptionType;
        /**
         * 邮箱服务器端口
         */
        private static String mailPort;
    
        public static String getUserName() {
            return userName;
        }
    
        public static void setUserName(String userName) {
            MailConfig.userName = userName;
        }
    
        public static String getPassWord() {
            return passWord;
        }
    
        public static void setPassWord(String passWord) {
            MailConfig.passWord = passWord;
        }
    
        public static String getSmtpHost() {
            return smtpHost;
        }
    
        public static void setSmtpHost(String smtpHost) {
            MailConfig.smtpHost = smtpHost;
        }
    
        public static String getFromEmail() {
            return fromEmail;
        }
    
        public static void setFromEmail(String fromEmail) {
            MailConfig.fromEmail = fromEmail;
        }
    
        public static String getCharset() {
            return charset;
        }
    
        public static void setCharset(String charset) {
            MailConfig.charset = charset;
        }
    
        public static String getSenderName() {
            return senderName;
        }
    
        public static void setSenderName(String senderName) {
            MailConfig.senderName = senderName;
        }
    
        public static String getEncryptionType() {
            return encryptionType;
        }
    
        public static void setEncryptionType(String encryptionType) {
            MailConfig.encryptionType = encryptionType;
        }
    
        public static String getMailPort() {
            return mailPort;
        }
    
        public static void setMailPort(String mailPort) {
            MailConfig.mailPort = mailPort;
        }
    
    }
    
    

    applicationContext.xml配置:

    <!-- Mail模块配置 -->
    	<bean class="MailConfig类">
    		<property name="userName" value="${USER_NAME}" />
    		<property name="passWord" value="${PASSWORD}" />
    		<property name="smtpHost" value="${SMTP_HOST}" />
    		<property name="fromEmail" value="${FROM_EMAIL}" />
    		<property name="charset" value="${CHARSET}" />
    		<property name="senderName" value="${SENDER_NAME}" />
    		<property name="encryptionType" value="${ENCRYPTIONT_YPE}" />
    		<property name="mailPort" value="${MAIL_PORT}" />
    	</bean>
    

    现在邮件发送已经可以,如何定时发送呢?可以加个发送邮件线程,每隔一段时间检查是否有邮件需要发送,有的话,调用发送邮件工具类,没有就sleep。

    
    
    import java.util.Date;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map.Entry;
    import java.util.Set;
    
    import org.springframework.web.context.ContextLoader;
    
    /**
     * 
     * <b>Description:</b>邮件发送线程<br>
     */
    public class MailSenderThead extends Thread {
        /**
         * 待发送邮件列表
         */
        private static List<Mail> mailList = new LinkedList<Mail>();
    
        /**
         * 
         * <b>Description:</b>添加需要发送的邮件<br>
         * 
         * @param mail void
         */
        public static void addMail(Mail mail) {
            mailList.add(mail);
        }
    
        @Override
        public void run() {
            while (true) {
                if (mailList.size() == 0) {
                    try {
                        Thread.sleep(1000L); //待发送邮件列表为空,sleep1秒钟
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    continue;
                }
                Mail mail = mailList.get(0);
                try {
                    mailList.remove(0);
                    // 这里可以保存email日志
                    //发送邮件
                    MailUtil.sendHtmlMailWithoutSSL(mail.getTo(), null, null, mail.getSubject(), mail.getContent());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    

    现在定时发邮件功能已能实现,当然在此基础上还要写业务层什么,这里就不累赘了。这只是定时发送邮件的一种实现,还可以结合定时器实现。

    展开全文
  • java实现定时发送邮件

    2020-12-21 04:32:26
    需要做一个功能就是 客户使用我们公司的设备的时候 ,每天固定一个时间点 ,我们定时发送该设备的数据到客户邮箱,让客户了解自己设备的一个情况,由于代码不能上传,就把当时我开始搭建开发而写的一个demo记录下来,实现...
  • java实现邮箱发送功能,并且可以不间断的定时发送
  • 需求:系统定时发送E-mail到其客户,达到通知的效果。先将实例分享给大家,如果确实有一些帮助的话,请大家来点掌声!首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会...

    需求:系统定时发送E-mail到其客户,达到通知的效果。先将实例分享给大家,如果确实有一些帮助的话,请大家来点掌声!

    首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask)

    如: 每隔一个小时执行任务 timer.schedule(TimerTask, 0, 60 * 60 * 1000);

    schedule方法的第一个参数是需要执行的任务,此类的类型为java.util.TimerTask,第二个参数为执行任务前等待时间,此处0表示不等待,第三个参数为间隔时间,单位为毫秒

    由于我们希望当Web工程启动时,定时器能自动开始计时,这样在整个Web工程的生命期里,就会定时的执行任务,因此启动定时器的类不能是一般的类,此处用Servlet的监听器类来启动定时器,通过在配置文件里配置此监听器, 让其在工程启动时自动加载运行,存活期为整个Web工程生命期.

    要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,以下是实例:

    public class MyTimerTask implements ServletContextListener

    {

    private Timer timer = null;

    public void contextDestroyed(ServletContextEvent event)

    {

    timer.cancel();

    event.getServletContext().log("定时器销毁");

    }

    public void contextInitialized(ServletContextEvent event)

    {

    //在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能

    timer = new Timer(true);

    event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到

    //调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;

    timer.schedule(new SendEmail(event.getServletContext()),0,24*60*60*1000);

    }

    }

    使用javamail发送邮件需要两个包(下面我上传的有,下载即可):activation.jar   mail.jar将这两个报发到项目的lib目录下

    public class SendEmail extends TimerTask

    {

    private ServletContext context = null;

    public SendEmail(ServletContext context)

    {

    this.context = context;

    }

    @Override

    public void run()

    {

    /*

    * 以下为javamail的邮件发送

    */

    System.out.println("正在发送邮件");

    Properties props=new Properties();

    props.put("mail.smtp.host","smtp.163.com");//发件人使用发邮件的电子信箱服务器我使用的是163的服务器

    props.put("mail.smtp.auth","true"); //这样才能通过验证

    Session s=Session.getInstance(props);

    s.setDebug(true);

    MimeMessage message=new MimeMessage(s);

    //给消息对象设置发件人/收件人/主题/发信时间

    InternetAddress from=new InternetAddress("daida@163.com");  //发邮件的出发地(发件人的信箱),这是我的邮箱地址,使用请改成你的有效地址

    message.setFrom(from);

    InternetAddress to=new InternetAddress(tto);// tto为发邮件的目的地(收件人信箱)

    message.setRecipient(Message.RecipientType.TO,to);

    message.setSubject(ttitle);// ttitle为邮件的标题

    message.setSentDate(new Date());

    BodyPart mdp=new MimeBodyPart();//新建一个存放信件内容的BodyPart对象

    mdp.setContent(tcontent,"text/html;charset=utf-8");//给BodyPart对象设置内容和格式/编码方式tcontent为邮件内容

    Multipart mm=new MimeMultipart();//新建一个MimeMultipart对象用来存放BodyPart对

    //象(事实上可以存放多个)

    mm.addBodyPart(mdp);//将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)

    message.setContent(mm);//把mm作为消息对象的内容

    message.saveChanges();

    Transport transport=s.getTransport("smtp");

    transport.connect("smtp.163.com","daida","789-jik");//发邮件人帐户密码,此外是我的帐户密码,使用时请修改。

    transport.sendMessage(message,message.getAllRecipients());

    transport.close();

    }

    }

    catch (Exception e)

    {

    e.printStackTrace();

    }

    }

    }

    }

    该定时器在web.xml中的配置为:

    cachay.saga.utils.MyTimerTask

    至此,所有操作均已完成,需要加入activation.jar   mail.jar

    展开全文
  • java实现邮件定时发送

    2016-04-11 16:48:54
    最近做项目时客户提出了一个需求:系统定时发送E-mail到其客户,达到通知的效果。先将实例分享给大家,如果确实有一些帮助的话,请大家来点掌声! 首先介绍java定时器(java.util.Timer)有定时执行计划任务...

    http://blog.csdn.net/awj3584/article/details/7863772


    最近做项目时客户提出了一个需求:系统定时发送E-mail到其客户,达到通知的效果。先将实例分享给大家,如果确实有一些帮助的话,请大家来点掌声!

    首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask)

    如: 每隔一个小时执行任务 timer.schedule(TimerTask, 0, 60 * 60 * 1000);

    schedule方法的第一个参数是需要执行的任务,此类的类型为java.util.TimerTask,第二个参数为执行任务前等待时间,此处0表示不等待,第三个参数为间隔时间,单位为毫秒

    由于我们希望当Web工程启动时,定时器能自动开始计时,这样在整个Web工程的生命期里,就会定时的执行任务,因此启动定时器的类不能是一般的类,此处用Servlet的监听器类来启动定时器,通过在配置文件里配置此监听器, 让其在工程启动时自动加载运行,存活期为整个Web工程生命期.

    要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,以下是实例:

          

    public class MyTimerTask implements ServletContextListener

    private Timer timer = null;  
    public void contextDestroyed(ServletContextEvent event) 
    {  
      timer.cancel(); 
      event.getServletContext().log("定时器销毁");  
    }   
    public void contextInitialized(ServletContextEvent event) 

      //在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能 
      timer = new Timer(true); 
      event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到 
      //调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;
      timer.schedule(new SendEmail(event.getServletContext()),0,24*60*60*1000);  

    }

    使用javamail发送邮件需要两个包(下面我上传的有,下载即可):activation.jar   mail.jar将这两个报发到项目的lib目录下

    public class SendEmail extends TimerTask 

    private ServletContext context = null; 

    public SendEmail(ServletContext context) 

      this.context = context; 


    @Override 
    public void run() 

          /*
          * 以下为javamail的邮件发送
          */

           System.out.println("正在发送邮件");

            Properties props=new Properties();
            props.put("mail.smtp.host","smtp.163.com");//发件人使用发邮件的电子信箱服务器我使用的是163的服务器
            props.put("mail.smtp.auth","true"); //这样才能通过验证
            Session s=Session.getInstance(props);
            s.setDebug(true);

            MimeMessage message=new MimeMessage(s);

            //给消息对象设置发件人/收件人/主题/发信时间
            InternetAddress from=new InternetAddress("daida@163.com");  //发邮件的出发地(发件人的信箱),这是我的邮箱地址,使用请改成你的有效地址
            message.setFrom(from);
            InternetAddress to=new InternetAddress(tto);// tto为发邮件的目的地(收件人信箱)

            message.setRecipient(Message.RecipientType.TO,to);
            message.setSubject(ttitle);// ttitle为邮件的标题
            message.setSentDate(new Date());
            BodyPart mdp=new MimeBodyPart();//新建一个存放信件内容的BodyPart对象
            mdp.setContent(tcontent,"text/html;charset=utf-8");//给BodyPart对象设置内容和格式/编码方式tcontent为邮件内容
            Multipart mm=new MimeMultipart();//新建一个MimeMultipart对象用来存放BodyPart对
            //象(事实上可以存放多个)
            mm.addBodyPart(mdp);//将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
            message.setContent(mm);//把mm作为消息对象的内容

            message.saveChanges();
            Transport transport=s.getTransport("smtp");
            transport.connect("smtp.163.com","daida","789-jik");//发邮件人帐户密码,此外是我的帐户密码,使用时请修改。
            transport.sendMessage(message,message.getAllRecipients());
            transport.close();
        }        
       } 
          catch (Exception e) 
          {
        e.printStackTrace();
       }       
         }    
    }
    }

    该定时器在web.xml中的配置为:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">


    <listener>
            <listener-class>cachay.saga.utils.MyTimerTask</listener-class>
        </listener> 

    </web-app>

    至此,所有操作均已完成,需要加入activation.jar   mail.jar

    展开全文
  • 首先介绍java定时器()有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask)由于我们希望当Web工程启动时,定时器能自动开始计时,这样在整个Web工程...

    首先介绍java定时器()有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask)

    由于我们希望当Web工程启动时,定时器能自动开始计时,这样在整个Web工程的生命期里,就会定时的执行任务,因此启动定时器的类不能是一般的类,此处用Servlet的监听器类来启动定时器,通过在配置文件里配置此监听器, 让其在工程启动时自动加载运行,存活期为整个Web工程生命期.

    首先要去实现一个监听任务:

    
    package com.sun.action;
     
    import ;
     
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
     
    /**
     * @author szy
     * @version 创建时间:2018-4-5 上午10:46:11
     *
     */
    public class MyTimerTask implements ServletContextListener {
     
      private Timer timer = null;
      @Override
      public void contextDestroyed(ServletContextEvent event) {
        // TODO Auto-generated method stub
     
        timer.cancel();
         ().log("定时器销毁");
         
      }
     
      @Override
      public void contextInitialized(ServletContextEvent event) {
        // TODO Auto-generated method stub
     
        //在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能
         timer = new Timer(true);
         ().log("定时器已启动");//添加日志,可在tomcat日志中查看到
         //调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;
         //(new SendEmail(()),0,24*60*60*1000);
         (new SendEmail(()),0,5*1000);
      }
    }

      然后实现监听的方法类:

    
    package com.sun.action;
     
    import Task;
     
    import javax.servlet.ServletContext;
     
    /**
     * @author szy
     * @version 创建时间:2018-4-5 上午10:50:00
     *
     */
    public class SendEmail extends TimerTask {
     
      private ServletContext context = null;
      public SendEmail(ServletContext context)
      {
       this.context = context;
      }
       
      @Override
      public void run() {
        // TODO Auto-generated method stub
        System.out.println("您的邮件已发送,清注意查收");
      }
     
    }

      完成后,配置监听到里面去。

    
    <?xml version="" encoding="UTF-8"?>
    <web-app xmlns:xsi="" xmlns="" xmlns:web="/web-app_2_5.xsd" xsi:schemaLocation=" /web-app_3_0.xsd" version="">
     <display-name>TimerWeb</display-name>
     <welcome-file-list>
      <welcome-file>index.html</welcome-file>
      <welcome-file>index.htm</welcome-file>
      <welcome-file>index.jsp</welcome-file>
      <welcome-file>default.html</welcome-file>
      <welcome-file>default.htm</welcome-file>
      <welcome-file>default.jsp</welcome-file>
     </welcome-file-list>
     <listener>
      <listener-class>com.sun.action.MyTimerTask</listener-class>
     </listener>
    </web-app>

     OK,通过Tomcat运行项目即可,可看到隔5s就会发送一条邮件,当然这里是模拟发送的邮件。

    2e2917cccf91e6ab8eef5690d54e9952.png

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • java实现qq邮箱每天定时发送邮件

    千次阅读 2016-07-09 20:47:13
    于是,这里把他们结合起来了,实现定时发送邮件,向暗恋的女神表白的用处(yiyin)。 我没有研究过quartz框架,这里主要是从实用的角度讲一下。在使用时,需要编写任务类和触发器类两部分的代码。任务类是
  • 首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask) 由于我们希望当Web工程启动时,定时器能自动开始...
  • 最近做项目时客户提出了一个需求:系统定时发送E-mail到其客户,达到通知的效果。先将实例分享给大家,如果确实有一些帮助的话,请大家来点掌声! 首先介绍java定时器(java.util.Timer)有定时执行计划任务...
  • 做爬虫开发时候为了时刻得到爬虫的抓取状况,所以用到一个定时发送邮件系统,以便随时把爬虫抓取情况发送到我的邮箱,从而更好地了解爬虫运行情况,有用到的朋友尽管拷贝用了,直接能用的,记者把你的邮箱发送服务器...
  • 我现在刚进一家公司实习,最近要我做一个定时发送邮件的功能,我从网上参考了一些,自己也实现了从数据库获取数据,实现定时发送邮件的功能,代码如下: 一、首先写一个servlet的监听器 package net.bjgf.util; ...
  • 因为生活中老是忘记各种事情,刚好又在学python,便突发奇想通过python实现提醒任务的功能(尽管TIM有定时功能),也可定时给好友、群、讨论组发送qq消息。其工作流程是:访问数据库提取最近计划——>根据数据内容...
  • import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.ExecutorService; import java....
  • 实现功能主要技术点: Listener(监听器) 使用Java发送邮件(JavaMail的使用) 代码示例 创建web工程,写一个监听器监听ServletContext对象的创建(创建时机:启动服务器,部署该工程),ServletContext对象创建时,...
  • java web使用监听器实现定时周期性执行任务的功能,定时邮件发送、文件删除等自定义功能可自行添加
  • 不知道大家有没有需要这样的功能,比如某功能需要每天或者每周或者每月查询一次或者执行一次相同的功能, 例如一些查询统计的周报或者月报,需要以excel的形式下载下来或者发送到某人邮箱里,这时候如果每次都要...
  • 功能:向后台发送tcp请求,如果失败(超时或者其他原因),隔5s、15s、35s相继推送三次 问题:1.如何高并发处理? 2.相隔时间怎么控制?
  • Java简单实现Ping功能

    2011-08-08 21:37:27
    方案思路: 运用java调用服务器的自身命令来简单实现ping功能 ,本文只是讲述如何运用Java简单实现Ping的功能,至于告警信息的发送方式有很多种(比如短信 、邮件 、Syslog 、MSN 等等),在以前的文章中已经描述过...
  • Spring Boot定时发送短信

    千次阅读 2019-01-16 22:13:17
    Spring Boot定时发送短信的两种方式 不少项目中估计都有遇到定时发送这个梗,我也遇到了,页面中下拉框选项有立即...java.util包里的Timer,它也可以实现定时任务但是功能过于单一所有使用很少,而还有一个类Sche...
  • 定时发送邮件小程序

    2012-10-28 16:27:00
    之前写过一篇用JAVA实现邮件发送的博客,那个使用起来比较麻烦,可以参考文章:java实现邮件发送今天看到了Spring为我们简化了这些步骤,下面来介绍如何使用Spring和quartz来实现邮件定时发送功能。项目架构: ...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 146
精华内容 58
关键字:

java实现定时发送功能

java 订阅