74 lines
2.4 KiB
Ruby
Executable file
74 lines
2.4 KiB
Ruby
Executable file
require 'iconv'
|
|
require 'mail'
|
|
|
|
class Message < ActiveRecord::Base
|
|
|
|
belongs_to :user
|
|
belongs_to :folder
|
|
|
|
#set_primary_key :uid
|
|
self.primary_key = :uid
|
|
attr_accessible :unseen, :to_addr, :size, :content_type, :folder_id, :subject, :date, :uid, :from_addr, :user_id, :msg_id, :body, :cc_addr, :bcc_addr
|
|
attr_accessor :body
|
|
|
|
def self.addr_to_db(addr)
|
|
ret = ""
|
|
name = addr.name
|
|
name.nil? ? ret : ret << ApplicationController.decode_quoted(name)
|
|
ret << "<" + addr.mailbox + "@" + addr.host
|
|
ret
|
|
end
|
|
|
|
def self.getPageForUser(user,folder,page,sort_field,sort_dir)
|
|
|
|
order = 'date desc'
|
|
if sort_field
|
|
if Message.attribute_method?(sort_field) == true
|
|
order = sort_field
|
|
sort_dir == 'desc' ? order += ' desc' : sort_dir
|
|
end
|
|
end
|
|
|
|
Message.paginate :page => page , :per_page => user.prefs.msgs_per_page.to_i, :conditions=> ['user_id = ? and folder_id = ?', user.id,folder.id],:order => order
|
|
end
|
|
|
|
def self.createForUser(user,folder,message)
|
|
|
|
# envelope = imap_message.attr['ENVELOPE']
|
|
#
|
|
# envelope.from.nil? ? from = "" : from = addr_to_db(envelope.from[0])
|
|
# envelope.to.nil? ? to = "" : to = addr_to_db(envelope.to[0])
|
|
# envelope.subject.nil? ? subject = "" : subject = ApplicationController.decode_quoted(envelope.subject)
|
|
|
|
mail = Mail.new(message.attr['RFC822.HEADER'])
|
|
|
|
mail.date.nil? ? date = nil : date = mail.date.to_s
|
|
mail.From.nil? ? from = nil : from = mail.From.charseted
|
|
mail.To.nil? ? to = nil : to = mail.To.charseted
|
|
mail.Subject.nil? ? subject = nil : subject = mail.Subject.charseted
|
|
|
|
#logger.custom('subject',mail.Subject.encoded)
|
|
#logger.custom('subject',subject)
|
|
#logger.custom('mail',mail.inspect)
|
|
|
|
create(
|
|
:user_id => user.id,
|
|
:folder_id => folder.id,
|
|
:msg_id => mail.message_id,
|
|
:uid => message.attr['UID'].to_i,
|
|
:from_addr => from,
|
|
:to_addr => to,
|
|
:subject => subject,
|
|
:content_type => mail.content_type,
|
|
:date => date,
|
|
:unseen => !(message.attr['FLAGS'].member? :Seen),
|
|
:size => message.attr['RFC822.SIZE']
|
|
)
|
|
end
|
|
|
|
def change_folder(folder)
|
|
update_attributes(:folder_id => folder.id)
|
|
end
|
|
|
|
end
|