I'm using the Fetcher plugin which daemonizes polling the server for
emails. When it pulls in an email, it passes it (the Net::Imap
object) to the receive method of MailProcessor < ActionMailer::Base.
The receive method then calls the process_message class method of
IncomingMessage < ActiveRecord::Base, which should store the incoming
message to the database as well as do a number of other things.
However, this method does not seem to be getting executed for incoming
emails. On the other hand, when this method is called from the
controller containing the sms_in action, the message gets processed/
stored correctly. These are the methods in question:
class MailProcessor < ActionMailer::Base
def receive(mail)
IncomingMessage.process_message({ :sender => mail.from,
:subject => mail.subject,
:channel => "email",
:person_search_field => "email",
:date => mail.date,
:body => mail.body,
:delivery_point => mail.to })
end
class MessengerController < ApplicationController
def sms_in
@incoming_message, @opt_or_feedback_object,@processing_notes =
IncomingMessage.process_message({ :sender => params[:smsfrom],
:subject => params[:smsmsg],
:channel => "sms",
:gateway_id => params[:smsid],
:person_search_field => "mobile_phone",
:date => params[:smsdate],
:carrier => params[:network],
:delivery_point => params[:smsto] })
end
class IncomingMessage < ActiveRecord::Base
protected
def self.process_message(msg_hash)
@incoming_message = create_incoming_message
#more code to process the message...I didn't paste it here
because it calls
#a number of other class methods and they would be too much to
paste
end
def self.create_incoming_message
IncomingMessage.create(:subject => @msg_hash[:subject],
:person_id => "[EMAIL PROTECTED]",
:body => @msg_hash[:body],
:channel => @msg_hash[:channel],
:gateway_id => @msg_hash[:gateway_id],
:carrier => @msg_hash[:carrier],
:date => @msg_hash[:date],
:delivery_point_id => @delivery_point_id)
end
On Oct 8, 11:51 am, Frederick Cheung <[EMAIL PROTECTED]>
wrote:
> On 8 Oct 2008, at 16:34, gaveeno wrote:
>
>
>
>
>
> > This is a little convoluted and I'm new to Rails, so please bear with
> > me...
>
> > My application needs to receive both SMS and emails. I have a
> > controller that has a sms_in method, which receives SMS messages via a
> > HTTP POST request from an SMS gateway. That controller then calls the
> > IncomingMessage.process(args) method to go through a number of
> > validations and create the incoming message in the database as well as
> > various other database entries that are required with each incoming
> > message. This works fine.
>
> > However, I'm having trouble getting it to work for emails. In my
> > MailProcessor (ActionMailer) receive method, I'm trying to pass
> > similar arguments to the IncomingMessage.process(args) class method.
> > However, for some reason this isn't working...I can't seem to call a
> > class method for an ActiveRecord object from within the ActionMailer
> > object, and I have no idea why!
>
> That should work. Show what you're doing (and describe what you
> actually mean by "isn't working")
>
> Fred
>
> > Any help would be greatly appreciated!
> > -Gavin
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---