AI Newsletter Digest improvements: fixed QP soft line break decoding, URL extraction, and content cleaning
This commit is contained in:
76
scripts/check-krillyclaw-email.sh
Executable file
76
scripts/check-krillyclaw-email.sh
Executable file
@@ -0,0 +1,76 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user