2

我有一个程序从数据库中读取数据并进行一些计算。我在 try and catch 语句中使用它并使用 e.printstackfree() 打印错误。但是,有没有一种方法可以通过电子邮件发送错误而不是将错误输出给用户。

如:

 try{
   Statement  stmt = connection.createStatement();
   ............
 }catch(SQLException e){
   System.err.print("\nDriver Error: " +"'" + e.getMessage()+"'");
   e.printStackFree();
  //email e.printStackFree() using javax mail API

 }

现在,我在想的是,如果我使用 javax 邮件 API 通过电子邮件发送错误会怎样。再次,问题是我该怎么做?

这是我到目前为止所拥有的:

try{
      Statement  stmt = connection.createStatement();
     ............
}catch(SQLException e){
 final Message message;

 Properties props = System.getProperties();
 props.put("mail.smtp.host", "smtp.gmail.com");
 Session session = Session.getInstance(props, null);
 message = new MimeMessage(session);
 message.setFrom(new InternetAddress("fromEmail@gmail.com")); //from

message.setRecipient(Message.RecipientType.TO, new InternetAddress("toEmail@gmail.com"));

message.setSubject("Testing Error");

message.setContent("'"+e+"'", "text/html");

Transport.send(message);
System.out.println("Sent Email!!!");

}

谢谢...

4

2 回答 2

2

其实没那么难:D

try{
   Statement stmt = connection.createStatement();
   .......................
} catch (Exception e) {
     String host = "smtp.google.com";
     String sender= "fromEmail@gmail.com";
     String recipiant = "toEmail@mail.com";

     StringWriter tracewriter = new StringWriter();
     e.printStackTrace(tracewriter);
     String trace = tracewriter.toString();

     Properties props= System.getProperties();
     props.setPropertie("mail.smtp.host", host);

     Session session = Session.getDefaultInstance(props);

     try{
         MineMessage message = new MimeMessage(session);
         message.setFrom(new InternetAddress(sender));
         message.addRecipiant(Message.RecipiantType.TO, new InternetAddress(recipiant));
         message.setSubject("Testing Error");
         message.setText(trace);

         Transport.send(message);
         System.out.println("An administrator has been notified");
     } catch (Exception ex) {
         ex.printStackTrace();
     }
}

我们只需将 传递StringBuilderprintStackTrace异常的方法,读取组合字符串toString并将其作为电子邮件发送。

现在,只要数据库查询出现异常以及您在该尝试中所做的任何其他事情,您就应该能够发送电子邮件。

于 2013-07-12T14:35:21.867 回答
1

e.printStackTrace() 可以传递一个 PrintStream 或 PrintWriter。这使您可以将堆栈跟踪输出到 System.out 以外的其他位置。

将它“输出”到的一个好地方是 StringWriter。它在内存中并写入字符串。然后,您可以将其添加到您的电子邮件中。

于 2013-07-12T14:21:53.357 回答