Take the parsed subject from core to prevent decoding errors
1 parent cc1bf8f commit d17bd16d9d5ab8f646d95b81afc7c4e3c6712fb2
@Simon Hanna Simon Hanna authored on 23 Jan 2017
Showing 2 changed files
View
2
■■■
src/postorius/static/postorius/js/held_messages.js
$.ajax({
url: rest_url + msgid,
success: function(data) {
$('#message-source-btn').attr('href', rest_url + msgid + '?raw')
$('#message-title').html(data.msg.subject);
$('#message-title').html(data.subject);
$('.modal-footer form input[name="msgid"]').attr('value', msgid);
if (data.msg.body) {
$('#held-message-content').text(data.msg.body);
} else {
View
13
src/postorius/views/rest.py
from __future__ import absolute_import, unicode_literals
 
import json
 
from email.Header import decode_header
from email.parser import Parser as EmailParser
from email.parser import HeaderParser
 
from django.http import HttpResponse, Http404
 
def parse(message):
msgobj = EmailParser().parsestr(message)
header_parser = HeaderParser()
if msgobj['Subject'] is not None:
decodefrag = decode_header(msgobj['Subject'])
subj_fragments = []
for s, enc in decodefrag:
if enc:
s = unicode(s, enc).encode('utf8', 'replace')
subj_fragments.append(s)
subject = ''.join(subj_fragments)
else:
subject = None
 
headers = []
headers_dict = header_parser.parsestr(message)
for key in headers_dict.keys():
headers += ['{}: {}'.format(key, headers_dict[key])]
content = Scrubber(msgobj).scrub()[0]
return {
'subject': subject,
'body': content,
'headers': '\n'.join(headers),
}
 
if 'raw' in request.GET:
return HttpResponse(held_message.msg, content_type='text/plain')
response_data = dict()
response_data['sender'] = held_message.sender
response_data['subject'] = held_message.subject
response_data['reason'] = held_message.reason
response_data['hold_date'] = held_message.hold_date
response_data['msg'] = parse(held_message.msg)
response_data['msgid'] = held_message.request_id