123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
|
/*******************************************************************************
copyright: Copyright (c) 2004 Kris Bell. All rights reserved
license: BSD style: $(LICENSE)
version: Initial release: May 2004
author: Kris
*******************************************************************************/
module tango.util.log.AppendMail;
private import tango.util.log.Log;
private import tango.io.stream.Buffered;
private import tango.net.device.Socket,
tango.net.InternetAddress;
/*******************************************************************************
Appender for sending formatted output to a Mail server. Thanks
to BCS for posting how to do this.
*******************************************************************************/
public class AppendMail : Appender
{
private char[] to,
from,
subj;
private Mask mask_;
private InternetAddress server;
/***********************************************************************
Create with the given layout and server address
***********************************************************************/
this (InternetAddress server, char[] from, char[] to, char[] subj, Appender.Layout how = null)
{
layout (how);
this.to = to;
this.from = from;
this.subj = subj;
this.server = server;
// Get a unique fingerprint for this appender
mask_ = register (to ~ subj);
}
/***********************************************************************
Send an event to the mail server
***********************************************************************/
override final void append (LogEvent event)
{
synchronized
{
auto conduit = new Socket;
scope (exit)
conduit.close();
conduit.connect (server);
auto emit = new Bout (conduit);
emit.append ("HELO none@anon.org\r\nMAIL FROM:<")
.append (from)
.append (">\r\nRCPT TO:<")
.append (to)
.append (">\r\nDATA\r\nSubject: ")
.append (subj)
.append ("\r\nContent-Type: text/plain; charset=us-ascii\r\n\r\n");
layout.format (event, &emit.write);
emit.append ("\r\n.\r\nQUIT\r\n");
emit.flush();
}
}
/***********************************************************************
Return the fingerprint for this class
***********************************************************************/
@property override final const Mask mask ()
{
return mask_;
}
/***********************************************************************
Return the name of this class
***********************************************************************/
@property override final const const(char)[] name ()
{
return this.classinfo.name;
}
}
|