Skip to main content

Typed Python client for the Mailisk API

Project description

Mailisk Python Client

Typed Python client for the Mailisk REST API.

Mailisk is an email, SMS, outbound email, and TOTP testing platform. This package mirrors the Mailisk Node client API surface in a Python-friendly shape: methods use snake_case, response bodies stay as normal dictionaries, and the package ships TypedDict/Literal types plus py.typed.

Installation

pip install mailisk

Create A Client

Get your API key from Mailisk and pass it directly when creating a client:

from mailisk import MailiskClient

mailisk = MailiskClient(api_key="YOUR_API_KEY")

The library does not read .env files or environment variables by itself. Applications should load configuration however they prefer, then pass values to the client:

from mailisk import MailiskClient

api_key = load_api_key_from_your_config()
mailisk = MailiskClient(api_key=api_key)

Quick Start

from mailisk import MailiskClient

mailisk = MailiskClient(api_key="YOUR_API_KEY")

result = mailisk.search_inbox("mynamespace")
print(result["data"])

Defaults

search_inbox and search_sms_messages match the Node client defaults:

  • wait for at least one matching message unless wait is False
  • ignore messages older than 15 minutes unless a lower bound is provided
  • use a 5 minute timeout while waiting
  • allow a high redirect count for wait endpoints

Timeouts are in seconds because the client uses requests:

mailisk.search_inbox(
    "mynamespace",
    {"to_addr_prefix": "john@mynamespace.mailisk.net"},
    {"timeout": 60},
)

Email

Search inbox:

response = mailisk.search_inbox(
    "mynamespace",
    {
        "to_addr_prefix": "john@mynamespace.mailisk.net",
        "subject_includes": "password",
    },
)

emails = response["data"]

List namespaces:

namespaces = mailisk.list_namespaces()
print([item["namespace"] for item in namespaces["data"]])

Download an attachment:

attachment_id = emails[0]["attachments"][0]["id"]
content = mailisk.download_attachment(attachment_id)

Outbound Email

Send an outbound email:

email = mailisk.send_email(
    "mynamespace",
    {
        "from": {"email": "support@mynamespace.mailisk.net", "name": "Support"},
        "to": ["verified@example.com"],
        "subject": "Hello from Mailisk",
        "text": "Plain text body",
        "html": "<p>HTML body</p>",
    },
)

print(email["id"], email["status"])

Send with an attachment:

import base64
from pathlib import Path

content = Path("report.txt").read_bytes()

mailisk.send_email(
    "mynamespace",
    {
        "to": ["verified@example.com"],
        "subject": "Report",
        "text": "Attached.",
        "attachments": [
            {
                "filename": "report.txt",
                "content_type": "application/octet-stream",
                "content_base64": base64.b64encode(content).decode("ascii"),
            }
        ],
    },
)

Fetch delivery details:

detail = mailisk.get_outbound_email(email["id"])
print(detail["delivery_summary"])

Reply to an inbound email:

reply = mailisk.reply_to_email(
    emails[0]["id"],
    {
        "subject": "Re: Thanks",
        "text": "We received your message.",
    },
)

Forward an inbound email:

forwarded = mailisk.forward_email(
    emails[0]["id"],
    {
        "to": ["verified@example.com"],
        "subject": "Fwd: Support request",
        "text": "Forwarding this along.",
    },
)

SMS

Search SMS messages:

messages = mailisk.search_sms_messages(
    "+15551234567",
    {"from_number": "+1800555", "body": "Your code"},
)

List SMS numbers:

numbers = mailisk.list_sms_numbers()

Send a virtual SMS:

mailisk.send_virtual_sms(
    {
        "from_number": "+15550000001",
        "to_number": "+15550000002",
        "body": "Test message",
    }
)

TOTP

Create a saved TOTP device:

device = mailisk.create_totp_device(
    {
        "name": "GitHub staging",
        "shared_secret": "JBSWY3DPEHPK3PXP",
    }
)

Generate a TOTP code from a shared secret:

otp = mailisk.get_totp_otp_by_shared_secret(
    "JBSWY3DPEHPK3PXP",
    {"min_seconds_until_expire": 10},
)

print(otp["code"])

Generate a TOTP code for a saved device:

otp = mailisk.get_totp_otp_by_device_id(device["id"])

Delete a saved TOTP device:

mailisk.delete_totp_device(device["id"])

Typing

The package includes py.typed and exports TypedDict/Literal types for API parameters and responses:

from mailisk import MailiskClient, SearchInboxResponse

client = MailiskClient(api_key="YOUR_API_KEY")
response: SearchInboxResponse = client.search_inbox("mynamespace")

You can import request and response types from mailisk directly, for example SendEmailParams, SearchInboxResponse, OutboundEmailResponse, OutboundEmailDetailResponse, and TotpOtpResponse.

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

mailisk-0.9.2.tar.gz (11.6 kB view details)

Uploaded Source

Built Distribution

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

mailisk-0.9.2-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file mailisk-0.9.2.tar.gz.

File metadata

  • Download URL: mailisk-0.9.2.tar.gz
  • Upload date:
  • Size: 11.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for mailisk-0.9.2.tar.gz
Algorithm Hash digest
SHA256 b028e06dbea014357c07f0752fe5e3e5ef9aef4bb375ae63451b57ae0f28832e
MD5 71e5bf589f3b7f3c7729a76c5226a1b5
BLAKE2b-256 93b6ca4fc7e700f470905d2f92ed4b62d95424cbb22d85f49cb39d1f3456d43b

See more details on using hashes here.

File details

Details for the file mailisk-0.9.2-py3-none-any.whl.

File metadata

  • Download URL: mailisk-0.9.2-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for mailisk-0.9.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9e46c62ae7c53a913205549c22ae454e3ae24ff9d9a1615b0303931f2f311dcc
MD5 f1dae5760b6434f7bde20a4f6859ecd5
BLAKE2b-256 1786816c07fc557fc40df71b2b0ddee9867d4b7dce9962a69119b30d8bfc3725

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