Skip to main content

Gmail connector for Python

dex-connector-google-gmail provides typed Gmail reads, sends, and replies for Dex Python Flows. The package imports as dex_connectors.google_gmail. Version 0.1.0 includes getMessage, sendMessage, and replyToMessage only; the Go messageReceived and replyReceived Triggers are not available in Python.

Install

After release, install dex-connector-google-gmail==0.1.0. The package requires dex-connectors-sdk==0.1.0 and dex-python-sdk>=1.28.0; the latter provides Go-compatible JSON field metadata and the Flow start and attempt deadline needed for Gmail's duplicate-send fence.

Configure a connection

Use one static connection name in the Flow and in Dex Web Connections. Select Google OAuth for a personal Gmail or ordinary Workspace mailbox. In Google Cloud Console, enable Gmail API, configure the consent screen, register the exact Dex redirect URI on a Web application, then grant openid, UserInfo email, Gmail read-only, and Gmail send scopes. Dex derives the verified primary email and stores the access and refresh tokens in encrypted project storage. Its connection provider coordinates token refresh and persists rotated refresh tokens. A service-account key with Workspace domain-wide delegation is the administrator-only alternative.

The Python connector uses the same manifest authorization guide and safe defaults as the Go connector. Dex CLI/Web 1.28.0 supports Python Flow analysis, and the package includes generated dex-connector.json for Dex Web connection discovery. Dex Web authorization has not been live-verified with this package. Do not put access tokens, refresh tokens, or service-account keys in Flow input, results, Attributes, Streams, logs, or mock reports.

Run the example

examples/thread_reply reads one received message, replies in its existing thread, and completes with the accepted reply IDs. Its Worker loads the gmail-inbox connection from the Dex Web project configuration. Factory calls keep their connection name and annotation fields inline so Dex CLI can read the Flow definition; the factories also accept StepAnnotations for programmatic construction. Dex CLI 1.28.1 is needed for strict FDG analysis of this example's local Steps routing into connector Steps (tracked in Dex issue #362). The entrypoint uses the public connection and Step APIs:

connection = new_project_connection(project, CONNECTION_NAME)
await run_thread_reply_worker(
    ThreadReplyFlow(connection),
    os.environ.get("DEX_BLOB_CACHE_DIRECTORY", "/tmp/dex-gmail-thread-reply-cache"),
    os.environ.get("DEX_SERVER_ADDRESS", "localhost:8801"),
)

Run dexcli dev, then from this python/ directory run DEX_CONNECTOR_CONFIG_FILE=/path/to/connections.json python -m examples.thread_reply.main. The Flow type is ThreadReplyFlow; its input JSON contains messageId and replyText. Use a real mailbox message ID and a reply body with no secrets. The integration test runs the same Flow on a real Dex Worker and Client with a local fake Gmail HTTP boundary and manifest mocks.

Send confirmation

Gmail does not deduplicate messages by Message-ID. The connector derives a stable run-specific RFC Message-ID from the Dex Call key, run ID, and Flow start second. Its Python Mutation Steps use the manifest's asynchronous Execute durability and persist the single-dispatch heartbeat before a POST. On a numbered retry it searches Sent Mail first. A prior claimed send can only be read back; a second POST requires a persisted notSent or canResend marker. After a possibly accepted POST loses its answer or returns 5xx, the connector polls Sent Mail before returning Retry. A successful 2xx is already accepted even if its response is malformed, oversized, or unreadable; a Sent Mail miss then returns sent with an empty message ID. A search miss after a claimed POST remains Retry without another dispatch; the Flow fails when its retry budget is exhausted. A definite 429 or 503 refusal, or a transport failure proven to precede dispatch, permits a later send. The manifest limits sends and replies to five attempts within two minutes.

Live provider authorization and these Gmail behaviors remain unverified without a user-controlled account: retention of the client-set Message-ID header, rfc822msgid search matching, and Sent Mail indexing latency. No live provider credentials are included in this package.

Metadata

Release files for dex-connector-google-gmail 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dex-connector-google-gmail 0.1.0
File Size Uploaded Provenance Actions
dex_connector_google_gmail-0.1.0.tar.gz 100.5 kB Without provenance Details for dex_connector_google_gmail-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for dex-connector-google-gmail 0.1.0
File Interpreter ABI Platform Actions
dex_connector_google_gmail-0.1.0-py3-none-any.whl Python 3 none any Details for dex_connector_google_gmail-0.1.0-py3-none-any.whl

Total release size: 130.4 kB

Release files / dex_connector_google_gmail-0.1.0.tar.gz

Download URL dex_connector_google_gmail-0.1.0.tar.gz
Size 100.5 kB
Tags Source
SHA-256 checksum
How to use checksums
569bbb3cd56fbd538da5d041675da34b77c46375df2858c93c5ec73e3583c1f4
BLAKE2b-256 checksum
How to use checksums
6b84de0520ec8fd86116995a420f163536889d7bf954b6adfca495584d793523
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dex_connector_google_gmail-0.1.0-py3-none-any.whl

Download URL dex_connector_google_gmail-0.1.0-py3-none-any.whl
Size 29.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f8dfbaf751652e606edc9d6983898ae110610648a6798b9e7626edc0220bbbf1
BLAKE2b-256 checksum
How to use checksums
7c95961e72468ae6092fc5e562a89a817bd1b32ff6cae3dff86ffadfef0c5bc6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for dex-connector-google-gmail 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page