cf24ccc39ccd404de511ec8a9049aea59b8b13fe
Benjamin Renard Initial commit

Benjamin Renard authored 12 years ago

1) #!/usr/bin/python
Benjamin Renard MantisMail : Added decode()...

Benjamin Renard authored 12 years ago

2) # -*- coding: utf-8 -*-
Benjamin Renard Initial commit

Benjamin Renard authored 12 years ago

3) 
4) import re
5) import string
6) import smtplib
7) import logging
Benjamin Renard MantisMail : Added decode()...

Benjamin Renard authored 12 years ago

8) from email.MIMEText import MIMEText
9) import email
10) import email.header
Benjamin Renard Initial commit

Benjamin Renard authored 12 years ago

11) 
12) class MantisMail(object):
13) 
14) 	def __init__(self,mailfrom,mailto,data):
15) 		self.mailfrom = mailfrom
16) 		self.mailto = mailto
17) 		self.msg = email.message_from_string(data)
18) 
19) 	def get_issue_id_from_subject(self):
20) 		res=re.search('\[[^\]]* ([0-9]*)\]',self.subject())
21) 		if res:
22) 			issue_id=res.group(1)
23) 			return string.atoi(issue_id)
24) 		return None
25) 
26) 	def subject(self):
Benjamin Renard MantisMail.subject() : deco...

Benjamin Renard authored 12 years ago

27) 		return self.decode_header('Subject')
Benjamin Renard Initial commit

Benjamin Renard authored 12 years ago

28) 	
29) 	def get_text(self):
30) 		content='From : %s' % self.msg['From']
31) 		for part in self.msg.walk():
32) 			if part.get_content_maintype() == 'text':
33) 				content='%s\n\n---------------------------\n\n%s' % (content,part.get_payload(decode=True))
34) 		return content
35) 	
36) 	def get_attachments(self):
37) 		attachments=[]
38) 		counter=1
39) 		for part in self.msg.walk():
40) 			part_type = part.get_content_maintype()
41) 			if part_type == 'text' or part_type == 'multipart':
42) 				continue
43) 			filename = part.get_filename()
44) 			if not filename:
45) 				ext = mimetypes.guess_extension(part.get_content_type())
46) 				if not ext:
47) 					ext = '.bin'
48) 				filename = 'part-%03d%s' % (counter, ext)
49) 			counter += 1
50) 			content=part.get_payload(decode=False)
51) 			attachments.append({
52) 				'filename':	filename,
53) 				'type':		part_type,
54) 				'content':	content
55) 			})
56) 		return attachments
57) 
Benjamin Renard MantisMail : Added decode()...

Benjamin Renard authored 12 years ago

58) 	def decode(self,text, prefer_encoding=None):
59) 		try_enc=['iso-8859-15', 'utf-8']
60) 		if prefer_encoding:
61) 			try_enc.insert(0,prefer_encoding)
62) 		for i in try_enc:
63) 			try:
64) 				return unicode(text.decode(i))
65) 			except Exception, e:
66) 				continue
67) 		return unicode(text.decode('utf-8', errors = 'replace'))
68) 
69) 	def decode_header(self,header):
70) 		s=email.Header.decode_header(self.msg[header])[0]
71) 		return self.decode(s[0],prefer_encoding=s[1])
72)