Skip to content

Instantly share code, notes, and snippets.

@sandys
Created December 18, 2012 12:55
Show Gist options
  • Save sandys/4327712 to your computer and use it in GitHub Desktop.
Save sandys/4327712 to your computer and use it in GitHub Desktop.
Sending an email through Amazon SES using pure HTTP POST requests. You could potentially replicate this on curl.
require 'net/http'
require 'uri'
require 'cgi'
require 'time'
require 'base64'
@accesskey = "adfdlkf"
@secretaccesskey = "dfkjldf"
opts = {"Action" => "SendEmail",
"Source" => "[email protected]",
"Destination.ToAddresses.member.1" => "[email protected]",
"Message.Subject.Data" => "hi",
"Message.Body.Html.Data" => "hi2",
"AWSAccessKeyId" => @accesskey,
"Timestamp" => Time.now.getutc.iso8601
}
def amzn_auth_header(req_date)
digest = OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, @secretaccesskey, req_date)
sign = Base64.encode64(digest).gsub("\n", '')
"AWS3-HTTPS AWSAccessKeyId=#{@accessKeyId},Algorithm=HmacSHA1,Signature=#{sign}"
end
req_date = Time.now.getutc.rfc2822
headers = {
"X-Amzn-Authorization" => amzn_auth_header(req_date),
#"Date" => Time.now.getutc.httpdate
"x-amz-date" => req_date
}
puts opts.collect {|k,v| "#{k}=#{CGI::escape(v.to_s)}"}.join('&')
uri = URI.parse("https://email.us-east-1.amazonaws.com")
http = Net::HTTP.new(uri.host, uri.port)
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
http.use_ssl = true
request = Net::HTTP::Post.new("/")
headers.collect {|k,v| request.add_field(k,v) }
puts request.to_hash
request.set_form_data(opts)
response = http.request(request)
print response.body
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment