Skip to main content

A Python library for generating beautiful HTML emails

Project description

Mayil

A beautiful HTML email generator for Python that makes creating professional, responsive emails a breeze.

Homepage

Installation

pip install mayil

Quick Start

import mayil as my
import pandas as pd



# Add content
my.title("Welcome to Our Newsletter", center=True)
my.header("Latest Updates")
my.text("Stay informed with our latest news and updates.")
my.metric("Active Users", "1,234", color="#88C0D0")
my.sticky_note("Important Notice", "Please read this carefully.", color="blue")

# Add a table
df = pd.DataFrame({
    'Name': ['John', 'Jane'],
    'Score': ['95', '85']
})
my.dataframe(df, align='center')

# Get the HTML content
html_content = my.body

Features

  • 🎨 Beautiful, responsive email templates
  • 📊 Data visualization with tables and metrics
  • 🎯 Conditional formatting for tables
  • 📝 Rich text formatting
  • 📱 Mobile-friendly design
  • 🔗 Easy hyperlink support
  • 📐 Flexible layout options with columns
  • 📈 Interactive Plotly charts support

API Reference

Basic Components

Title

my.title("Welcome", center=True)

Adds a large title to the email. Optionally center it.

Header

my.header("Section Title")

Adds a section header.

Subheader

my.subheader("Subsection Title")

Adds a subsection header.

Text

my.text("Your paragraph text", justify=True)

Adds a paragraph of text. Optionally justify the text.

Metric

my.metric("Active Users", "1,234", color="#88C0D0")

Displays a metric with label and value. Customize the value color.

Sticky Note

my.sticky_note("Important", "Read this carefully", color="blue")

Adds a sticky note component. Colors: yellow, green, blue, red, white, violet, orange, darkgreen.

Divider

my.divider()

Adds a light grey dotted divider line.

Layout Components

Columns

cols = my.columns(3)
with cols[0]:
    my.metric("Metric 1", "100")
with cols[1]:
    my.metric("Metric 2", "200")

Creates a multi-column layout (max 4 columns).

Table Components

DataFrame

df = pd.DataFrame({
    'Name': ['John', 'Jane'],
    'Score': ['95', '85']
})
my.dataframe(df, align='center')

Adds a styled DataFrame to the email.

Formatted Table (ftable)

conditions = {
    'Score': [
        (lambda x: x < '90', '#ffb3ba'),  # Pastel red
        (lambda x: x >= '90', '#baffc9')  # Pastel green
    ],
    'Status': [
        (lambda x: x.lower() == 'active', '#bae1ff'),  # Pastel blue
        (lambda x: x.lower() == 'inactive', '#ffdfba')  # Pastel orange
    ]
}
my.ftable(df, cell_colors=conditions, align='center')

Adds a table with conditional formatting based on column values.

Data Visualization

Plotly Chart

import plotly.express as px

# Create a sample plotly figure
df = pd.DataFrame({
    'Date': pd.date_range('2024-01-01', '2024-01-10'),
    'Value': [10, 15, 13, 17, 19, 16, 14, 18, 20, 22]
})
fig = px.line(df, x='Date', y='Value', title='Trend Analysis')

# Add the plotly chart to the email
my.plotly_chart(fig)

Adds an interactive Plotly chart to the email. The chart will be rendered as an HTML component that can be interacted with in email clients that support HTML content.

Links

Hyperlink

my.hyperlink("Visit our website", "https://example.com")

Adds a clickable link to the email.

Advanced Usage

Creating Multiple Instances

from mayil import Mayil

# Create a new instance
custom_instance = Mayil()
custom_instance.header("Custom Header")

Table Formatting Options

The ftable method supports three types of conditional formatting:

  1. conditions: Applies formatting to both cell background and text
  2. cell_colors: Applies formatting only to cell background
  3. text_colors: Applies formatting only to text

Each condition is defined as a tuple of (lambda function, color) where:

  • The lambda function should return a boolean
  • The color can be any valid CSS color (hex, rgb, named colors)

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mayil-0.2.8.tar.gz (13.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mayil-0.2.8-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file mayil-0.2.8.tar.gz.

File metadata

  • Download URL: mayil-0.2.8.tar.gz
  • Upload date:
  • Size: 13.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.4

File hashes

Hashes for mayil-0.2.8.tar.gz
Algorithm Hash digest
SHA256 79f5093980eda9027ad0947e37ceef002e0a949210b14237fc81d0ca6827d9ac
MD5 058f72bbdaa93398158d70ac09d7b3f9
BLAKE2b-256 f8f93f319c462e468a91d03127ff0994a00fe5d9bb1065668d4ef3165ae57890

See more details on using hashes here.

File details

Details for the file mayil-0.2.8-py3-none-any.whl.

File metadata

  • Download URL: mayil-0.2.8-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.4

File hashes

Hashes for mayil-0.2.8-py3-none-any.whl
Algorithm Hash digest
SHA256 3dfc66552a41b6fe7e00585721431dbf6a18c718d13f638612a20df52f039444
MD5 f12c0c8ece4343d5912ceece196c30fe
BLAKE2b-256 bc2d834ec73b95a704d418c0481a80733768f9ce02398de7710f469bb21256e1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page