#!/bin/bash # Check for new emails and alert Anthony via Telegram # Uses imap-smtp-email skill configuration WORKSPACE_DIR="/home/openclaw/.openclaw/workspace" STATE_FILE="$WORKSPACE_DIR/memory/.krillyclaw-email-state.json" SCRIPT_DIR="$WORKSPACE_DIR/skills/imap-smtp-email" # Ensure state directory exists mkdir -p "$(dirname "$STATE_FILE")" # Initialize state if needed if [ ! -f "$STATE_FILE" ]; then echo '{"last_uid": 0, "last_check": 0}' > "$STATE_FILE" fi # Get last seen UID LAST_UID=$(jq -r '.last_uid // 0' "$STATE_FILE") # Check for unread emails using the imap-smtp-email skill cd "$SCRIPT_DIR" RESULT=$(NODE_TLS_REJECT_UNAUTHORIZED=0 node scripts/imap.js search --unseen --limit 20 2>&1) if [ $? -ne 0 ]; then echo "Error checking email: $RESULT" >&2 exit 1 fi # Parse UIDs from result NEW_UIDS=$(echo "$RESULT" | jq -r '.[].uid' 2>/dev/null | sort -n) if [ -z "$NEW_UIDS" ]; then # No unread messages - update check time only jq ".last_check = $(date +%s)" "$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE" exit 0 fi # Find truly new messages NEW_COUNT=0 NEWEST_UID=$LAST_UID ALERT_LINES=() while IFS= read -r MSG_UID; do if [ "$MSG_UID" -gt "$LAST_UID" ]; then NEW_COUNT=$((NEW_COUNT + 1)) if [ "$MSG_UID" -gt "$NEWEST_UID" ]; then NEWEST_UID=$MSG_UID fi # Get message details MSG=$(node scripts/imap.js fetch "$MSG_UID" 2>&1) SUBJECT=$(echo "$MSG" | jq -r '.subject // "No subject"' 2>/dev/null) FROM=$(echo "$MSG" | jq -r '.from // "Unknown sender"' 2>/dev/null) ALERT_LINES+=("• **$SUBJECT**\n From: $FROM") fi done <<< "$NEW_UIDS" # Update state jq ".last_uid = $NEWEST_UID | .last_check = $(date +%s)" "$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE" # Send alert if new messages found if [ "$NEW_COUNT" -gt 0 ]; then ALERT_MSG="📬 **$NEW_COUNT new email(s) in inbox**:\n\n" for LINE in "${ALERT_LINES[@]}"; do ALERT_MSG+="$LINE\n\n" done ALERT_MSG+="— Krilly 🦀" # Send via Telegram using gateway curl -s -X POST "http://127.0.0.1:18789/api/message/send" \ -H "Content-Type: application/json" \ -d "{\"channel\": \"telegram\", \"to\": \"telegram:1793951355\", \"message\": $(echo "$ALERT_MSG" | jq -Rs .)}" \ > /dev/null 2>&1 echo "Alert sent for $NEW_COUNT new messages" fi