Skip to main content

Shell Script Client to Receive Email API.

#!/bin/sh
#
# Shell client script for Receive Email API (https://1secmail.net)
#
# Dependencies: curl, jq
# Author: [Mitch Weaver](https://github.com/mitchweaver)
# Updated by: Jon LaBelle
#
# Source: https://github.com/mitchweaver/bin/blob/master/OLD/1secmail
# Also see: https://github.com/sdushantha/tmpmail
#

usage() {
    cat >&2 << EOF

Usage: ${0##*/} [options] <email>

    -g               generate email address
    -c <email>       check email
    -v <id> <email>  view email at id
    -f <email>       view first email in inbox

EOF
    exit 1
}

die() {
    print >&2 '%s\n' "$*"
    exit 1
}

check_deps() {
    for dep in curl jq; do
        command -v $dep > /dev/null \
            || die "Missing dependency: $dep"
    done
}

gen_email() {
    # Note: "LC_ALL=C" fixes "tr: Illegal byte sequence" error on macOS. Environment LC_ALL was "en_US.UTF-8".
    acc=$(head /dev/urandom | LC_ALL=C tr -dc a-z0-9 | cut -c1-10)
    read -r tld << EEOF
$(
        sort -R << EOF
com
net
org
EOF
    )
EEOF
    printf '%s@1secmail.%s\n' "$acc" "$tld"
}

validate_email() {
    case $1 in
        *@????????.???) ;;
        *) usage ;;
    esac
}

check_mail() {
    validate_email "$1"
    acc=${1%@*}
    tld=${1#*.}
    curl -sL "https://1secmail.$tld/api/v1/?action=getMessages&login=$acc&domain=1secmail.$tld" | jq -r
}

view_mail() {
    validate_email "$2"
    case $1 in
        [0-9][0-9][0-9][0-9][0-9][0-9]*) ;;
        *) usage ;;
    esac
    acc=${2%@*}
    tld=${2#*.}
    curl -sL "https://www.1secmail.$tld/api/v1/?action=readMessage&login=$acc&domain=1secmail.$tld&id=$1" \
        | jq -r '.body'
}

view_first() {
    validate_email "$1"
    id=$(check_mail "$1" | grep id | head -n 1 | grep -oE '[0-9]+')
    view_mail "$id" "$1"
}

main() {
    check_deps
    case ${1#-} in
        g) gen_email ;;
        c) check_mail "$2" ;;
        v) view_mail "$2" "$3" ;;
        1 | f) view_first "$2" ;;
        *) usage ;;
    esac
}

main "$@"