class Aliyun::Email

Attributes

access_key_id[RW]
access_key_secret[RW]
account_name[RW]
action[RW]
address_type[RW]
format[RW]
region_id[RW]
reply_to_address[RW]
signature_method[RW]
signature_version[RW]
version[RW]

Public Class Methods

new(access_key_id, access_key_secret, account_name) click to toggle source
# File lib/aliyun/email.rb, line 22
def initialize(access_key_id, access_key_secret, account_name)
  # public args
  @access_key_secret = access_key_secret
  @access_key_id = access_key_id
  @format ||= 'JSON'
  @region_id ||= 'cn-hangzhou'
  @signature_method ||= 'HMAC-SHA1'
  @signature_version ||= '1.0'
  @version ||= '2015-11-23'

  # function args
  @action ||= 'SingleSendMail'
  @account_name = account_name
  @reply_to_address = false
  @address_type = 1
end

Public Instance Methods

calculate_signature(key, string_to_sign) click to toggle source
# File lib/aliyun/email.rb, line 104
def calculate_signature key, string_to_sign
  Base64.encode64(OpenSSL::HMAC.digest('sha1', key, string_to_sign)).gsub("\n", '')
end
compute_signature(access_key_secret, canonicalized_query_string) click to toggle source
# File lib/aliyun/email.rb, line 99
def compute_signature access_key_secret, canonicalized_query_string
  string_to_sign = 'POST' + '&' + safe_encode('/') + '&' + safe_encode(canonicalized_query_string)
  signature = calculate_signature access_key_secret+"&", string_to_sign
end
create_params(to_address) click to toggle source
# File lib/aliyun/email.rb, line 39
def create_params(to_address)
  {
    # public args
    'AccessKeyId' => access_key_id,
    'Format' => format,
    'RegionId' => region_id,
    'SignatureMethod' => signature_method,
    'SignatureVersion' => signature_version,
    'Version' => version,

    'SignatureNonce' => seed_signature_nonce,
    'Timestamp' => seed_timestamp,

    # function args
    'Action' => action,
    'AccountName' => account_name,
    'ReplyToAddress' => reply_to_address,
    'AddressType' => address_type,
    'ToAddress' => to_address
  }
end
query_string(params) click to toggle source
# File lib/aliyun/email.rb, line 86
def query_string(params)
  params.keys.sort.map {|key| "%s=%s" % [safe_encode(key.to_s), safe_encode(params[key])]}.join('&')
end
safe_encode(value) click to toggle source
# File lib/aliyun/email.rb, line 108
def safe_encode value
  URI.encode_www_form_component(value).gsub(/\+/, '%20').gsub(/\*/, '%2A').gsub(/%7E/, '~')
end
seed_signature_nonce() click to toggle source
# File lib/aliyun/email.rb, line 94
def seed_signature_nonce
  Time.now.utc.strftime("%Y%m%d%H%M%S%L")
end
seed_timestamp() click to toggle source
# File lib/aliyun/email.rb, line 90
def seed_timestamp
  Time.now.utc.strftime("%FT%TZ")
end
send(to_address:, subject:, body:, from_alias: nil, click_trace: nil, format: :text) click to toggle source
# File lib/aliyun/email.rb, line 61
def send(to_address:, subject:, body:, from_alias: nil, click_trace: nil, format: :text)
  begin
    uri = URI("https://dm.aliyuncs.com")
    header = {"Content-Type": "application/x-www-form-urlencoded"}
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    req = Net::HTTP::Post.new(uri.request_uri, header)
    params = create_params(to_address)
    params['FromAlias'] = from_alias unless from_alias.nil?
    params['Subject'] = subject unless subject.nil?
    params[format == :text ? 'TextBody' : 'HtmlBody'] = body
    params['ClickTrace'] = click_trace unless click_trace.nil?
    req.body = sign_result(access_key_secret, params)
    response = http.request(req)
    response
  rescue => e
    puts "errors #{e}"
  end
end
sign_result(key_secret, params) click to toggle source
# File lib/aliyun/email.rb, line 81
def sign_result(key_secret, params)
  params_string = (query_string(params))
  "Signature=" + safe_encode(compute_signature(key_secret, params_string)) + '&' + params_string
end