在Heroku上使用Postmark API的Rails电子邮件-由对等方重置连接

vbsql7

今天,我有很多挫伤,试图一次学习两件事...用于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请求。我怀疑问题出在排头附近-变速箱的除车身以外的部分。

在下面的代码中看到的抢救子句将捕获错误“对等方重置连接”。此时,我不知道我是否接近提供Postmark身份验证的标头的正确格式。

我有正确的服务器令牌(在config条目中),“发件人”电子邮件已获得必需的邮戳签名。

   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 <[email protected]>',
          '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 <[email protected]>', # 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

感谢您的指导!

temochka

我是Wildbit的雇员,也是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::Post通常使用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' => '[email protected]',
             '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

并且,如果您net/http对正式的Postmark Ruby gem的用法感兴趣,请查看HttpClient类的源代码

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Heroku上使用Postmark API的Rails电子邮件-对等重置连接

来自分类Dev

使用sshfs由对等方重置连接

来自分类Dev

由systemctl上的对等方重置为根的连接

来自分类Dev

使用Ruby进行REST HTTPS登录-由对等方重置连接

来自分类Dev

由对等方重置连接-使用Bitly时生产中出现SSL_connect错误

来自分类Dev

使用Outlook / Office365 REST API从连接的电子邮件地址发送邮件

来自分类Dev

电子邮件是从哪里发送的?(使用rails + heroku + sendgrid)

来自分类Dev

电子邮件是从哪里发送的?(使用rails + heroku + sendgrid)

来自分类Dev

MobaXterm-由SSH服务器上的对等方重置

来自分类Dev

使用回送电子邮件连接器发送电子邮件

来自分类Dev

在Heroku上使用Rails4发送电子邮件

来自分类Dev

Django Amazon S3 Heroku。对等方重置连接。删除关于collectstatic脚本的确认

来自分类Dev

重置密码停留在无效的电子邮件上

来自分类Dev

Rails使用IMAP访问Yahoo邮件-解析电子邮件

来自分类Dev

Rails:使用Mailjet Api V3发送电子邮件

来自分类Dev

在 API 模式下使用 Rails 5 进行电子邮件样式的 Bootstrap

来自分类Dev

使用数据创建重置密码链接并发送到电子邮件 ASP.NET Core Web-API

来自分类Dev

使用Django的密码重置通知用户电子邮件无效

来自分类Dev

作为回应,使用电子邮件功能重置密码

来自分类Dev

使用 react-redux-firebase 重置密码电子邮件

来自分类Dev

使用名称和电子邮件进行Rails电子邮件验证

来自分类Dev

使用2封电子邮件和凭据在Rails中发送电子邮件

来自分类Dev

对等方重置连接-打开URL时使用SSL_connect

来自分类Dev

使用电子邮件 API + Meteor 1.5 以“消息剪辑”的形式收到的电子邮件

来自分类Dev

在Heroku上使用nodemailer发送电子邮件失败

来自分类Dev

在 heroku 上使用 Action Mailer 安排电子邮件

来自分类Dev

使用Python获取始终连接的电子邮件

来自分类Dev

通过电子邮件在Rails上确认评论

来自分类Dev

Rails 4,不使用sendmail发送电子邮件

Related 相关文章

  1. 1

    在Heroku上使用Postmark API的Rails电子邮件-对等重置连接

  2. 2

    使用sshfs由对等方重置连接

  3. 3

    由systemctl上的对等方重置为根的连接

  4. 4

    使用Ruby进行REST HTTPS登录-由对等方重置连接

  5. 5

    由对等方重置连接-使用Bitly时生产中出现SSL_connect错误

  6. 6

    使用Outlook / Office365 REST API从连接的电子邮件地址发送邮件

  7. 7

    电子邮件是从哪里发送的?(使用rails + heroku + sendgrid)

  8. 8

    电子邮件是从哪里发送的?(使用rails + heroku + sendgrid)

  9. 9

    MobaXterm-由SSH服务器上的对等方重置

  10. 10

    使用回送电子邮件连接器发送电子邮件

  11. 11

    在Heroku上使用Rails4发送电子邮件

  12. 12

    Django Amazon S3 Heroku。对等方重置连接。删除关于collectstatic脚本的确认

  13. 13

    重置密码停留在无效的电子邮件上

  14. 14

    Rails使用IMAP访问Yahoo邮件-解析电子邮件

  15. 15

    Rails:使用Mailjet Api V3发送电子邮件

  16. 16

    在 API 模式下使用 Rails 5 进行电子邮件样式的 Bootstrap

  17. 17

    使用数据创建重置密码链接并发送到电子邮件 ASP.NET Core Web-API

  18. 18

    使用Django的密码重置通知用户电子邮件无效

  19. 19

    作为回应,使用电子邮件功能重置密码

  20. 20

    使用 react-redux-firebase 重置密码电子邮件

  21. 21

    使用名称和电子邮件进行Rails电子邮件验证

  22. 22

    使用2封电子邮件和凭据在Rails中发送电子邮件

  23. 23

    对等方重置连接-打开URL时使用SSL_connect

  24. 24

    使用电子邮件 API + Meteor 1.5 以“消息剪辑”的形式收到的电子邮件

  25. 25

    在Heroku上使用nodemailer发送电子邮件失败

  26. 26

    在 heroku 上使用 Action Mailer 安排电子邮件

  27. 27

    使用Python获取始终连接的电子邮件

  28. 28

    通过电子邮件在Rails上确认评论

  29. 29

    Rails 4,不使用sendmail发送电子邮件

热门标签

归档