我正在使用 Cloudmailin 插件从我的 Heroku 应用程序接收电子邮件。但是,Cloudmailin 无法交付 - 或者更确切地说,它每次都从 Heroku 获得 500(因此地址是正确的)。
Heroku 日志中的错误是
Started POST "/incoming_mails" for 109.107.35.53 at 2013-02-27 08:54:22 +0000
2013-02-27T08:54:23+00:00 app[web.1]: Entering the controller! Controlling the e-mail!
2013-02-27T08:54:23+00:00 app[web.1]:
2013-02-27T08:54:23+00:00 app[web.1]: NoMethodError (undefined method `[]' for nil:NilClass):
2013-02-27T08:54:23+00:00 app[web.1]: app/controllers/incoming_mails_controller.rb:7:in `create'
我的路由是正确的;“进入控制器!控制电子邮件!” 来自课程开始时的 put,因此课程肯定会进入。
# routes.rb
post '/incoming_mails' => 'incoming_mails#create'
文件本身如下所示:
# /app/controllers/incoming_mails_controller.rb
class IncomingMailsController < ApplicationController
skip_before_filter :verify_authenticity_token
def create
puts "Entering the controller! Controlling the e-mail!"
Rails.logger.info params[:headers][:subject]
Rails.logger.info params[:plain]
Rails.logger.info params[:html]
if User.all.map(&:email).include? params[:envelope][:from] # check if user is registered
@thought = Thought.new
@thought.body = params[:plain].split("\n").first
@thought.user = User.where(:email => params[:envelope][:from])
@thought.date = DateTime.now
if @thought.save
render :text => 'Success', :status => 200
else
render :text => 'Internal failure', :status => 501
end
else
render :text => 'Unknown user', :status => 404 # 404 would reject the mail
end
end
end
用户和思想是在其他地方使用的数据库资源,没有问题。保存过程与脚手架生成的思想控制器中的工作相同。我从Cloudmailin Rails 3 示例中复制的params
和Rails.logger
逻辑。
我真的很困惑 - 我哪里错了?我真的很感激任何指示。