From 8a0abba80c9c2ff6b546af517fd54a6ca81852c2 Mon Sep 17 00:00:00 2001 From: Kacper Kwapisz Date: Sun, 22 Mar 2026 22:06:48 +0100 Subject: [PATCH] Make SMTP config optional, falls back to IMAP host/credentials --- config.example.yml | 22 ++++++++++++++++------ src/server.py | 25 +++++++++++++------------ 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/config.example.yml b/config.example.yml index be4cf37..9b9deca 100644 --- a/config.example.yml +++ b/config.example.yml @@ -2,20 +2,30 @@ # Copy this file to config.yml and fill in your credentials webhook_url: "https://poke.com/api/v1/inbound-sms/webhook" -poke_api_key: "your-api-key-here" # from https://poke.com/settings/advanced +poke_api_key: "your-api-key-here" # MCP_API_KEY is set via environment variable (not in this file) # It secures the MCP server so only you can use it accounts: - - id: default + # Minimal — SMTP falls back to IMAP host/credentials + - id: personal imap_host: imap.gmail.com imap_port: 993 imap_username: "you@gmail.com" imap_password: "your-app-password" - smtp_host: smtp.gmail.com - smtp_port: 587 - smtp_username: "you@gmail.com" - smtp_password: "your-app-password" watch_folders: - INBOX + + # Full — separate SMTP settings (only if different from IMAP) + # - id: work + # imap_host: imap.example.com + # imap_port: 993 + # imap_username: "you@example.com" + # imap_password: "imap-password" + # smtp_host: smtp.example.com + # smtp_port: 587 + # smtp_username: "you@example.com" + # smtp_password: "smtp-password" + # watch_folders: + # - INBOX diff --git a/src/server.py b/src/server.py index c8bc9e1..f75d29e 100755 --- a/src/server.py +++ b/src/server.py @@ -73,27 +73,28 @@ def parse_accounts(config: dict) -> list[dict]: "imap_port": int(os.environ.get("IMAP_PORT", "993")), "imap_username": os.environ["IMAP_USERNAME"], "imap_password": os.environ["IMAP_PASSWORD"], - "smtp_host": os.environ["SMTP_HOST"], + "smtp_host": os.environ.get("SMTP_HOST", imap_host), "smtp_port": int(os.environ.get("SMTP_PORT", "587")), - "smtp_username": os.environ["SMTP_USERNAME"], - "smtp_password": os.environ["SMTP_PASSWORD"], + "smtp_username": os.environ.get( + "SMTP_USERNAME", os.environ["IMAP_USERNAME"] + ), + "smtp_password": os.environ.get( + "SMTP_PASSWORD", os.environ["IMAP_PASSWORD"] + ), "watch_folders": ["INBOX"], } ] - required = ( - "imap_host", - "imap_username", - "imap_password", - "smtp_host", - "smtp_username", - "smtp_password", - ) + required = ("imap_host", "imap_username", "imap_password") for i, acc in enumerate(accounts): acc.setdefault("id", f"account-{i}") acc.setdefault("imap_port", 993) - acc.setdefault("smtp_port", 587) acc.setdefault("watch_folders", ["INBOX"]) + # SMTP falls back to IMAP if not specified + acc.setdefault("smtp_host", acc.get("imap_host")) + acc.setdefault("smtp_port", 587) + acc.setdefault("smtp_username", acc.get("imap_username")) + acc.setdefault("smtp_password", acc.get("imap_password")) for field in required: if field not in acc: raise RuntimeError(