]> git.pld-linux.org Git - projects/pld-builder.new.git/blame - PLD_Builder/mailer.py
Typo.
[projects/pld-builder.new.git] / PLD_Builder / mailer.py
CommitLineData
dfff8bd5
MM
1# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
2
b5a39692
MM
3import time
4import os
5import sys
6import StringIO
7
8from config import config
c8782384 9import util
bd363148 10import log
b5a39692 11
070a4e64
MM
12def recode(s):
13 if s.__class__ == ''.__class__:
14 return s.decode('iso-8859-1', 'replace').encode('us-ascii', 'replace')
15 else:
16 return s.encode('us-ascii', 'replace')
17
b5a39692 18class Message:
dfff8bd5
MM
19 def __init__(self):
20 self.headers = {}
21 self.body = StringIO.StringIO()
22 self.set_std_headers()
b5a39692 23
dfff8bd5
MM
24 def set_header(self, n, v):
25 self.headers[n] = v
b5a39692 26
dfff8bd5
MM
27 def set_headers(self, to = None, cc = None, subject = None):
28 if to != None:
29 self.set_header("To", to)
30 if cc != None:
31 self.set_header("Cc", cc)
32 if subject != None:
33 self.set_header("Subject", subject)
b5a39692 34
b2bdcf0e
JR
35 def remove_header(self, n):
36 if n in self.headers:
a7272634 37 del self.headers[n]
b2bdcf0e 38
dfff8bd5 39 def write_line(self, l):
070a4e64 40 self.body.write(recode("%s\n" % l))
b5a39692 41
dfff8bd5 42 def write(self, s):
070a4e64 43 self.body.write(recode(s))
b5a39692 44
dfff8bd5
MM
45 def append_log(self, log):
46 s = os.stat(log)
47 if s.st_size > 50000:
48 # just head and tail
49 f = open(log)
50 line_cnt = 0
51 for l in f.xreadlines():
52 line_cnt += 1
53 f.seek(0)
54 line = 0
55 for l in f.xreadlines():
56 if line < 100 or line > line_cnt - 100:
070a4e64 57 self.body.write(recode(l))
dfff8bd5
MM
58 if line == line_cnt - 100:
59 self.body.write("\n\n[...]\n\n")
60 line += 1
61 else:
62 util.sendfile(open(log), self.body)
b5a39692 63
dfff8bd5
MM
64 def set_std_headers(self):
65 self.headers["Date"] = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime())
66 self.headers["Message-ID"] = "<pld-builder.%f.%d@%s>" \
67 % (time.time(), os.getpid(), os.uname()[1])
68 self.headers["From"] = "PLD %s builder <%s>" \
69 % (config.builder, config.email)
70 self.headers["X-PLD-Builder"] = config.builder
b5a39692 71
dfff8bd5
MM
72 def write_to(self, f):
73 for k, v in self.headers.items():
74 f.write("%s: %s\n" % (k, v))
75 f.write("\n")
76 self.body.seek(0)
77 util.sendfile(self.body, f)
b5a39692 78
dfff8bd5 79 def send(self):
d3a5c9ef
ER
80 if not os.path.exists("/usr/lib/sendmail"):
81 # TODO: dump to file?
82 log.alert("/usr/lib/sendmail doesn't exist: Can't send email")
bd363148 83 return False
d3a5c9ef 84 send_sendmail = "/usr/lib/sendmail -i -t -f %s" % config.admin_email
dfff8bd5 85 f = os.popen(send_sendmail, "w")
d6d54f89
AM
86 try:
87 self.write_to(f)
88 except IOError, e:
89 log.alert("sending email message failed: %s" % e)
90 f.close()
91 return False
bd363148 92 return f.close()
This page took 0.087047 seconds and 4 git commands to generate.