3f3fe787ecde80b12537c3d2eddc7d2c15266e85
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):
27) 		return self.msg['Subject']	
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)