X-Git-Url: https://git.sommitrealweird.co.uk/eoc.git/blobdiff_plain/72bfb8118cf8cc61c2bdc284562ea5a050cd207e..747343e09d2930ebc783f9cc657a87877e823fb8:/eoc.py diff --git a/eoc.py b/eoc.py index 537bccd..52621bc 100644 --- a/eoc.py +++ b/eoc.py @@ -491,28 +491,32 @@ class MailingList: return True def mime_encode_headers(self, text): - headers, body = text.split("\n\n", 1) - - list = [] - for line in headers.split("\n"): - if line[0].isspace(): - list[-1] += line - else: - list.append(line) - - headers = [] - for header in list: - if self.nice_7bit(header): - headers.append(header) - else: - if ": " in header: - name, content = header.split(": ", 1) + try: + headers, body = text.split("\n\n", 1) + + list = [] + for line in headers.split("\n"): + if line[0].isspace(): + list[-1] += line else: - name, content = header.split(":", 1) - hdr = email.Header.Header(content, "utf-8") - headers.append(name + ": " + hdr.encode()) - - return "\n".join(headers) + "\n\n" + body + list.append(line) + + headers = [] + for header in list: + if self.nice_7bit(header): + headers.append(header) + else: + if ": " in header: + name, content = header.split(": ", 1) + else: + name, content = header.split(":", 1) + hdr = email.Header.Header(content, "utf-8") + headers.append(name + ": " + hdr.encode()) + + return "\n".join(headers) + "\n\n" + body + except: + error("Cannot MIME encode header, using original ones, sorry") + return text def template(self, template_name, dict): lang = self.cp.get("list", "language") @@ -846,15 +850,23 @@ class MailingList: return mail headers = mail[:endpos].split("\n") body = mail[endpos:] + + headers_to_remove = [x.lower() for x in headers_to_remove] remaining = [] add_continuation_lines = 0 + for header in headers: - pos = header.find(":") - if pos == -1: + if header[0] in [' ','\t']: + # this is a continuation line if add_continuation_lines: remaining.append(header) else: + pos = header.find(":") + if pos == -1: + # malformed message, try to remove the junk + add_continuation_lines = 0 + continue name = header[:pos].lower() if name in headers_to_remove: add_continuation_lines = 0 @@ -874,7 +886,7 @@ class MailingList: if "base64" in text or "BASE64" in text: import StringIO for line in StringIO.StringIO(text): - if line.lower.startswith("content-transfer-encoding:") and \ + if line.lower().startswith("content-transfer-encoding:") and \ "base64" in line.lower(): return text return text + self.template("footer", {})