.. _embedded: Embedding Content ================= Red Mail allows to embed images and tables to the HTML bodies of emails. By default, tables often look outdated and ugly in emails but Red Mail has pre-made table templates that render nicer looking tables from Pandas dataframes. .. _embedding-tables: Embedded Tables --------------- You may include tables simply by turning them to raw HTML for example using ``df.to_html()`` in Pandas. However, this often lead to very ugly tables as SMTP is poor at handling CSS or styling in general. Here is a comparison of using ``df.to_html()`` directly vs embedding via Red Mail: |pic1| -- |pic2| .. |pic1| image:: /imgs/table_unrendered.png :height: 150px :align: top .. |pic2| image:: /imgs/table_rendered.png :height: 150px :align: top To embed tables, you can si mply pass them to the send function as Pandas dataframes: .. code-block:: python # Creating a simple dataframe import pandas as pd df = pd.DataFrame({ 'nums': [1,2,3], 'strings': ['yes', 'no', 'yes'], }) # Let Red Mail to render the dataframe for you: email.send( subject='Some attachments', receivers=['first.last@example.com'], html="

This is a table:

{{ mytable }}", body_tables={ 'mytable': df, } ) Red Mail uses Jinja and inline HTML styling to make the tables look nice. Email servers typically don't handle well CSS. .. warning:: Red Email Pandas templating should work on various dataframe strucutres (empty, multi-indexed etc.) but sometimes the rendering may be off if the dataframe is especially complex in structural sense. There are development plans to make it even more better. .. _embedding-images: Embedded Images --------------- You can also embed images straight to the HTML body of the email: .. code-block:: python email.send( subject='Some attachments', receivers=['first.last@example.com'], html="

This is an image:

{{ myimage }}", body_images={ 'myimage': 'path/to/image.png', } ) The image will be rendered as ````. In case you need to control the image (like the size) you can also create the ``img`` tag yourself: .. code-block:: python email.send( subject='Some attachments', receivers=['first.last@example.com'], html='

This is an image:

', body_images={ 'myimage': 'path/to/image.png', } ) In addition to paths as strings, the following are supported: - ``pathlib.Path`` - ``bytes`` (the image as raw bytes) - ``matplotlib.pyplot.Figure`` - ``PIL.Image``