223d9656590a5c5774fa4161bcd78a4a62bdbb13
Benjamin Renard Initial commit

Benjamin Renard authored 13 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 13 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 MantisMail : fix mimetypes...

Benjamin Renard authored 12 years ago

11) import mimetypes
Benjamin Renard Initial commit

Benjamin Renard authored 13 years ago

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

Benjamin Renard authored 12 years ago

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

Benjamin Renard authored 13 years ago

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

Benjamin Renard authored 12 years ago

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