Commit 7368a790 authored by David Kerr's avatar David Kerr
Browse files

Merge branch 'dev' of https://github.com/Neilpang/acme.sh into dev

parents fb749dc5 527e1b8a
#!/usr/bin/env sh
#Support local mail app
#MAIL_BIN="sendmail"
#MAIL_FROM="yyyy@gmail.com"
#MAIL_TO="yyyy@gmail.com"
mail_send() {
_subject="$1"
_content="$2"
_statusCode="$3" #0: success, 1: error 2($RENEW_SKIP): skipped
_debug "_subject" "$_subject"
_debug "_content" "$_content"
_debug "_statusCode" "$_statusCode"
MAIL_BIN="${MAIL_BIN:-$(_readaccountconf_mutable MAIL_BIN)}"
if [ -n "$MAIL_BIN" ] && ! _exists "$MAIL_BIN"; then
_err "It seems that the command $MAIL_BIN is not in path."
return 1
fi
_MAIL_CMD=$(_mail_cmnd)
if [ -n "$MAIL_BIN" ]; then
_saveaccountconf_mutable MAIL_BIN "$MAIL_BIN"
else
_clearaccountconf "MAIL_BIN"
fi
_MAIL_BODY=$(_mail_body)
MAIL_FROM="${MAIL_FROM:-$(_readaccountconf_mutable MAIL_FROM)}"
if [ -n "$MAIL_FROM" ]; then
if ! _contains "$MAIL_FROM" "@"; then
_err "It seems that the MAIL_FROM=$MAIL_FROM is not a valid email address."
return 1
fi
_saveaccountconf_mutable MAIL_FROM "$MAIL_FROM"
fi
MAIL_TO="${MAIL_TO:-$(_readaccountconf_mutable MAIL_TO)}"
if [ -n "$MAIL_TO" ]; then
if ! _contains "$MAIL_TO" "@"; then
_err "It seems that the MAIL_TO=$MAIL_TO is not a valid email address."
return 1
fi
_saveaccountconf_mutable MAIL_TO "$MAIL_TO"
else
MAIL_TO="$(_readaccountconf ACCOUNT_EMAIL)"
if [ -z "$MAIL_TO" ]; then
_err "It seems that account email is empty."
return 1
fi
fi
contenttype="text/plain; charset=utf-8"
subject="=?UTF-8?B?$(echo "$_subject" | _base64)?="
result=$({ echo "$_MAIL_BODY" | eval "$_MAIL_CMD"; } 2>&1)
if [ $? -ne 0 ]; then
_debug "mail send error."
_err "$result"
return 1
fi
_debug "mail send success."
return 0
}
_mail_cmnd() {
if [ -n "$MAIL_BIN" ]; then
_MAIL_BIN="$MAIL_BIN"
elif _exists "sendmail"; then
_MAIL_BIN="sendmail"
elif _exists "ssmtp"; then
_MAIL_BIN="ssmtp"
elif _exists "mutt"; then
_MAIL_BIN="mutt"
elif _exists "mail"; then
_MAIL_BIN="mail"
else
_err "Please install sendmail, ssmtp, mutt or mail first."
return 1
fi
case $(basename "$_MAIL_BIN") in
sendmail)
if [ -n "$MAIL_FROM" ]; then
echo "'$_MAIL_BIN' -f '$MAIL_FROM' '$MAIL_TO'"
else
echo "'$_MAIL_BIN' '$MAIL_TO'"
fi
;;
ssmtp)
echo "'$_MAIL_BIN' '$MAIL_TO'"
;;
mutt | mail)
echo "'$_MAIL_BIN' -s '$_subject' '$MAIL_TO'"
;;
*)
_err "Command $MAIL_BIN is not supported, use sendmail, ssmtp, mutt or mail."
return 1
;;
esac
}
_mail_body() {
if [ "$_MAIL_BIN" = "sendmail" ] || [ "$_MAIL_BIN" = "ssmtp" ]; then
if [ -n "$MAIL_FROM" ]; then
echo "From: $MAIL_FROM"
fi
echo "To: $MAIL_TO"
echo "Subject: $subject"
echo "Content-Type: $contenttype"
echo
fi
echo "$_content"
}
#!/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 sendbox 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
}
#!/usr/bin/env sh
# support pop
pop_send() {
_subject="$1"
_content="$2"
_statusCode="$3" #0: success, 1: error 2($RENEW_SKIP): skipped
_debug "_subject" "$_subject"
_debug "_content" "$_content"
_debug "_statusCode" "$_statusCode"
_err "Not implemented yet."
return 1
}
#!/usr/bin/env sh
#Support SENDGRID.com api
#SENDGRID_API_KEY=""
#SENDGRID_TO="xxxx@xxx.com"
#SENDGRID_FROM="xxxx@cccc.com"
sendgrid_send() {
_subject="$1"
_content="$2"
_statusCode="$3" #0: success, 1: error 2($RENEW_SKIP): skipped
_debug "_statusCode" "$_statusCode"
SENDGRID_API_KEY="${SENDGRID_API_KEY:-$(_readaccountconf_mutable SENDGRID_API_KEY)}"
if [ -z "$SENDGRID_API_KEY" ]; then
SENDGRID_API_KEY=""
_err "You didn't specify a sendgrid api key SENDGRID_API_KEY yet ."
_err "You can get yours from here https://sendgrid.com"
return 1
fi
_saveaccountconf_mutable SENDGRID_API_KEY "$SENDGRID_API_KEY"
SENDGRID_TO="${SENDGRID_TO:-$(_readaccountconf_mutable SENDGRID_TO)}"
if [ -z "$SENDGRID_TO" ]; then
SENDGRID_TO=""
_err "You didn't specify an email to SENDGRID_TO receive messages."
return 1
fi
_saveaccountconf_mutable SENDGRID_TO "$SENDGRID_TO"
SENDGRID_FROM="${SENDGRID_FROM:-$(_readaccountconf_mutable SENDGRID_FROM)}"
if [ -z "$SENDGRID_FROM" ]; then
SENDGRID_FROM=""
_err "You didn't specify an email to SENDGRID_FROM receive messages."
return 1
fi
_saveaccountconf_mutable SENDGRID_FROM "$SENDGRID_FROM"
export _H1="Authorization: Bearer $SENDGRID_API_KEY"
export _H2="Content-Type: application/json"
_content="$(echo "$_content" | _json_encode)"
_data="{\"personalizations\": [{\"to\": [{\"email\": \"$SENDGRID_TO\"}]}],\"from\": {\"email\": \"$SENDGRID_FROM\"},\"subject\": \"$_subject\",\"content\": [{\"type\": \"text/plain\", \"value\": \"$_content\"}]}"
response="" #just make shellcheck happy
if _post "$_data" "https://api.sendgrid.com/v3/mail/send"; then
if [ -z "$response" ]; then
_info "sendgrid send sccess."
return 0
fi
fi
_err "sendgrid send error."
_err "$response"
return 1
}
#!/usr/bin/env sh
#Support Slack webhooks
#SLACK_WEBHOOK_URL=""
#SLACK_CHANNEL=""
#SLACK_USERNAME=""
slack_send() {
_subject="$1"
_content="$2"
_statusCode="$3" #0: success, 1: error 2($RENEW_SKIP): skipped
_debug "_statusCode" "$_statusCode"
SLACK_WEBHOOK_URL="${SLACK_WEBHOOK_URL:-$(_readaccountconf_mutable SLACK_WEBHOOK_URL)}"
if [ -z "$SLACK_WEBHOOK_URL" ]; then
SLACK_WEBHOOK_URL=""
_err "You didn't specify a Slack webhook url SLACK_WEBHOOK_URL yet."
return 1
fi
_saveaccountconf_mutable SLACK_WEBHOOK_URL "$SLACK_WEBHOOK_URL"
SLACK_CHANNEL="${SLACK_CHANNEL:-$(_readaccountconf_mutable SLACK_CHANNEL)}"
if [ -n "$SLACK_CHANNEL" ]; then
_saveaccountconf_mutable SLACK_CHANNEL "$SLACK_CHANNEL"
fi
SLACK_USERNAME="${SLACK_USERNAME:-$(_readaccountconf_mutable SLACK_USERNAME)}"
if [ -n "$SLACK_USERNAME" ]; then
_saveaccountconf_mutable SLACK_USERNAME "$SLACK_USERNAME"
fi
export _H1="Content-Type: application/json"
_content="$(printf "*%s*\n%s" "$_subject" "$_content" | _json_encode)"
_data="{\"text\": \"$_content\", "
if [ -n "$SLACK_CHANNEL" ]; then
_data="$_data\"channel\": \"$SLACK_CHANNEL\", "
fi
if [ -n "$SLACK_USERNAME" ]; then
_data="$_data\"username\": \"$SLACK_USERNAME\", "
fi
_data="$_data\"mrkdwn\": \"true\"}"
if _post "$_data" "$SLACK_WEBHOOK_URL"; then
# shellcheck disable=SC2154
if [ "$response" = "ok" ]; then
_info "slack send success."
return 0
fi
fi
_err "slack send error."
_err "$response"
return 1
}
#!/usr/bin/env sh
# support smtp
smtp_send() {
_subject="$1"
_content="$2"
_statusCode="$3" #0: success, 1: error 2($RENEW_SKIP): skipped
_debug "_subject" "$_subject"
_debug "_content" "$_content"
_debug "_statusCode" "$_statusCode"
_err "Not implemented yet."
return 1
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment