Skip to content

Could not find operation SendEmail for version 2010-12-01,Why does it prompt this error? Didn't the old version of SES API SendEmail use exactly this version (2010-12-01)?​

0

#!/bin/bash set -e

AWS_ACCESS_KEY="" AWS_SECRET_KEY="" REGION="us-east-1" SERVICE="ses"
SOURCE_EMAIL=""

uri_encode() { local string="$1" local length=${#string} for (( i = 0; i < length; i++ )); do local c="${string:$i:1}" case $c in [a-zA-Z0-9_.~-]) printf "$c" ;; *) printf '%%%02X' "'$c" ;; esac done }

hmac_sha256() { local key="$1" local data="$2" echo -n "$data" | openssl dgst -sha256 -hmac "$key" -binary }

RECIPIENT="$1" SUBJECT="$2" BODY="$3"

TIMESTAMP=$(date -u +"%Y%m%dT%H%M%SZ") DATE=$(echo "$TIMESTAMP" | cut -c 1-8)

REQUEST_PARAMS=$(cat <<EOF Action=SendEmail &Version=2010-12-01 &Source=$(uri_encode "$SOURCE_EMAIL") &Destination.ToAddresses.member.1=$(uri_encode "$RECIPIENT") &Message.Body.Text.Data=$(uri_encode "$BODY") &Message.Body.Text.Charset=UTF-8 &Message.Subject.Data=$(uri_encode "$SUBJECT") &Message.Subject.Charset=UTF-8 EOF )

HOST="email.${REGION}.amazonaws.com" CANONICAL_HEADERS="content-type:application/x-www-form-urlencoded; charset=utf-8\nhost:${HOST}\nx-amz-date:${TIMESTAMP}" SIGNED_HEADERS="content-type;host;x-amz-date"

HASHED_PAYLOAD=$(echo -n "$REQUEST_PARAMS" | openssl dgst -sha256 -hex | cut -d' ' -f2)

CANONICAL_REQUEST="POST\n/\n\n${CANONICAL_HEADERS}\n\n${SIGNED_HEADERS}\n${HASHED_PAYLOAD}"

HASHED_CANONICAL_REQUEST=$(echo -en "$CANONICAL_REQUEST" | openssl dgst -sha256 -hex | cut -d' ' -f2)

ALGORITHM="AWS4-HMAC-SHA256" CREDENTIAL_SCOPE="${DATE}/${REGION}/${SERVICE}/aws4_request" STRING_TO_SIGN="${ALGORITHM}\n${TIMESTAMP}\n${CREDENTIAL_SCOPE}\n${HASHED_CANONICAL_REQUEST}"

DATE_KEY=$(hmac_sha256 "AWS4${AWS_SECRET_KEY}" "$DATE") DATE_REGION_KEY=$(hmac_sha256 "$DATE_KEY" "$REGION") DATE_REGION_SERVICE_KEY=$(hmac_sha256 "$DATE_REGION_KEY" "$SERVICE") SIGNING_KEY=$(hmac_sha256 "$DATE_REGION_SERVICE_KEY" "aws4_request")

SIGNATURE=$(echo -en "$STRING_TO_SIGN" | openssl dgst -sha256 -hmac "$SIGNING_KEY" -binary | xxd -p -c 256)

AUTHORIZATION_HEADER="${ALGORITHM} Credential=${AWS_ACCESS_KEY}/${CREDENTIAL_SCOPE}, SignedHeaders=${SIGNED_HEADERS}, Signature=${SIGNATURE}"

echo "$CANONICAL_REQUEST" echo "$STRING_TO_SIGN" echo "================="

RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "https://${HOST}/"
-H "Content-Type: application/x-www-form-urlencoded; charset=utf-8"
-H "Host: ${HOST}"
-H "X-Amz-Date: ${TIMESTAMP}"
-H "Authorization: ${AUTHORIZATION_HEADER}"
-d "$REQUEST_PARAMS")

BODY=$(echo "$RESPONSE" | sed '$d') STATUS=$(echo "$RESPONSE" | tail -n1)

echo "$STATUS" echo "$BODY"

1 Answer
0

Maybe the v1 version of sendemail is deprecated and the v2 version of sesapi should be used instead

answered a year ago

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.