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