Exemplo n.º 1
0
    def generate(cls, plaintext_template: str, markdown_template: str,
                 html_template: str, context: dict):
        envelope = Envelope()

        # render markdown content
        extended_context = context.copy()
        if markdown_template:
            markdown_content, extended_context = cls._separate_content_and_metadata(
                markdown_template, context)
            markdown_content = cls.JinjaRenderer.render(
                markdown_content, extended_context)
            extended_context["content"] = cls.MarkdownRenderer.render(
                markdown_content)
            html_template = html_template or DEFAULTHTML_TEMPLATE

        # render html content
        if html_template:
            html_content, extended_context = cls._separate_content_and_metadata(
                html_template, extended_context)
            html_content = cls.JinjaRenderer.render(html_content,
                                                    extended_context)
            envelope.message(html_content, alternative="html")

        sender = extended_context.get("sender", None)
        recipient = extended_context.get("recipient", None)
        subject = extended_context.get("subject", "")

        if plaintext_template:
            # render plaintext content
            plaintext_content, extended_context = cls._separate_content_and_metadata(
                plaintext_template, context)
            plaintext_content = cls.JinjaRenderer.render(
                plaintext_content, extended_context)
        else:
            # generate plaintext from html
            html_to_text_converter = html2text.HTML2Text()
            html_to_text_converter.ignore_images = True
            plaintext_content = html_to_text_converter.handle(html_content)

        envelope.message(plaintext_content, alternative="plain")
        sender = sender or extended_context.get("sender", None)
        recipient = recipient or extended_context.get("recipient", None)
        subject = subject or extended_context.get("subject", "")
        if not sender:
            raise Exception("Missing sender")
        envelope.from_(sender).to(recipient).subject(subject)
        return envelope
Exemplo n.º 2
0
 def test_contents_fetching(self):
     t = "Small sample text attachment.\n"
     with open("tests/eml/generic.txt") as f:
         e1 = Envelope(f)
         e2 = e1.copy()  # stays intact even if copied to another instance
         self.assertEqual(e1.message(), t)
         self.assertEqual(e2.message(), t)
     self.assertEqual(e2.copy().message(), t)
Exemplo n.º 3
0
 def _quoted_message(self, e: Envelope):
     self.assertEqual(self.long_text, e.message())
     self.assertIn(
         self.long_text,
         e.preview())  # when using preview, we receive original text
     output = str(
         e.send(False))  # but when sending, quoted text is got instead
     self.assertNotIn(self.long_text, output)
     self.assertIn(self.quoted, output)