66 lines
2.0 KiB
Bash
66 lines
2.0 KiB
Bash
#!/bin/bash
|
|
# Search emails by subject/sender/content
|
|
# Usage: mail-search.sh "query" [mailbox] [limit]
|
|
|
|
QUERY="${1:-}"
|
|
MAILBOX="${2:-}"
|
|
LIMIT="${3:-20}"
|
|
|
|
if [ -z "$QUERY" ]; then
|
|
echo "Usage: mail-search.sh \"query\" [mailbox] [limit]"
|
|
exit 1
|
|
fi
|
|
|
|
osascript <<EOF
|
|
tell application "Mail"
|
|
set output to ""
|
|
set foundMsgs to {}
|
|
set searchQuery to "$QUERY"
|
|
set limitCount to $LIMIT
|
|
|
|
if "$MAILBOX" is not "" then
|
|
-- Search specific mailbox across accounts
|
|
repeat with acct in every account
|
|
try
|
|
set targetMailbox to mailbox "$MAILBOX" of acct
|
|
set msgs to (messages of targetMailbox whose subject contains searchQuery or sender contains searchQuery)
|
|
repeat with m in msgs
|
|
set end of foundMsgs to m
|
|
end repeat
|
|
end try
|
|
end repeat
|
|
else
|
|
-- Search all mailboxes
|
|
repeat with acct in every account
|
|
repeat with mbox in every mailbox of acct
|
|
try
|
|
set msgs to (messages of mbox whose subject contains searchQuery or sender contains searchQuery)
|
|
repeat with m in msgs
|
|
set end of foundMsgs to m
|
|
end repeat
|
|
end try
|
|
end repeat
|
|
end repeat
|
|
end if
|
|
|
|
if (count of foundMsgs) < limitCount then set limitCount to (count of foundMsgs)
|
|
|
|
repeat with i from 1 to limitCount
|
|
set m to item i of foundMsgs
|
|
set mid to id of m
|
|
set msubject to subject of m
|
|
set msender to sender of m
|
|
set mdate to date received of m
|
|
set mread to read status of m
|
|
set readFlag to "●"
|
|
if mread then set readFlag to " "
|
|
set output to output & mid & " | " & readFlag & " | " & mdate & " | " & msender & " | " & msubject & linefeed
|
|
end repeat
|
|
|
|
if output is "" then
|
|
return "No emails found matching: " & searchQuery
|
|
end if
|
|
return output
|
|
end tell
|
|
EOF
|