From 45552a9cb1ac5433fd2010d1736b41a3393b9b6b Mon Sep 17 00:00:00 2001 From: Matěj Cepl Date: Mon, 22 Dec 2014 02:40:39 +0100 Subject: pygm2n and mail2news also use email.Parser. --- cleanup_failing.patch | 216 -------------------------------------------------- 1 file changed, 216 deletions(-) (limited to 'cleanup_failing.patch') diff --git a/cleanup_failing.patch b/cleanup_failing.patch index 480d2d3..d7d049f 100644 --- a/cleanup_failing.patch +++ b/cleanup_failing.patch @@ -2,15 +2,6 @@ diff --git b/mail2news.py a/mail2news.py index e7cbcf9..412e4ee 100644 --- b/mail2news.py +++ a/mail2news.py -@@ -14,6 +16,8 @@ Gets news email and sends it via SMTP. - class mail2news is hopefully conform to rfc850. - - """ -+ -+import email - import sys - from os import getpid - from socket import gethostbyaddr, gethostname @@ -24,80 +28,41 @@ import pyginfo class mail2news: @@ -24,33 +15,6 @@ index e7cbcf9..412e4ee 100644 user = None password = None -- hostname = gethostbyaddr(gethostname())[0] -- -- heads_dict, smtpheads, nntpheads = {}, {}, {} -- email, headers, body = [], [], [] -- -- def readfile(self, opt): -- -- for line in sys.stdin.readlines(): -- self.email.append(line) -- -- if(len(self.email) == 1 and self.email[0][0] == '/'): -- file = self.email[0][:-1] -- del self.email[0] -- for line in open(file, 'r').readlines(): -- self.email.append(line) -- -- # introduce nntpheads -- if opt.newsgroup != '': -- # TODO put it directly to self.message when we have it -- self.nntpheads['Newsgroups:'] = opt.newsgroup + '\n' -- if opt.approver != '': -- self.nntpheads['Approved:'] = opt.approver + '\n' -+ def __init__(self): -+ self.hostname = gethostbyaddr(gethostname())[0] -+ self.message = email.message_from_file(sys.stdin) - -- return 1 +# """phase 3: +# format rfc 822 headers from input article +# """ @@ -67,98 +31,6 @@ index e7cbcf9..412e4ee 100644 +# for line in m2n.headers: +# print line[:-1] -- def parseemail(self): -+ def x_parseemail(self): - """get news email from file or stdin and separate heads from body - - REMEBER: headers value has '\n' as last char. - Use string[:-1] to ignore newline. - """ -- -- try: -- body = 0 # are we in body or in headers? -- -- for line in self.email: -- if not body and len(line) == 1: -- body = 1 # starts email body section -- -- if not body: -- try: -- # if it is a multi-line header like Received: -- if line[0] not in [' ', '\t']: -- try: -- head, value = line.split(' ', 1) -- except ValueError: -- value = '' -- self.smtpheads[head] = value -- else: -- self.smtpheads[head] = '%s%s' % \ -- (self.smtpheads[head], line) -- except (ValueError), message: -- print('line: %s' % line) -- print('(probably missing couple "Header: value" in %s)' -- % line) -- sys.exit(1) -- -- elif len(line) > 0 and body: -- self.body.append(line) -- -- except (ValueError), message: -- print message -- sys.exit(1) -- -- return self.smtpheads, self.body -+ # return self.smtpheads, self.body -+ # self.smtpheads contains headers, self.body body -+ pass - - def puthead(self, dict, list, key): - """private, transform dict entries in list entries -@@ -105,33 +70,34 @@ class mail2news: - """ - - if key in dict: -- list.append(key + ' ' + dict.get(key)) -+ list.append(key + ' ' + dict[key]) # FIXME: Message instance doesn't have append - del dict[key] - else: - return 0 - return 1 - - def sortheads(self): -- """make list sorted by heads: From: To: Subject: first, -- others, X-*, X-Resent-* last""" -+ """make list sorted by heads: -+ From: To: Subject: first, others, X-*, X-Resent-* last""" - - # put at top - set = ('Newsgroups:', 'From:', 'To:', 'X-To:', 'Cc:', 'Subject:', - 'Date:', 'Approved:', 'References:', 'Message-Id:') - - for k in set: -- self.puthead(self.heads_dict, self.headers, k) -+ self.puthead(self.heads_dict, self.message, k) - -- for k in self.heads_dict.keys(): -- if k[:2] != 'X-' and k[:9] != 'X-Resent-' and k not in set: -+ for k in self.message: -+ if not k.startswith('X-') and not k.startswith('X-Resent-') and \ -+ k not in set: - self.puthead(self.heads_dict, self.headers, k) - -- for k in self.heads_dict.keys(): -- if k[:2] == 'X-': -+ for k in self.message: -+ if k.startswith('X-'): - self.puthead(self.heads_dict, self.headers, k) - -- for k in self.heads_dict.keys(): -- if k[:9] == 'X-Resent-': -+ for k in self.message: -+ if k.startswith('X-Resent-'): - self.puthead(self.heads_dict, self.headers, k) - - return self.headers @@ -142,14 +108,11 @@ class mail2news: self.heads_dict = {} @@ -178,94 +50,6 @@ index e7cbcf9..412e4ee 100644 except KeyError, message: print message -@@ -160,22 +123,8 @@ class mail2news: - """ - - info = pyginfo.pygsinfo() -- -- try: -- self.heads_dict['X-Gateway:'] = info.PROGNAME + ' ' + \ -- info.PROGDESC + ' - Mail to News\n' -- --# it is nntpheads stuff --# if(self.newsgroups): --# self.heads_dict['Newsgroups:'] = self.newsgroups -- --# if(self.approved): --# self.heads_dict['Approved:'] = self.approved -- -- except KeyError, message: -- print message -- -- return self.heads_dict -+ self.message.add_header('X-Gateway', info.PROGNAME + ' ' + -+ info.PROGDESC + ' - Mail to News') - - def renameheads(self): - """rename headers such as Resent-*: to X-Resent-*: -@@ -184,50 +133,31 @@ class mail2news: - handles References/In-Reply-To headers - """ - try: -- --### test --# if(post): --# if(post in self.heads_dict): --# self.heads_dict['X-Original-' + post] = self.heads_dict[post] --# --# self.heads_dict[post] = self.heads_dict[pre] --# del(self.heads_dict[pre]) --# --# else: --# if(pre[0:2] == 'X-' and pre in self.heads_dict): --# self.heads_dict['X-Original-' + pre] = self.heads_dict[pre] --# elif(not pre[0:2] == 'X-' and 'X-' + pre in self.heads_dict): --# self.heads_dict['X-' + pre] = self.heads_dict[pre] --# del(self.heads_dict[pre]) --### end test -- -- for key in self.heads_dict.keys(): -- if(key[:7] in ['Resent-']): -- if ('X-' + key) in self.heads_dict: -- self.heads_dict['X-Original-' + key] = \ -- self.heads_dict['X-' + key] -- self.heads_dict['X-' + key] = self.heads_dict[key] -- del self.heads_dict[key] -+ for key in self.message.keys(): -+ if key.startswith('Resent-'): -+ if ('X-' + key) in self.message: -+ self.message['X-Original-' + key] = \ -+ self.message['X-' + key] -+ self.message['X-' + key] = self.message[key] -+ del self.message[key] - - # In rfc822 References: is considered, but many MUA doen't put it. -- if ('References:' not in self.heads_dict) and \ -- ('In-Reply-To:' in self.heads_dict): -- print self.heads_dict['In-Reply-To:'] -+ if 'References:' not in self.message and \ -+ 'In-Reply-To:' in self.message: -+ print self.message['In-Reply-To:'] - -+ # FIXME !!! Do konce metody je to dost zmatené! - # some MUA uses msgid without '<' '>' - # ref = findall('([^\s<>\']+@[^\s<>;:\']+)', \ - # but I prefer use RFC standards -+ # FIXME isn't In-Reply-To supposed to be unique??? - ref = findall('(<[^<>]+@[^<>]+>)', -- self.heads_dict['In-Reply-To:']) -+ self.message.get_all('In-Reply-To:')) - - # if found, keep first element that seems a Msg-ID. - if(ref and len(ref)): - self.heads_dict['References:'] = '%s\n' % ref[0] - --# if('To:' in self.heads_dict): --# self.heads_dict['X-To:'] = self.heads_dict['To:'] --# del self.heads_dict['To:'] -- - except KeyError, message: - print message @@ -236,51 +166,32 @@ class mail2news: def removeheads(self, heads=None): -- cgit