def get_email_thread_content(ticket, emails):
"""
Generate `abuse.models.Ticket` emails thred history
based on 'email_thread' `abuse.models.MailTemplate`
:param `abuse.models.Ticket` ticket: The cererus ticket
:param list emails: a list of `adapters.services.mailer.abstract.Email`
:rtype: tuple
:return: The content and the filetype
"""
try:
template = MailTemplate.objects.get(codename='email_thread')
is_html = '<html>' in template.body
except ObjectDoesNotExist:
raise EmailThreadTemplateNotFound('Unable to find email thread template')
_emails = []
for email in emails:
_emails.append(Email(
sender=email.sender,
subject=email.subject,
recipient=email.recipient,
body=email.body.replace('\n', '<br>') if is_html else email.body,
created=datetime.fromtimestamp(email.created),
category=None,
attachments=None,
))
domain = ticket.service.name if ticket.service else None
try:
template = loader.get_template_from_string(template.body)
context = Context({
'publicId': ticket.publicId,
'creationDate': ticket.creationDate,
'domain': domain,
'emails': _emails
})
content = template.render(context)
except (TemplateEncodingError, TemplateSyntaxError) as ex:
raise EmailThreadTemplateSyntaxError(str(ex))
try:
import pdfkit
from pyvirtualdisplay import Display
display = Display(visible=0, size=(1366, 768))
display.start()
content = pdfkit.from_string(content, False)
display.stop()
return content, 'application/pdf'
except:
return content.encode('utf-8'), 'text/html' if is_html else 'text/plain'
评论列表
文章目录