Java定时执行ping命令,当ping不通时发邮件
2015-03-12 16:54
281 查看
1.定时器代码 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; import java.util.Timer; import java.util.TimerTask; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import com.cvicse.mail.pingIP.TimerTaskTest; public class sendmail implements ServletContextListener{ public void contextDestroyed(ServletContextEvent arg0) { } public void contextInitialized(ServletContextEvent arg0) { //pingIP,当ping不同时发送邮件 Timer timer3 = new Timer(); timer3.schedule(new TimerTaskTest(), 1000, 2000); } }
2.Java执行ping命令,以及发送邮件代码
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Properties; import java.util.TimerTask; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.servlet.ServletContext; public class TimerTaskTest extends TimerTask{ private static SendMailConfig mailconfig = new SendMailConfig(); private String _content="邮件内容"; private String _subject="邮件标题"; private String[] _to = {"收件人邮箱","收件人邮箱"}; private ServletContext context = null; @Override public void run() { boolean result = this.isReachable("fzkt.lixiaedu.com", 1, 5000); if(!result){ Properties props = new Properties(); //SMTP服务器 props.put("mail.smtp.host", mailconfig.get_Host()); //是否需要SMTP验证 props.put("mail.smtp.auth", mailconfig.get_IsSTMP()); try{ Session mailSession = Session.getDefaultInstance(props); //是否打印debug //mailSession.setDebug(true); Message message=new MimeMessage(mailSession); //发件人 message.setFrom(new InternetAddress(mailconfig.get_From())); int len=_to.length; InternetAddress[] address=new InternetAddress[len]; for (int i = 0; i < _to.length; i++) { address[i]=new InternetAddress(_to[i]); } //收件人 message.addRecipients(Message.RecipientType.TO,address); //邮件主题 message.setSubject(this._subject); //邮件内容 message.setContent(this._content,"text/html; charset=utf-8"); message.saveChanges(); Transport transport = mailSession.getTransport("smtp"); transport.connect(mailconfig.get_Host(), mailconfig.get_UserName(), mailconfig.get_UserPwd()); transport.sendMessage(message, message.getAllRecipients()); transport.close(); }catch(Exception e){ System.out.println(e); } } } /** * * 测试是否能ping通 * * @param server * * @param timeout * * @return * */ public boolean isReachable(String remoteIpAddress,int pingTimes,int timeOut) { BufferedReader in = null; Runtime r = Runtime.getRuntime(); // 将要执行的ping命令,此命令是windows格式的命令 String pingCommand = "ping " + remoteIpAddress + " -n " + pingTimes + " -w " + timeOut; try { Process p = r.exec(pingCommand); if (p == null) { return false; } in = new BufferedReader(new InputStreamReader(p.getInputStream())); // 逐行检查输出,计算类似出现=23ms TTL=62字样的次数 int connectedCount = 0; String line = null; while ((line = in.readLine()) != null) { connectedCount += getCheckResult(line); } // 如果出现类似=23ms TTL=62这样的字样,出现的次数=测试次数则返回真 return connectedCount == pingTimes; } catch (Exception ex) { // 出现异常则返回假 return false; } finally { try { in.close(); } catch (IOException e) { } } } /** * * 若line含有=18ms TTL=16字样,说明已经ping通,返回1,否則返回0. * * @param line * * @return * */ private static int getCheckResult(String line) { // System.out.println("控制台输出的结果为:"+line); Pattern pattern = Pattern.compile("(\\d+ms)(\\s+)(TTL=\\d+)", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(line); while (matcher.find()) { return 1; } return 0; } }
3.配置代码
public class SendMailConfig { private String _Host;// stmp服务器地址 private String _IsSTMP;//是否stmp private String _UserName;//邮箱登陆名 private String _UserPwd;//邮箱密码 private String _From;//发送人 public SendMailConfig() { _Host="smtp.163.com"; _IsSTMP = "true"; _UserName = "发件人邮箱名"; _UserPwd ="发件人邮箱密码"; _From ="发件人邮箱密码"; } public String get_Host() { return _Host; } public void set_Host(String host) { _Host = host; } public String get_IsSTMP() { return _IsSTMP; } public void set_IsSTMP(String isSTMP) { _IsSTMP = isSTMP; } public String get_UserName() { return _UserName; } public void set_UserName(String userName) { _UserName = userName; } public String get_UserPwd() { return _UserPwd; } public void set_UserPwd(String userPwd) { _UserPwd = userPwd; } public String get_From() { return _From; } public void set_From(String from) { _From = from; } }
注意:有的电脑可能ping命令不能用,提示“ping不是内部或外部命令”,解决方法:
如果你的是XP的话,你在我的电脑上右键属性,高级里面找环境变量,找见path,如果没有,自己新建一条,编辑path,粘贴上 %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\system32\WBEM
相关文章推荐
- Dos命令--ping不通某机器则执行脚本
- linux机器上执行ping命令的java方法
- java 程序 定时执行某命令
- linux机器上执行ping命令的java方法
- Java定时重复执行程序
- java执行命令或调用其他exe程序的代码范例
- 利用Java调用可执行命令
- 在启动脚本中一般使用类似如下的命令执行一个Java程序
- 利用Java调用可执行命令
- JAVA实用技巧:定时执行任务的三种方法
- 使用Spring来发邮件和执行定时任务
- [开发技巧] Java调用可执行程序和批处理命令
- Java执行外部命令,并把结果回显到控制台
- Java执行命令
- Java定时重复执行程序
- java基础学习---命令行编译执行java类
- Java /Jsp 执行操作系统命令 windows/Linux
- [JAVA100例]041、执行系统命令(java100例)
- 利用Java调用可执行命令实例
- 使用Java基础定时执行程序