Install & Compatibility
Where this runs
tested against v3.7.0 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
muslpy 3.10–3.940 runs
installs and imports cleanly · install 0.0s · import 0.000s · 18.5MB
glibcpy 3.10–3.940 runs
installs and imports cleanly · install 1.7s · import 0.000s · 19MB
16MB installed
● package 16MB
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
SESClient
✓ from types_aiobotocore_ses import SESClient
✗ from types_aiobotocore_ses import SESClient
This quickstart demonstrates how to initialize an `aiobotocore` SES client and use it to send an email, leveraging the `types-aiobotocore-ses` annotations for enhanced type checking and IDE auto-completion. The `TYPE_CHECKING` block ensures type imports are only active during static analysis.
import asyncio
from typing import TYPE_CHECKING
from aiobotocore.session import get_session
# These imports are only for type checking and won't be bundled at runtime
if TYPE_CHECKING:
from types_aiobotocore_ses.client import SESClient
from types_aiobotocore_ses.type_defs import SendEmailResponseTypeDef
async def send_test_email(recipient: str, sender: str, subject: str, body: str):
session = get_session()
async with session.create_client("ses", region_name="us-east-1") as client:
# Explicit type annotation for the client enables full IDE support and static analysis
client: "SESClient"
try:
response: "SendEmailResponseTypeDef" = await client.send_email(
Source=sender,
Destination={
"ToAddresses": [recipient]
},
Message={
"Subject": {"Data": subject},
"Body": {"Text": {"Data": body}}
}
)
print(f"Email sent! Message ID: {response.get('MessageId')}")
return response
except Exception as e:
print(f"Error sending email: {e}")
raise
if __name__ == "__main__":
# Replace with actual email addresses and content
recipient_email = "test@example.com"
sender_email = "noreply@example.com"
email_subject = "Hello from aiobotocore SES!"
email_body = "This is a test email sent using aiobotocore with type hints."
# Make sure AWS credentials are configured (e.g., via environment variables or ~/.aws/credentials)
# For this example, we'll use os.environ.get for placeholders if actual credentials aren't set.
# In a real application, you'd configure aiobotocore session for credentials.
# Example: os.environ.get('AWS_ACCESS_KEY_ID', 'YOUR_ACCESS_KEY')
# os.environ.get('AWS_SECRET_ACCESS_KEY', 'YOUR_SECRET_KEY')
# os.environ.get('AWS_REGION', 'us-east-1')
asyncio.run(send_test_email(recipient_email, sender_email, email_subject, email_body))
Debug
Known issues
breakingSupport for Python 3.8 was removed starting with `mypy-boto3-builder 8.12.0` (which generated `types-aiobotocore-ses 3.4.0`). Projects using Python 3.8 will need to upgrade to Python 3.9 or later.fixUpgrade your Python environment to 3.9 or newer.
affects: >=3.4.0
gotcha`types-aiobotocore-ses` is a 'stubs only' package. It provides type annotations but does not install `aiobotocore` itself or any other runtime dependencies. Your project must explicitly install `aiobotocore` (e.g., `pip install aiobotocore`) for the code to run.fixEnsure `aiobotocore` is installed alongside `types-aiobotocore-ses` (e.g., `pip install aiobotocore types-aiobotocore-ses`).
affects: All
gotchaFor optimal type checking, the version of `types-aiobotocore-ses` should ideally match or be compatible with your installed `aiobotocore` version. Mismatched versions might lead to incorrect or missing type hints, especially after significant AWS API changes.fixKeep `types-aiobotocore-ses` and `aiobotocore` versions synchronized, or use the `types-aiobotocore` umbrella package with service extras to manage compatibility (e.g., `pip install 'types-aiobotocore[ses]'`).
affects: All
breakingStarting with `mypy-boto3-builder 8.9.0`, TypeDef names for packed method arguments were shortened (e.g., `CreateDistributionRequestRequestTypeDef` became `CreateDistributionRequestTypeDef`), and conflicting TypeDef `Extra` postfixes were moved. This affects all generated type stubs, including SES, if you relied on the older, longer names.fixUpdate your code to use the shorter or adjusted TypeDef names as per the `types-aiobotocore-ses` documentation.
affects: >=3.1.0 (corresponds to builder 8.9.0 and later)
gotchaWhen using `Pylint` with type annotations imported under `typing.TYPE_CHECKING`, Pylint might report 'undefined variables'.fixImplement the `if TYPE_CHECKING: ... else: var = object` pattern to satisfy Pylint, as shown in the package's documentation. Example: `if TYPE_CHECKING: from .client import SESClient else: SESClient = object`
affects: All
Upgrade
Version history
3.7.0latest on PyPI · released May 10, 2026
Audit
Dependencies
aiobotocorerequiredProvides the runtime functionality for AWS asynchronous clients. This package only adds type annotations.
pythonrequiredRequires Python 3.9 or newer.