网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  学习自定义smtpappender中的源码     
  文章作者:未知  文章来源:水木森林  
  查看:112次  录入:管理员--2007-11-17  
 
  package piv.zheng.log4j.test;
  
  import org.apache.log4j.appenderskeleton;
  import org.apache.log4j.layout;
  import org.apache.log4j.helpers.loglog;
  import org.apache.log4j.spi.loggingevent;
  import org.apache.log4j.spi.errorcode;
  import java.util.properties;
  import java.util.date;
  
  import javax.mail.session;
  import javax.mail.transport;
  import javax.mail.message;
  import javax.mail.messagingexception;
  import javax.mail.internet.mimemessage;
  import javax.mail.multipart;
  import javax.mail.internet.mimemultipart;
  import javax.mail.internet.mimebodypart;
  import javax.mail.internet.internetaddress;
  import javax.mail.internet.addressexception;
  
  public class smtpappender extends appenderskeleton {
  private string to; //收件人
  private string from; // 发件人
  private string subject; //邮件标题
  private string smtphost; //邮件服务器
  private string auth; //身份验证标识
  private string username; //用户
  private string password; //密码
  private boolean locationinfo = false;
  
  protected session ses;
  protected message msg;
  protected properties props;
  
  public smtpappender() {}
  
  public smtpappender(layout layout) {
  
  this.layout = layout;
  
  }
  
  //应用设置
  public void activateoptions() {
  props = new properties(system.getproperties());
  if (smtphost != null) {
  props.put("mail.smtp.host", smtphost);
  }
  if (auth != null) {
  props.put("mail.smtp.auth", auth);
  }
  if (username != null) {
  props.put("username", username);
  }
  if (password != null) {
  props.put("password", password);
  }
  ses = session.getinstance(props); //创建session
  
  msg = new mimemessage(ses); //创建message
  
  try {
  //为message设置发件人
  if (from != null) {
  msg.setfrom(getaddress(from));
  } else {
  msg.setfrom();
  }
  
  //为message设置收件人
  if (to != null) {
  msg.setrecipients(message.recipienttype.to, parseaddress(to));
  }
  
  //为message设置标题
  if (subject != null) {
  msg.setsubject(subject);
  }
  } catch (messagingexception e) {
  loglog.error("could not activate smtpappender options.", e);
  }
  }
  
  //重写执行方法,当执行日志输出时会被调用
  public void append(loggingevent event) {
  //检查message及layout
  if (!checkentryconditions()) {
  return;
  }
  
  event.getthreadname();
  event.getndc();
  if (locationinfo) {
  event.getlocationinformation();
  }
  
  //发送邮件
  sendbuffer(event);
  }
  
  protected boolean checkentryconditions() {
  if (this.msg == null) {
  errorhandler.error("message object not configured.");
  return false;
  }
  
  if (this.layout == null) {
  errorhandler.error("no layout set for appender named [" + name + "].");
  return false;
  }
  return true;
  }
  
  synchronized public void close() {
  this.closed = true;
  }
  
  internetaddress getaddress(string addressstr) {
  try {
  return new internetaddress(addressstr);
  } catch (addressexception e) {
  errorhandler.error("could not parse address [" + addressstr + "].", e, errorcode.address_parse_failure);
  return null;
  }
  }
  
  internetaddress[] parseaddress(string addressstr) {
  try {
  return internetaddress.parse(addressstr, true);
  } catch (addressexception e) {
  errorhandler.error("could not parse address [" + addressstr + "].", e, errorcode.address_parse_failure);
  return null;
  }
  }
  
  public boolean requireslayout() {
  return true;
  }
  
  //发送邮件
  protected void sendbuffer(loggingevent event) {
  try {
  //将日志信息设置到message中
  mimebodypart part = new mimebodypart();
  
  stringbuffer sbuf = new stringbuffer();
  string t = layout.getheader();
  if (t != null) {
  sbuf.append(t);
  }
  sbuf.append(layout.format(event));
  if (layout.ignoresthrowable()) {
  string[] s = event.getthrowablestrrep();
  if (s != null) {
  for (int j = 0; j < s.length; j++) {
  sbuf.append(s[j]);
  }
  }
  }
  t = layout.getfooter();
  if (t != null) {
  sbuf.append(t);
  }
  part.setcontent(sbuf.tostring(), layout.getcontenttype());
  
  multipart mp = new mimemultipart();
  mp.addbodypart(part);
  
  msg.setcontent(mp); //为message设置内容,即日志信息
  msg.setsentdate(new date()); //为message设置发送时间
  
  //发送邮件
  transport tr = ses.gettransport("smtp");
  tr.connect(smtphost, username, password);
  tr.sendmessage(msg, msg.getrecipients(message.recipienttype.to));
  tr.close();
  } catch (exception e) {
  loglog.error("error occured while sending e-mail notification.", e);
  }
  }
  
  public void setto(string to) {
  this.to = to;
  }
  
  public string getto() {
  return to;
  }
  
  public void setfrom(string from) {
  this.from = from;
  }
  
  public string getfrom() {
  return from;
  }
  
  public string getsubject() {
  return subject;
  }
  
  public void setsubject(string subject) {
  this.subject = subject;
  }
  
  public void setsmtphost(string smtphost) {
  this.smtphost = smtphost;
  }
  
  public string getsmtphost() {
  return smtphost;
  }
  
  public void setauth(string auth) {
  this.auth = auth;
  }
  
  public string getauth() {
  return auth;
  }
  
  public void setusername(string username) {
  this.username = username;
  }
  
  public string getusername() {
  return username;
  }
  
  public void setpassword(string password) {
  this.password = password;
  }
  
  public string getpassword() {
  return password;
  }
  
  public void setlocationinfo(boolean locationinfo) {
  this.locationinfo = locationinfo;
  }
  
  public boolean getlocationinfo() {
  return locationinfo;
  }
  }
 
 
上一篇: 在wicket里面使用一个自己websession    下一篇: jfcunit测试gui的一个实例(代码篇)
  相关文档
实战java多线程编程精要之限制优先级 11-16
java中使用xml创建email模板 11-16
java命名人谈java 11-17
技术分析java类加载内幕详细讲解一(图) 11-17
java中鲜为人知的缺点(上) 11-17
nhibernate学习入门 11-17
java对domino objects的访问 (1) 11-17
java的classpath全解 11-17
学java的几点建议 11-17
3d编程指南第二部分:光的3d理论与定位 11-17
java的逗号运算符 11-17
[webservices]xfire web服务的单元测试 11-17
sca及未来的开发 11-17
用jwsdp将java和web服务结合起来 11-17
java的关系运算符 11-17
j2me中定点库mathfp使用入门 11-16
java项目中连接数据库的几种方式和范例 11-17
一个简单编程思想在php与java中的实现比较:日期类 11-17
对java多线程的一些总结 11-17
jbuilder9+weblogic7.0完全攻略 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息