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.3.tar.gz (10.9 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.3-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mayil-0.2.3.tar.gz
  • Upload date:
  • Size: 10.9 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.3.tar.gz
Algorithm Hash digest
SHA256 a8aa80bd8bd0bc054b634cd3db50f6e33fee69442b2e201ec2fa5d1cf7a4d9a4
MD5 f92dd1ca141ddbfb9c52b8180641c757
BLAKE2b-256 7d1a172e28c9bdd7256175ad83b9b49f38a4484013551bb1d91beafa6fe53b87

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mayil-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 9.0 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c1412336343b9418f1330172b7e668cdf5da6c81cd84cb6f1f8dc7272a82a992
MD5 753fd42f6eb8a6fbb4a4bf9ef7376dfd
BLAKE2b-256 014652fa9cb18723c20bde6fe030ef03d3ad70611d5e03fcbe1e13c04597e97f

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