132 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Bash
		
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Bash
		
	
	
#!/usr/bin/env sh
 | 
						|
 | 
						|
#Support mailgun.com api
 | 
						|
 | 
						|
#MAILGUN_API_KEY="xxxx"
 | 
						|
#MAILGUN_TO="yyyy@gmail.com"
 | 
						|
 | 
						|
#MAILGUN_REGION="us|eu"          #optional, use "us" as default
 | 
						|
#MAILGUN_API_DOMAIN="xxxxxx.com"  #optional, use the default sandbox domain
 | 
						|
#MAILGUN_FROM="xxx@xxxxx.com"    #optional, use the default sandbox account
 | 
						|
 | 
						|
_MAILGUN_BASE_US="https://api.mailgun.net/v3"
 | 
						|
_MAILGUN_BASE_EU="https://api.eu.mailgun.net/v3"
 | 
						|
 | 
						|
_MAILGUN_BASE="$_MAILGUN_BASE_US"
 | 
						|
 | 
						|
# subject  content statusCode
 | 
						|
mailgun_send() {
 | 
						|
  _subject="$1"
 | 
						|
  _content="$2"
 | 
						|
  _statusCode="$3" #0: success, 1: error 2($RENEW_SKIP): skipped
 | 
						|
  _debug "_statusCode" "$_statusCode"
 | 
						|
 | 
						|
  MAILGUN_API_KEY="${MAILGUN_API_KEY:-$(_readaccountconf_mutable MAILGUN_API_KEY)}"
 | 
						|
  if [ -z "$MAILGUN_API_KEY" ]; then
 | 
						|
    MAILGUN_API_KEY=""
 | 
						|
    _err "You didn't specify a mailgun api key MAILGUN_API_KEY yet ."
 | 
						|
    _err "You can get yours from here https://mailgun.com"
 | 
						|
    return 1
 | 
						|
  fi
 | 
						|
  _saveaccountconf_mutable MAILGUN_API_KEY "$MAILGUN_API_KEY"
 | 
						|
 | 
						|
  MAILGUN_REGION="${MAILGUN_REGION:-$(_readaccountconf_mutable MAILGUN_REGION)}"
 | 
						|
  if [ -z "$MAILGUN_REGION" ]; then
 | 
						|
    MAILGUN_REGION=""
 | 
						|
    _debug "The MAILGUN_REGION is not set, so use the default us region."
 | 
						|
    _MAILGUN_BASE="$_MAILGUN_BASE_US"
 | 
						|
  else
 | 
						|
    MAILGUN_REGION="$(echo "$MAILGUN_REGION" | _lower_case)"
 | 
						|
    _saveaccountconf_mutable MAILGUN_REGION "$MAILGUN_REGION"
 | 
						|
    if [ "$MAILGUN_REGION" = "us" ]; then
 | 
						|
      _MAILGUN_BASE="$_MAILGUN_BASE_US"
 | 
						|
    else
 | 
						|
      _MAILGUN_BASE="$_MAILGUN_BASE_EU"
 | 
						|
    fi
 | 
						|
  fi
 | 
						|
  _debug _MAILGUN_BASE "$_MAILGUN_BASE"
 | 
						|
  MAILGUN_TO="${MAILGUN_TO:-$(_readaccountconf_mutable MAILGUN_TO)}"
 | 
						|
  if [ -z "$MAILGUN_TO" ]; then
 | 
						|
    MAILGUN_TO=""
 | 
						|
    _err "You didn't specify an email to MAILGUN_TO receive messages."
 | 
						|
    return 1
 | 
						|
  fi
 | 
						|
  _saveaccountconf_mutable MAILGUN_TO "$MAILGUN_TO"
 | 
						|
 | 
						|
  MAILGUN_API_DOMAIN="${MAILGUN_API_DOMAIN:-$(_readaccountconf_mutable MAILGUN_API_DOMAIN)}"
 | 
						|
  if [ -z "$MAILGUN_API_DOMAIN" ]; then
 | 
						|
    _info "The MAILGUN_API_DOMAIN is not set, try to get the default sending sandbox domain for you."
 | 
						|
    if ! _mailgun_rest GET "/domains"; then
 | 
						|
      _err "Can not get sandbox domain."
 | 
						|
      return 1
 | 
						|
    fi
 | 
						|
    _sendboxDomain="$(echo "$response" | _egrep_o '"name": *"sandbox.*.mailgun.org"' | cut -d : -f 2 | tr -d '" ')"
 | 
						|
    _debug _sendboxDomain "$_sendboxDomain"
 | 
						|
    MAILGUN_API_DOMAIN="$_sendboxDomain"
 | 
						|
    if [ -z "$MAILGUN_API_DOMAIN" ]; then
 | 
						|
      _err "Can not get sandbox domain for MAILGUN_API_DOMAIN"
 | 
						|
      return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    _info "$(__green "When using sandbox domain, you must verify your email first.")"
 | 
						|
    #todo: add recepient
 | 
						|
  fi
 | 
						|
  if [ -z "$MAILGUN_API_DOMAIN" ]; then
 | 
						|
    _err "Can not get MAILGUN_API_DOMAIN"
 | 
						|
    return 1
 | 
						|
  fi
 | 
						|
  _saveaccountconf_mutable MAILGUN_API_DOMAIN "$MAILGUN_API_DOMAIN"
 | 
						|
 | 
						|
  MAILGUN_FROM="${MAILGUN_FROM:-$(_readaccountconf_mutable MAILGUN_FROM)}"
 | 
						|
  if [ -z "$MAILGUN_FROM" ]; then
 | 
						|
    MAILGUN_FROM="$PROJECT_NAME@$MAILGUN_API_DOMAIN"
 | 
						|
    _info "The MAILGUN_FROM is not set, so use the default value: $MAILGUN_FROM"
 | 
						|
  else
 | 
						|
    _debug MAILGUN_FROM "$MAILGUN_FROM"
 | 
						|
    _saveaccountconf_mutable MAILGUN_FROM "$MAILGUN_FROM"
 | 
						|
  fi
 | 
						|
 | 
						|
  #send from url
 | 
						|
  _msg="/$MAILGUN_API_DOMAIN/messages?from=$(printf "%s" "$MAILGUN_FROM" | _url_encode)&to=$(printf "%s" "$MAILGUN_TO" | _url_encode)&subject=$(printf "%s" "$_subject" | _url_encode)&text=$(printf "%s" "$_content" | _url_encode)"
 | 
						|
  _debug "_msg" "$_msg"
 | 
						|
  _mailgun_rest POST "$_msg"
 | 
						|
  if _contains "$response" "Queued. Thank you."; then
 | 
						|
    _debug "mailgun send success."
 | 
						|
    return 0
 | 
						|
  else
 | 
						|
    _err "mailgun send error"
 | 
						|
    _err "$response"
 | 
						|
    return 1
 | 
						|
  fi
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
# method uri  data
 | 
						|
_mailgun_rest() {
 | 
						|
  _method="$1"
 | 
						|
  _mguri="$2"
 | 
						|
  _mgdata="$3"
 | 
						|
  _debug _mguri "$_mguri"
 | 
						|
  _mgurl="$_MAILGUN_BASE$_mguri"
 | 
						|
  _debug _mgurl "$_mgurl"
 | 
						|
 | 
						|
  _auth="$(printf "%s" "api:$MAILGUN_API_KEY" | _base64)"
 | 
						|
  export _H1="Authorization: Basic $_auth"
 | 
						|
  export _H2="Content-Type: application/json"
 | 
						|
 | 
						|
  if [ "$_method" = "GET" ]; then
 | 
						|
    response="$(_get "$_mgurl")"
 | 
						|
  else
 | 
						|
    _debug _mgdata "$_mgdata"
 | 
						|
    response="$(_post "$_mgdata" "$_mgurl" "" "$_method")"
 | 
						|
  fi
 | 
						|
  if [ "$?" != "0" ]; then
 | 
						|
    _err "Error: $_mguri"
 | 
						|
    _err "$response"
 | 
						|
    return 1
 | 
						|
  fi
 | 
						|
  _debug2 response "$response"
 | 
						|
  return 0
 | 
						|
 | 
						|
}
 |