c90e41aadbd5bfc1f02605a0d9693c6d78db43a0
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 MantisMail : fix sys import...

Benjamin Renard authored 12 years ago

12) import sys
Benjamin Renard Initial commit

Benjamin Renard authored 13 years ago

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

Benjamin Renard authored 12 years ago

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

Benjamin Renard authored 13 years ago

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

Benjamin Renard authored 12 years ago

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