2013-02-27 19 views
0

我正在使用Cloudmailin插件從我的Heroku應用程序接收電子郵件。但是,Cloudmailin無法提供 - 或者說,每次從Heroku獲得500個(因此地址是正確的)。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' 

我的路由是正確的; 「進入控制器!控制電子郵件!」來自課程開始時的投入,所以課堂肯定會進入。

# 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 

用戶和思想是不會有問題的其他地方使用的數據庫資源。保存過程與在腳手架生成的Thought控制器中工作的過程相同。我從Cloudmailin Rails 3 example複製了paramsRails.logger邏輯。

我真的很困惑 - 我哪裏錯了?我真的很感激任何指針。

回答

0

事實證明,這就是爲什麼你不應該在睡眠不足的情況下進行編碼。問題很簡單:沒有這樣的東西,params[:envelope][:from],只有params[:from])。我假設:from將是:envelope的一個子元素,可能是通過查看the second "Cloudmailin in Rails on Heroku" example中的模式形成的,其中用於記錄主題的代碼是Rails.logger.log params[:envelope][:subject]

我意識到這是讀後the API documentation for 'original' Cloudmailin format錯誤。首先我沒有發現/尋找這種資源,這是非常愚蠢的。

解決此問題後,代碼仍然不起作用,因爲User.where(:email => params[:from])只返回了Relation對象,而User對象是預期的。在Heroku的日誌錯誤是如下:

ActiveRecord::AssociationTypeMismatch (User(#29025160) expected, 
got ActiveRecord::Relation(#12334440)): 

由於只能用一些電子郵件一個用戶,修復User.where(:email => params[:from]).first有正確的行爲沒有副作用和結果。

相關問題