-
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实现邮箱发送(定时发送)
2011-09-06 11:08:25用java实现邮箱发送功能,并且可以不间断的定时发送 -
java 邮件 定时_java实现邮件定时发送
2021-02-12 15:54:58需求:系统定时发送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实现socket监听多个端口_Java Web监听器如何实现定时发送邮件_java
2020-12-02 18:02:55首先介绍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就会发送一条邮件,当然这里是模拟发送的邮件。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
-
java实现qq邮箱每天定时发送邮件
2016-07-09 20:47:13于是,这里把他们结合起来了,实现定时发送邮件,向暗恋的女神表白的用处(yiyin)。 我没有研究过quartz框架,这里主要是从实用的角度讲一下。在使用时,需要编写任务类和触发器类两部分的代码。任务类是 -
java Web监听器实现定时发送邮件
2018-04-05 11:17:00首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask) 由于我们希望当Web工程启动时,定时器能自动开始... -
java实现邮件每周日定时发送
2015-04-01 10:53:40最近做项目时客户提出了一个需求:系统定时发送E-mail到其客户,达到通知的效果。先将实例分享给大家,如果确实有一些帮助的话,请大家来点掌声! 首先介绍java定时器(java.util.Timer)有定时执行计划任务... -
javaMail Java实现邮件发送,群发功能,java发送邮件
2013-10-24 15:16:37做爬虫开发时候为了时刻得到爬虫的抓取状况,所以用到一个定时发送邮件系统,以便随时把爬虫抓取情况发送到我的邮箱,从而更好地了解爬虫运行情况,有用到的朋友尽管拷贝用了,直接能用的,记者把你的邮箱发送服务器... -
实现定时发送邮件功能 数据是从数据库中获取到的
2013-11-27 16:16:56我现在刚进一家公司实习,最近要我做一个定时发送邮件的功能,我从网上参考了一些,自己也实现了从数据库获取数据,实现了定时发送邮件的功能,代码如下: 一、首先写一个servlet的监听器 package net.bjgf.util; ... -
python实现定时发送qq消息
2020-12-24 11:18:57因为生活中老是忘记各种事情,刚好又在学python,便突发奇想通过python实现提醒任务的功能(尽管TIM有定时功能),也可定时给好友、群、讨论组发送qq消息。其工作流程是:访问数据库提取最近计划——>根据数据内容... -
android实现定时拍照并发送微博功能
2021-01-05 08:44:04import 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发送邮件)
2020-02-24 15:18:22实现功能主要技术点: Listener(监听器) 使用Java发送邮件(JavaMail的使用) 代码示例 创建web工程,写一个监听器监听ServletContext对象的创建(创建时机:启动服务器,部署该工程),ServletContext对象创建时,... -
java web使用监听器实现定时周期性执行任务的功能
2017-05-05 11:35:24java web使用监听器实现定时周期性执行任务的功能,定时邮件发送、文件删除等自定义功能可自行添加 -
(附代码和截图)spring基于注解的java定时任务功能实现
2018-07-04 13:22:16不知道大家有没有需要这样的功能,比如某功能需要每天或者每周或者每月查询一次或者执行一次相同的功能, 例如一些查询统计的周报或者月报,需要以excel的形式下载下来或者发送到某人邮箱里,这时候如果每次都要... -
java高并发实现定时推送思路
2017-04-11 00:39:44功能:向后台发送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:17Spring Boot定时发送短信的两种方式 不少项目中估计都有遇到定时发送这个梗,我也遇到了,页面中下拉框选项有立即...java.util包里的Timer,它也可以实现定时任务但是功能过于单一所有使用很少,而还有一个类Sche... -
定时发送邮件小程序
2012-10-28 16:27:00之前写过一篇用JAVA实现邮件发送的博客,那个使用起来比较麻烦,可以参考文章:java实现邮件发送今天看到了Spring为我们简化了这些步骤,下面来介绍如何使用Spring和quartz来实现邮件定时发送功能。项目架构: ...
-
我所理解的微服务架构(MicroserviceArchitecture,MSA)
-
ELK入门——解决:analyzer [] has not been configured in mappings []
-
C++MFC开发远程控制软件教程(VS2013)
-
Python启蒙到架构师的核心技术精讲课程
-
Docker- 2、运行第一个容器
-
优雅地断开TCP连接
-
python中使用selenium调用Firefox缺少geckodriver解决方法
-
携程第四代架构探秘之运维基础架构升级
-
C语言学生成绩管理系统系列-------(3)
-
一份用户访谈操作指南
-
RN PermissionsAndroid 权限一览
-
Samba 服务配置与管理
-
RAD Studio 10.4.1 KeyPatch
-
自动化测试Python3+Selenium3+Unittest
-
MySQL Router 实现高可用、负载均衡、读写分离
-
Glasterfs 分布式网络文件系统
-
Redux从设计到源码
-
用于直接捕获光学细光谱线并实现准确的化学成分测量的无自吸收激光诱导击穿光谱仪的开发和性能评估
-
SVM为什么要将原问题转换为对偶问题?
-
一文详解微服务架构