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
waitisFalse - 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},
)
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mailisk-0.9.3.tar.gz.
File metadata
- Download URL: mailisk-0.9.3.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9657971dd041f34c4bbc77e737af49b0e21ca53ad3c1052585be0ff2038224d3
|
|
| MD5 |
cc512a00bf531a73d5e92074c1593fc8
|
|
| BLAKE2b-256 |
b370ebc5f160f42e031ef1cd08b3af5ea6b60d036f8f5c03168c7b591b9a336d
|
File details
Details for the file mailisk-0.9.3-py3-none-any.whl.
File metadata
- Download URL: mailisk-0.9.3-py3-none-any.whl
- Upload date:
- Size: 9.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a741f0ff5e340ec030871a4a4decd2d2285d8717a08e51dee82e34faa7b58ac6
|
|
| MD5 |
b3d08829d535552f5bf025fc39b6339e
|
|
| BLAKE2b-256 |
bf1bce26d6163d8aeff2f1a2a440fb5cd4336d9b09c903cafb619ea1781fe9f2
|