定时监控服务端口是否正常 发送邮件

1.搭建简单maven web项目
2.写一个监听类 实现 接口ServletContextListener,实现其方法
如图:

3.具体的监控任务类ListennerTask
如图:

4.web.xml 中配置自己写好的监听
如图:


主要的代码我贴一下:
监听器

package com.eliteams.quick4j.web.listenner;import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.Timer;/*** Created by 18358 on 2016/11/21.*/
public class RequestHospServerListenner implements ServletContextListener {private static final long LISTEN_TIME = 1*60*1000;//60秒@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {Timer timer = new Timer();// 具体监控任务实施类ListennerTask listennerTask = new ListennerTask();// 定时执行任务timer.schedule(listennerTask,0,LISTEN_TIME);}@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {}
}

核心监控任务

package com.eliteams.quick4j.web.listenner;import com.eliteams.quick4j.web.notifyauthor.EmailNotifyAuthor;
import com.eliteams.quick4j.web.notifyauthor.EmailUtil;
import com.eliteams.quick4j.web.notifyauthor.MailEntity;
import org.apache.commons.net.telnet.TelnetClient;import java.io.IOException;
import java.net.Socket;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;public class ListennerTask extends TimerTask{private static  final int SERVER_PORT = 8092;private static  final String SERVER_IP = "222.185.124.xx";private int count = -1;TelnetClient telnet ;@Overridepublic void run() {count++;RequestHospServerListenner requestHospServerListenner = null;if (count > 0 ){telnet = new TelnetClient();try {telnet.connect(SERVER_IP,SERVER_PORT);System.out.println("时间:"+ timeConvent(System.currentTimeMillis()) +"请求开始执行,第"+ (count)+"次,服务端口正常开启");} catch (IOException e) {Date time = new Date();String msgtext = time + "\n" + SERVER_IP + ":" + SERVER_PORT + " is not reachable!";System.out.println("时间:"+ timeConvent(System.currentTimeMillis()) +"请求开始执行,第"+ (count)+"次,服务端口开启异常,"+msgtext);// 第1种发送邮件方法 (javax.mail)EmailNotifyAuthor notifyAuthor = new EmailNotifyAuthor();// 设置发送 接收 地址notifyAuthor.setAddress("zhanghlxxx@163.com","1835811xxx@163.com","监控——测试邮件");// 设置要发送附件的位置和标题notifyAuthor.setAffix("f:/123.txt", "123.txt");notifyAuthor.send("smtp.163.com","zhanghlxxx@163.com","longxxx");// 第2种发送邮件方法(commons.mail)MailEntity mail = new MailEntity("smtp.163.com","zhanghlxxx@163.com","1835811xxx@163.com","监控主机","zhanghlxxx@163.com","longxxx","服务异常","监控——测试邮件");new EmailUtil().send(mail);}requestHospServerListenner = new RequestHospServerListenner();}}public String timeConvent(long str){SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");long ltime = new Long(str);Date date = new Date(ltime);String s = simpleDateFormat.format(date);return s;}
}

*第一种方式: javax.mail 方式:

package com.eliteams.quick4j.web.notifyauthor;import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import javax.activation.*;
import java.util.Properties;/*** Created by 18358 on 2016/11/21.*/
public class EmailNotifyAuthor {private String host = ""; // smtp服务器private String from = ""; // 发件人地址private String to = ""; // 收件人地址private String affix = ""; // 附件地址private String affixName = ""; // 附件名称private String user = ""; // 用户名private String pwd = ""; // 密码private String subject = ""; // 邮件标题public void setAddress(String from, String to, String subject) {this.from = from;this.to = to;this.subject = subject;}//添加附件信息public void setAffix(String affix, String affixName) {this.affix = affix;this.affixName = affixName;}public void send(String host, String user, String pwd) {this.host = host;this.user = user;this.pwd = pwd;Properties props = new Properties();// 设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)props.put("mail.smtp.host", host);// 需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)props.put("mail.smtp.auth", "true");// 用刚刚设置好的props对象构建一个sessionSession session = Session.getDefaultInstance(props);// 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使// 用(你可以在控制台(console)上看到发送邮件的过程)session.setDebug(true);// 用session为参数定义消息对象MimeMessage message = new MimeMessage(session);try {// 加载发件人地址message.setFrom(new InternetAddress(from));// 加载收件人地址message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));// 加载标题message.setSubject(subject);// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件Multipart multipart = new MimeMultipart();// 设置邮件的文本内容BodyPart contentPart = new MimeBodyPart();contentPart.setText("邮件的具体内容在此");multipart.addBodyPart(contentPart);// 添加附件BodyPart messageBodyPart = new MimeBodyPart();DataSource source = new FileDataSource(affix);// 添加附件的内容messageBodyPart.setDataHandler(new DataHandler(source));// 添加附件的标题// 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();messageBodyPart.setFileName("=?GBK?B?" + enc.encode(affixName.getBytes()) + "?=");multipart.addBodyPart(messageBodyPart);// 将multipart对象放到message中message.setContent(multipart);// 保存邮件message.saveChanges();// 发送邮件Transport transport = session.getTransport("smtp");// 连接服务器的邮箱transport.connect(host, user, pwd);// 把邮件发送出去transport.sendMessage(message, message.getAllRecipients());transport.close();} catch (Exception e) {e.printStackTrace();}}}

第二种方式 org.apache.commons.mail

package com.eliteams.quick4j.web.notifyauthor;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.log4j.Logger;/*** Created by 18358 on 2016/11/21.*/
public class EmailUtil {protected final Logger logger = Logger.getLogger(getClass());public boolean send(MailEntity mail) {// 发送emailHtmlEmail email = new HtmlEmail();try {// 这里是SMTP发送服务器的名字:163的如下:"smtp.163.com"email.setHostName(mail.getHost());// 字符编码集的设置email.setCharset(MailEntity.ENCODEING);// 收件人的邮箱email.addTo(mail.getReceiver());// 发送人的邮箱email.setFrom(mail.getSender(), mail.getName());// 如果需要认证信息的话,设置认证:用户名-密码。分别为发件人在邮件服务器上的注册名称和密码email.setAuthentication(mail.getUsername(), mail.getPassword());// 要发送的邮件主题email.setSubject(mail.getSubject());// 要发送的信息,由于使用了HtmlEmail,可以在邮件内容中使用HTML标签email.setMsg(mail.getMessage());// 发送email.send();if (logger.isDebugEnabled()) {logger.debug(mail.getSender() + " 发送邮件到 " + mail.getReceiver());}return true;} catch (EmailException e) {e.printStackTrace();logger.info(mail.getSender() + " 发送邮件到 " + mail.getReceiver() + " 失败");return false;}}}

MailEntity实体类

package com.eliteams.quick4j.web.notifyauthor;import java.io.Serializable;/*** Created by 18358 on 2016/11/21.*/
public class MailEntity implements Serializable {public static final String ENCODEING = "UTF-8";private String host; // 服务器地址private String sender; // 发件人的邮箱private String receiver; // 收件人的邮箱private String name; // 发件人昵称private String username; // 账号private String password; // 密码private String subject; // 主题private String message; // 信息(支持HTML)public MailEntity() {}public MailEntity(String host, String sender, String receiver, String name, String username, String password, String subject, String message) {this.host = host;this.sender = sender;this.receiver = receiver;this.name = name;this.username = username;this.password = password;this.subject = subject;this.message = message;}public String getHost() {return host;}public void setHost(String host) {this.host = host;}public String getSender() {return sender;}public void setSender(String sender) {this.sender = sender;}public String getReceiver() {return receiver;}public void setReceiver(String receiver) {this.receiver = receiver;}public String getName() {return name;}public void setName(String name) {this.name = name;}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 getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}

依赖关系 补充一下:

     <dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-email</artifactId><version>1.3.2</version></dependency>

如果出现发送失败的情况 多数原因是 因为 邮箱设置问题,这里的邮箱密码是 授权码,可以到邮箱中设置。
附一张 结果图 和设置图

新手 。。学习中,不对的地方多担待,有好的方法可以提出来 大家一起学习!!!

定时监控服务端口是否正常 发送邮件相关推荐

  1. Prometheus 监控服务端口、网站状态等(黑盒监测)

    1.blackbox_exporter介绍 blackbox_exporter是Prometheus 官方提供的 exporter 之一,可以提供 http.dns.tcp.icmp 的监控数据采集. ...

  2. 利用 zabbix 监控服务端口

    后台和服务端开发,一般会有很多服务需要监控和维护.有的时候,运维资源有限,再加上服务还没有达到一定的规模,服务前期都要靠开发自己运维维护. 一般情况,我会在每个服务中写个监控报警邮件,当服务挂了就发邮 ...

  3. prometheus jmx-exporter 暴漏HTTP服务端口无法获取监控数据

    1. 问题描述   通过 -javaagent 方式挂载的 jmx_prometheus_javaagent-0.15.0.jar 代理包对接prometheus监控,通过暴露的HTTP服务端口无法获 ...

  4. linux监控服务报警,linux服务器监控手机报警

    SA对于服务器的监控是很必要的,但是如果管理的服务器很多,也不可能24小时在线监控. 本文的主要内容就是实现,服务器如果出现异常,会通过短信方式,直接把服务器当前状况发送到管理员手机,SA可以第一时间 ...

  5. Zabbix监控服务详解+实战

    目录 一.监控体系概述 1. 为什么需要监控 2. 监控目标与流程 (1)监控的目标 (2) 监控的流程 3. 监控的对象 (1)CPU监控 (2)磁盘监控 (3)内存监控 (4)网络监控 (5) 系 ...

  6. 【Jenkins自动化部署】监控服务自动化构建

    系列文章目录 第一章 Ubuntu部署Jenkins服务端 第二章 Linux节点的Python服务自动化构建 第三章 Windows节点Python服务自动化构建 第四章 Vue服务自动化打包构建 ...

  7. 安装Redis Live监控服务

    redis live为监控redis服务的软件,带有监控web界面. 流传于互联网的各种教程,都有个巨大的让人搞不太清楚的问题.就是到底RedisStatsServer 6381端口哪里来的问题. 月 ...

  8. Linux下用MRTG监控网络设备端口流量

    Linux下用mrtg监控网络设备端口流量 被监控设备必须支持snmp协议,因为mrtg就是通过snmp协议来获取该设备的端口流量信息.如何在一个网络设备上启用snmp协议呢? 在配置模式下执行如下命 ...

  9. linux 常见服务端口

    Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程(daemons) 来执行的.守护进 ...

  10. 关于批量启动微服务的jar包_分布式任务抢占及系统监控服务 Radish

    分布式任务抢占及系统监控服务. 适用于中小微企业,将系统任务独立部署,统一管理.区别与传统的嵌入在系统中的任务, 可以很好的解耦任务服务. 具有以下优势: 方便灵活的配置系统和强大的容错重试以及报警机 ...

最新文章

  1. grails的controller和action那点事---远程调试groovy代码
  2. 应用系统瓶颈排查和分析的思考-Arthas 实战
  3. 微信环境中如何实现下载apk文件的下载
  4. datagrid如何获取一行数据中的某个字段值_MySQL 如何查找删除重复行?
  5. 遍历字符串的每个字符python_Python之字符串的遍历的4种方式
  6. MVC架构接收jsp页面传值
  7. 三种安防监控摄像机供电方式,如何合理选择?
  8. 【Python基础入门系列】第08天:Python List
  9. linux安装或卸载mysql5,Linux环境下卸载、安装及配置MySQL5.1
  10. 动态规划之01背包问题(最易理解的讲解)
  11. 使用python来读取超大型文件数据
  12. 区分clientHeight、scrollHeight、offsetHeight
  13. python写刷课脚本_python opencv 知到 刷课 脚本
  14. 计算机网络原理实验一--网线的制作
  15. [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.22
  16. Maya-Mel-1:入门数据类型
  17. OpenTCS打造移动机器人交通管制系统(四)
  18. 【Qt】Qt运行时Cannot retrieve debugging output错误
  19. 搬砖:面向对象六大原则
  20. 科技圈的“三座大山”正在崩塌中。。。

热门文章

  1. 【Android -- 职业】职业规划
  2. python tokenize()_tokenize (Language) – Python 中文开发手册 - Break易站
  3. .NET反编译:使用NET.Reflector+Reflexil插件相结合实现对DLL文件的修改操作
  4. wordpress启动_使用Wumblr在WordPress中启动微博
  5. iOS麦克风运用——腾讯微博“吹一吹”
  6. 上手TaoTronics家用暖风机体验
  7. 怎样成为优秀的测试工程师
  8. 爱思服务器能不能更新苹果手机系统,苹果手机系统升级带来的利和弊,你知道多少?...
  9. 封装获取一个URL地址问号后面传递的参数信息以及哈希值HASH 方法
  10. 第二篇:呈现内容_第一节:Control呈现