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