- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我今天受了很多伤,试图同时学习两件事……Postmark 和 Rails HTTP 请求的 API。
目标:使用 Heroku 的 Postmark 附加组件发送生产电子邮件。
我正在尝试结合这篇关于 HTTP 请求的文章... http://docs.ruby-lang.org/en/2.0.0/Net/HTTP.html...使用此 API 引用邮戳... http://developer.postmarkapp.com/developer-send-api.html
不幸的是,Postmark 的示例是在 curl 中完成的,我没有成功地将它们转换为 HTTP 请求。我怀疑问题集中在 header - 传输的除正文之外的部分。
下面代码中的 rescue 子句会捕获错误“连接被对等方重置”。在这一点上,我不知道我是否接近提供 Postmark 身份验证的 header 的正确格式。
我有正确的服务器 token (在配置条目中)并且发件人电子邮件已获得所需的邮戳签名。
def send_production_email(email_address, subject, email_body)
# Use API to interact with Heroku add-on Postmark
# http://developer.postmarkapp.com/developer-send-api.html
uri = URI('https://api.postmarkapp.com/email')
# Form the request
req = Net::HTTP::Post.new(uri)
# Set request headers -- SUSPECT THIS IS WRONG
req['Accept'] = 'application/json'
req['Content-Type'] = 'application/json'
req['X-Postmark-Server-Token'] = Rails.application.config.postmark_token
rbody ={
'From' => 'Support <michael@mydomain.com>',
'To' => email_address,
'Subject' => subject,
'HtmlBody' => wrap_html(email_body),
'TextBody' => email_body
}.to_json
req.body = rbody
# Send the request, waiting for the response
begin
response = Net::HTTP.new(uri.host, uri.port).start {|http| http.request(req) }
rescue Exception => e
logthis("http request error: #{e.message}")
return
end
# ...parsing section omitted since I do not get that far...
end
第二次尝试以这种方式格式化,但导致相同的对等重置错误:
rbody ={
'From' => 'Support <michael@disambiguator.com>', # TODO: replace email when domain is live
'To' => email_address,
'Subject' => subject,
'HtmlBody' => wrap_html(email_body),
'TextBody' => email_body
}.to_json
uri = URI('https://api.postmarkapp.com/email')
http = Net::HTTP.new(uri.host, uri.port)
# http.use_ssl = true
request = Net::HTTP::Post.new(uri.path, {'Content-Type' => 'application/json', 'Accept' => 'application/json', 'X-Postmark-Server-Token' => Rails.application.config.postmark_token})
request.body = rbody
# Send the request, waiting for the response
begin
response = http.request(request)
rescue Exception => e
logthis("http request error: #{e.message}")
return
end
感谢您的指导!
最佳答案
我是 Wildbit 的员工,也是 official Postmark Ruby gem 的维护者.
“对等方重置连接”错误是由于您尝试将未加密的 HTTP 请求发送到期望通过 HTTPS 进行安全通信的端点而导致的。所以,如果你改变这一行:
Net::HTTP.new(uri.host, uri.port).start {|http| http.request(req) }
到:
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
response = http.start { |http| http.request(req) }
然后您应该能够收到来自 API 的响应。我看到你在第二个例子中有这一行,但它被评论了。由于您将此作为练习进行,因此我想补充一点,在使用 net/http
时,您通常不必使用底层类,例如 Net::HTTP: :发布
。使用 Net::HTTP
类的实例提供的高级 API 通常更简单。以下是如何使用它简化您的方法的示例:
def send_production_email(email_address, subject, email_body)
uri = URI('https://api.postmarkapp.com/email')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
headers = {'Accept' => 'application/json',
'Content-Type' => 'application/json',
'X-Postmark-Server-Token' => Rails.application.config.postmark_token}
payload = {'From' => 'tema@wildbit.com',
'To' => email_address,
'Subject' => subject,
'HtmlBody' => email_body,
'TextBody' => email_body}
http.post(uri.request_uri, payload.to_json, headers)
rescue => e
puts "http request error: #{e.message}"
end
而且,如果您对如何在官方 Postmark Ruby gem 中使用 net/http
感兴趣,请查看 HttpClient class’ source .
关于ruby-on-rails - 在 Heroku 上使用 Postmark API 的 Rails 电子邮件——由对等方重置连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28652502/
我正在尝试使用 PostMarkApp 将我系统的所有电子邮件通知放在一个保护伞下。并利用 Rails gem( postmark-rails 、 postmark-gem 和 mail )。我已成功
我使用 Rails 3 + Postmark-Rails。 起初,我在 postmarkapp.com 上创建了帐户来获取我的 api key 。 我通过电子邮件链接激活了我的签名 [例如,“vita
我正在尝试弄清楚如何设置我的 Rails 4 应用程序,以便设计邮件程序使用 Postmark 模板通过 Postmark 发送。 我的 gem 文件中有 postmark-rails gem。 我一
我想知道如何使用 Postmark 发送电子邮件,而不是在 web.config 中为各种登录控件指定 SMTP: asp:找回密码asp:更改密码 我不想使用 SMTP,Postmark 在我们所有
我使用 django python-postmark 进行邮寄。现在我的问题是我的静态图片没有显示在 Gmail 上。 Gmail 在图像的 src 前面添加一个 url 代理。如果删除前置的 url
如何使用 Sytem.Net.Mail 使用 PostMark SMTP 服务器发送邮件? 我不想使用那里的 API 我已经启动并运行了代码,这些代码之前使用 Gmail SMTP 发送我的邮件。但是
这与此相关question ,但在这种情况下,我返回的不是模型绑定(bind),而是模型绑定(bind)。我正在使用Postmark处理传入的电子邮件,该电子邮件会发布到带有 JSON payload
我今天受了很多伤,试图同时学习两件事……Postmark 和 Rails HTTP 请求的 API。 目标:使用 Heroku 的 Postmark 附加组件发送生产电子邮件。 我正在尝试结合这篇关于
我正在阅读 Postmark 文档,在那里看到了 rails gem (github link)。 我按照说明进行了设置,当我尝试发送电子邮件时遇到了此消息: Provide either email
我是一名优秀的程序员,十分优秀!