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
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)
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)