132
|
1 /*******************************************************************************
|
|
2
|
|
3 copyright: Copyright (c) 2004 Kris Bell. All rights reserved
|
|
4
|
|
5 license: BSD style: $(LICENSE)
|
|
6
|
|
7 version: Initial release: May 2004
|
|
8
|
|
9 author: Kris
|
|
10
|
|
11 *******************************************************************************/
|
|
12
|
|
13 module tango.util.log.MailAppender;
|
|
14
|
|
15 private import tango.util.log.Appender;
|
|
16
|
|
17 private import tango.io.Buffer,
|
|
18 tango.net.SocketConduit,
|
|
19 tango.net.InternetAddress;
|
|
20
|
|
21 /*******************************************************************************
|
|
22
|
|
23 Appender for sending formatted output to a Mail server. Thanks
|
|
24 to BCS for posting how to do this.
|
|
25
|
|
26 *******************************************************************************/
|
|
27
|
|
28 public class MailAppender : Appender
|
|
29 {
|
|
30 private char[] to,
|
|
31 from,
|
|
32 subj;
|
|
33 private Mask mask;
|
|
34 private InternetAddress server;
|
|
35
|
|
36 /***********************************************************************
|
|
37
|
|
38 Create with the given layout and server address
|
|
39
|
|
40 ***********************************************************************/
|
|
41
|
|
42 this (InternetAddress server, char[] from, char[] to, char[] subj, EventLayout layout = null)
|
|
43 {
|
|
44 setLayout (layout);
|
|
45
|
|
46 this.to = to;
|
|
47 this.from = from;
|
|
48 this.subj = subj;
|
|
49 this.server = server;
|
|
50
|
|
51 // Get a unique fingerprint for this appender
|
|
52 mask = register (to ~ subj);
|
|
53 }
|
|
54
|
|
55 /***********************************************************************
|
|
56
|
|
57 Send an event to the mail server
|
|
58
|
|
59 ***********************************************************************/
|
|
60
|
|
61 synchronized void append (Event event)
|
|
62 {
|
|
63 auto conduit = new SocketConduit;
|
|
64 scope (exit)
|
|
65 conduit.close;
|
|
66
|
|
67 conduit.connect (server);
|
|
68 auto emit = new Buffer (conduit);
|
|
69
|
|
70 emit ("HELO none@anon.org\r\nMAIL FROM:<")
|
|
71 (from)
|
|
72 (">\r\nRCPT TO:<")
|
|
73 (to)
|
|
74 (">\r\nDATA\r\nSubject: ")
|
|
75 (subj)
|
|
76 ("\r\nContent-Type: text/plain; charset=us-ascii\r\n\r\n");
|
|
77
|
|
78 auto layout = getLayout();
|
|
79 emit (layout.header (event));
|
|
80 emit (layout.content (event));
|
|
81 emit (layout.footer (event));
|
|
82 emit ("\r\n.\r\nQUIT\r\n");
|
|
83 emit ();
|
|
84 }
|
|
85
|
|
86 /***********************************************************************
|
|
87
|
|
88 Return the fingerprint for this class
|
|
89
|
|
90 ***********************************************************************/
|
|
91
|
|
92 Mask getMask ()
|
|
93 {
|
|
94 return mask;
|
|
95 }
|
|
96
|
|
97 /***********************************************************************
|
|
98
|
|
99 Return the name of this class
|
|
100
|
|
101 ***********************************************************************/
|
|
102
|
|
103 char[] getName ()
|
|
104 {
|
|
105 return this.classinfo.name;
|
|
106 }
|
|
107 }
|