定时监控服务端口是否正常 发送邮件
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秒
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
Timer timer = new Timer();
// 具体监控任务实施类
ListennerTask listennerTask = new ListennerTask();
// 定时执行任务
timer.schedule(listennerTask,0,LISTEN_TIME);
}
@Override
public 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 ;
@Override
public 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对象构建一个session
Session 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) {
// 发送email
HtmlEmail 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>
如果出现发送失败的情况 多数原因是 因为 邮箱设置问题,这里的邮箱密码是 授权码,可以到邮箱中设置。
附一张 结果图 和设置图
新手 。。学习中,不对的地方多担待,有好的方法可以提出来 大家一起学习!!!