在 Ruby 中使用 MailChimp API 3.0 订阅电子邮件
Subscribe an email with MailChimp API 3.0 in Ruby
我正在尝试从 Ruby 1.9.3 订阅一个用户到我的 MailChimp 列表。我有以下代码:
require 'net/http'
require 'digest/md5'
class Email < ActiveRecord::Base
attr_accessible :email
validates :email, :confirmation => true
before_create :chimp_subscribe
def chimp_subscribe
api_key = "my api key"
list_id = "my list id"
dc = "my data center"
member_id = Digest::MD5.hexdigest(self.email)
uri = URI.parse("https://" + dc + ".api.mailchimp.com/3.0/lists/" + list_id + "/members/" + member_id)
req = Net::HTTP::Put.new(uri.path)
req.body = { "email" => self.email, "status" => 'subscribed' }.to_json
req.content_type = "application/json"
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
end
end
end
在创建新 Email
之前,它会运行 chimp_subscribe
。不幸的是,它在请求块中中断,Errno::ECONNRESET
,这意味着 MailChimp 正在重置我的连接。
我是否遗漏了一些 MailChimp API 参数?我正在努力寻找它。
您请求的服务器是 HTTPS,因此您应该使用 SSL。
你应该首先要求它:
require 'openssl'
然后像这样提出您的要求:
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE # You should use VERIFY_PEER in production
res = http.request(req)
我正在尝试从 Ruby 1.9.3 订阅一个用户到我的 MailChimp 列表。我有以下代码:
require 'net/http'
require 'digest/md5'
class Email < ActiveRecord::Base
attr_accessible :email
validates :email, :confirmation => true
before_create :chimp_subscribe
def chimp_subscribe
api_key = "my api key"
list_id = "my list id"
dc = "my data center"
member_id = Digest::MD5.hexdigest(self.email)
uri = URI.parse("https://" + dc + ".api.mailchimp.com/3.0/lists/" + list_id + "/members/" + member_id)
req = Net::HTTP::Put.new(uri.path)
req.body = { "email" => self.email, "status" => 'subscribed' }.to_json
req.content_type = "application/json"
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
end
end
end
在创建新 Email
之前,它会运行 chimp_subscribe
。不幸的是,它在请求块中中断,Errno::ECONNRESET
,这意味着 MailChimp 正在重置我的连接。
我是否遗漏了一些 MailChimp API 参数?我正在努力寻找它。
您请求的服务器是 HTTPS,因此您应该使用 SSL。
你应该首先要求它:
require 'openssl'
然后像这样提出您的要求:
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE # You should use VERIFY_PEER in production
res = http.request(req)