Skip to main content

Official Python SDK for the Freesend email API

Project description

Freesend Python SDK

Official Python SDK for the Freesend email API.

Installation

pip install freesend

Quick Start

from freesend import Freesend, SendEmailRequest, FreesendConfig

# Initialize the client
config = FreesendConfig(api_key="your-api-key-here")
freesend = Freesend(config)

# Create email request
email_data = SendEmailRequest(
    fromName="Your Company",
    fromEmail="hello@yourdomain.com",
    to="recipient@example.com",
    subject="Hello from Freesend!",
    html="<h1>Welcome!</h1><p>This email was sent using Freesend.</p>",
    text="Welcome! This email was sent using Freesend."
)

# Send the email
try:
    response = freesend.send_email(email_data)
    print(response.message)  # "Email sent successfully"
except Exception as e:
    print(f"Failed to send email: {e}")

API Reference

FreesendConfig

Configuration object for the Freesend client.

from freesend import FreesendConfig

config = FreesendConfig(
    api_key="your-api-key-here",
    base_url="https://freesend.metafog.io"  # Optional, defaults to this value
)

SendEmailRequest

Request data for sending an email.

from freesend import SendEmailRequest, Attachment

email_data = SendEmailRequest(
    fromEmail="hello@yourdomain.com",  # Required
    to="recipient@example.com",        # Required
    subject="Email Subject",           # Required
    fromName="Your Company",           # Optional
    text="Plain text content",         # Optional (either text or html required)
    html="<h1>HTML content</h1>",     # Optional (either text or html required)
    attachments=[                      # Optional
        Attachment(
            filename="document.pdf",
            content="base64_encoded_content",
            contentType="application/pdf"
        )
    ]
)

Attachment

Represents an email attachment.

from freesend import Attachment

attachment = Attachment(
    filename="document.pdf",            # Required
    content="base64_encoded_content",   # Required (either content or url)
    url="https://example.com/file.pdf", # Optional (either content or url, not both)
    contentType="application/pdf"       # Optional
)

Examples

Basic Email

from freesend import Freesend, SendEmailRequest, FreesendConfig

# Initialize client
freesend = Freesend(FreesendConfig(api_key="your-api-key-here"))

# Send simple email
try:
    response = freesend.send_email(SendEmailRequest(
        fromName="Your Company",
        fromEmail="hello@yourdomain.com",
        to="user@example.com",
        subject="Welcome to our platform!",
        html="<h1>Welcome!</h1><p>Thank you for joining us.</p>",
        text="Welcome! Thank you for joining us."
    ))
    print("Email sent:", response.message)
except Exception as e:
    print("Failed to send email:", e)

Email with Attachment

import base64
from freesend import Freesend, SendEmailRequest, Attachment, FreesendConfig

# Initialize client
freesend = Freesend(FreesendConfig(api_key="your-api-key-here"))

# Read and encode file
with open("invoice.pdf", "rb") as file:
    file_content = base64.b64encode(file.read()).decode('utf-8')

# Create attachment
attachment = Attachment(
    filename="invoice.pdf",
    content=file_content,
    contentType="application/pdf"
)

# Send email with attachment
try:
    response = freesend.send_email(SendEmailRequest(
        fromName="Your Company",
        fromEmail="billing@yourdomain.com",
        to="customer@example.com",
        subject="Your invoice is ready",
        html="<h1>Invoice Attached</h1><p>Please find your invoice attached.</p>",
        text="Invoice attached. Please find your invoice attached.",
        attachments=[attachment]
    ))
    print("Email sent:", response.message)
except Exception as e:
    print("Failed to send email:", e)

Using Custom Base URL

from freesend import Freesend, FreesendConfig

# Initialize with custom base URL
config = FreesendConfig(
    api_key="your-api-key-here",
    base_url="https://your-custom-freesend-instance.com"
)
freesend = Freesend(config)

# Use as normal...

Error Handling

from freesend import Freesend, SendEmailRequest, FreesendConfig
from freesend.exceptions import FreesendError, FreesendAPIError, FreesendValidationError

freesend = Freesend(FreesendConfig(api_key="your-api-key-here"))

try:
    response = freesend.send_email(SendEmailRequest(
        fromEmail="hello@yourdomain.com",
        to="user@example.com",
        subject="Test email"
        # Missing html/text content
    ))
except FreesendValidationError as e:
    print("Validation error:", e.message)
except FreesendAPIError as e:
    print("API error:", e.message)
    print("Status code:", e.status_code)
except FreesendError as e:
    print("Freesend error:", e.message)
except Exception as e:
    print("Unexpected error:", e)

Common Error Codes

Status Code Description
400 Bad Request - Missing required fields or invalid data
401 Unauthorized - Invalid or missing API key
403 Forbidden - API key is inactive or invalid
500 Internal Server Error - Email sending failed

Development

# Clone the repository
git clone https://github.com/mokshablr/Freesend.git
cd Freesend/sdk/python

# Install in development mode
pip install -e .

# Install development dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black freesend/

# Lint code
flake8 freesend/

# Type checking
mypy freesend/

License

MIT License - see LICENSE for details.

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

freesend-1.0.0.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

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

freesend-1.0.0-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file freesend-1.0.0.tar.gz.

File metadata

  • Download URL: freesend-1.0.0.tar.gz
  • Upload date:
  • Size: 7.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for freesend-1.0.0.tar.gz
Algorithm Hash digest
SHA256 6f5fe893007f489df29a682f33a183cb17dd6b7c9afd98fa7ef3910511a30a9d
MD5 424dd5646eb377a4af9b8ae450910762
BLAKE2b-256 a56fc158c6e348c89f818a4c38041659820d89e6254c13bf659089c62bca6404

See more details on using hashes here.

File details

Details for the file freesend-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: freesend-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for freesend-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b07ade2b7036f2bc698ae9e54588f70655177cc7a687e9ecad57ec742337d809
MD5 e3764e117fc6088d879ca71a76b0714b
BLAKE2b-256 3c9687649c685c0686ef4f9b4aa3e7b9dfd260302b3f0235be0543f41a6d8ae8

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