Skip to main content

wafflesbot: Email auto reply bot for JMAP mailboxes

PyPI PyPI - Python Version Build codecov GitHub stars

wafflesbot

wafflesbot sends form replies to unreplied emails in a JMAP mailbox (such as Fastmail).

wafflesbot excels at automatically asking tech recruiters for compensation information.

Built on:

Installation and usage with Docker

A Docker container is provided which runs wafflesbot to reply to emails via JMAP server events. JMAP API authentication and reply details should be configured using environment variables.

Example docker-compose.yaml:

version: "3.7"

secrets:
  jmap_api_token:
    file: path/to/file/with/your/jmap_api_token

services:
  waffles:
    image: ghcr.io/smkent/waffles:latest
    environment:
      JMAP_HOST: jmap.example.com
      JMAP_API_TOKEN: /run/secrets/jmap_api_token
      WAFFLES_MAILBOX: folder-or-label-name
      WAFFLES_REPLY_FILE: /autoreply.html
      # WAFFLES_DRY_RUN: "true" # Uncomment to log actions but not send email
      # WAFFLES_DEBUG: "true"   # Uncomment to increase log verbosity
      # Set TZ to your time zone. Often same as the contents of /etc/timezone.
      TZ: PST8PDT
    restart: unless-stopped
    volumes:
      - path/to/your/reply/content.html:/autoreply.html:ro
    secrets:
      - jmap_api_token

Start the container by running:

docker-compose up -d

Debugging information can be viewed in the container log:

docker-compose logs -f

Installation from PyPI

wafflesbot is available on PyPI:

pip install wafflesbot

Usage

wafflesbot provides the waffles command, which can either:

  1. Run as a service and reply to emails received via JMAP server events (the default)
  2. Run as a script to examine recent emails (such as interactively or via a cronjob)

Environment variables:

  • JMAP_HOST: JMAP server hostname
  • JMAP_API_TOKEN: JMAP account API token

Required arguments:

  • -m/--mailbox: Name of the folder to process
  • -r/--reply-content: Path to file with an HTML reply message

Optional arguments:

  • -d/--debug: Enable debug logging
  • -l/--limit: Maximum number of emails replies to send (only valid with -s/--script)
  • -n/--days: Only process email received this many days ago or newer (only valid with -s/--script)
  • -p/--pretend: Print messages to standard output instead of sending email
  • -s/--script: Set to run as a script instead of an event-driven service

Invocation examples

Listen for new emails, and reply to unreplied messages that appear in the "Recruiters" folder with the message in my-reply.html:

JMAP_HOST=jmap.example.com \
JMAP_API_TOKEN=ness__pk_fire \
waffles \
    --mailbox "Recruiters" \
    --reply-content my-reply.html

Run as a script and reply to unreplied messages in the "Recruiters" folder with the message in my-reply.html:

JMAP_HOST=jmap.example.com \
JMAP_API_TOKEN=ness__pk_fire \
waffles \
    --script \
    --mailbox "Recruiters" \
    --reply-content my-reply.html

Development

Poetry installation

Via pipx:

pip install pipx
pipx install poetry
pipx inject poetry poetry-pre-commit-plugin

Via pip:

pip install poetry
poetry self add poetry-pre-commit-plugin

Development tasks

  • Setup: poetry install
  • Run static checks: poetry run poe lint or poetry run pre-commit run --all-files
  • Run static checks and tests: poetry run poe test

Created from smkent/cookie-python using cookiecutter

Metadata

Release files for wafflesbot 0.1.21

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

Source distribution (sdist)

Source distribution for wafflesbot 0.1.21
File Size Uploaded
wafflesbot-0.1.21.tar.gz 22.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for wafflesbot 0.1.21
File Interpreter ABI Platform
wafflesbot-0.1.21-py3-none-any.whl Python 3 none any Details

Total release size: 44.6 kB

Release files / wafflesbot-0.1.21.tar.gz

Download URL wafflesbot-0.1.21.tar.gz
Size 22.1 kB
Tags Source
SHA-256 checksum
How to use checksums
f59097c9a2114f46393aab7006e4769c06e09484907b2999684404d2a5f3f12a
BLAKE2b-256 checksum
How to use checksums
e5678de50ca5857db8d11865b28ed3190130d71dd23b4f3892dc346ccb842239
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.0.1 CPython/3.12.8

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2025.

Transparency log

Release files / wafflesbot-0.1.21-py3-none-any.whl

Download URL wafflesbot-0.1.21-py3-none-any.whl
Size 22.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a008595ceb7e52d626cf5971f0f2a425395b9ba5895f35d5e70d443872418933
BLAKE2b-256 checksum
How to use checksums
61f8555ce6e1d56438389dece2a6603f75570be59fe26c698f335c25677de9ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.0.1 CPython/3.12.8

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.21 This release

2 release files

0.1.19

2 release files

0.1.18

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.13

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.1

2 release files

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