fixed encoding error in milter

master
parent 9ab504dd03
commit 23d5170d3f

@ -182,15 +182,21 @@ class Letter:
def _getTextPlain(self):
"""Get content from body message"""
letter_text = self.mail.get_payload(decode=True)
charset = self.mail.get_charsets()
# if charset specified and it is not utf-8
try:
if charset and charset[0] and not charset[0].lower() in ['utf-8', 'utf8']:
letter_text = letter_text.decode(charset[0]).encode('utf-8')
except Exception as e:
Logger().printDEBUG("wrong decode from %s: %s" % (charset[0], e))
# letter_text = self.mail.get_payload(decode=True)
# charset = self.mail.get_charsets()
# # if charset specified and it is not utf-8
# try:
# if charset and charset[0] and not charset[0].lower() in ['utf-8', 'utf8']:
# letter_text = letter_text.decode(charset[0])
# except Exception as e:
# Logger().printDEBUG("wrong decode from %s: %s" % (charset[0], e))
letter_text = self.mail.get_payload()
if isinstance(letter_text, str):
return letter_text
else:
Logger().printDEBUG("wrong content type (expected plain text)")
def getSenderEmails(self):
"""Cache function for _getSenderEmails"""
@ -253,13 +259,11 @@ class Letter:
self.defaults['Subject']))
# join to string
return "".join(
[
# decode first element by second element
i[0].decode(i[1] or "utf-8").encode('utf-8')
# decoded header
i[0].decode(i[1] or "utf-8") if i[1] else i[0]
for i in decodedSubject
])
except:
)
except Exception as e:
Logger().printDEBUG("Wrong subject:%s" % self.mail.get("Subject"))
return self.defaults['Subject']
@ -277,7 +281,7 @@ class Letter:
filename = ("%s_%s%s" % \
(time.strftime("%Y-%m-%d_%H:%M", time.localtime(self.getDate())),
suffix, self.getSubject())).replace('/', '')
return filename.decode('utf-8')[:maxfilename].encode('utf-8')
return filename[:maxfilename]
def copyTo(self, destination, suffix="", filename=None):
destination = pathjoin(destination, filename or self._genfilename(suffix))
@ -649,7 +653,10 @@ def main(argv):
# process all letter specified by letter-file option
for lettername in parser.values.letter_file:
if pathexists(lettername):
mail_keeper.addLetter( Letter(file=lettername) )
ll = Letter(file=lettername)
mail_keeper.addLetter(ll)
#DEBUG
print(ll.mail.get_content_type())
else:
Logger().printERROR("file not found:%s" % lettername)

@ -69,7 +69,6 @@ def scanDirs(profilesDirs):
def create_data_files (data_dirs, prefix=""):
test1_files = []
data_files = []
dirs = scanDirs(data_dirs)
i = 0
for obj in dirs:

Loading…
Cancel
Save