77 lines
2.4 KiB
Bash
Executable File
77 lines
2.4 KiB
Bash
Executable File
#!/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
|