background_job.rb 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. class Observer::Ticket::Article::CommunicateEmail::BackgroundJob
  2. def initialize(id)
  3. @article_id = id
  4. end
  5. def perform
  6. record = Ticket::Article.find( @article_id )
  7. # build subject
  8. ticket = Ticket.lookup( :id => record.ticket_id )
  9. subject = ticket.subject_build( record.subject )
  10. # send email
  11. a = Channel::IMAP.new
  12. message = a.send(
  13. {
  14. :message_id => record.message_id,
  15. :in_reply_to => record.in_reply_to,
  16. :from => record.from,
  17. :to => record.to,
  18. :cc => record.cc,
  19. :subject => subject,
  20. :body => record.body,
  21. :attachments => record.attachments
  22. }
  23. )
  24. # store mail plain
  25. Store.add(
  26. :object => 'Ticket::Article::Mail',
  27. :o_id => record.id,
  28. :data => message.to_s,
  29. :filename => "ticket-#{ticket.number}-#{record.id}.eml",
  30. :preferences => {},
  31. :created_by_id => record.created_by_id,
  32. )
  33. # add history record
  34. recipient_list = ''
  35. [:to, :cc].each { |key|
  36. if record[key] && record[key] != ''
  37. if recipient_list != ''
  38. recipient_list += ','
  39. end
  40. recipient_list += record[key]
  41. end
  42. }
  43. if recipient_list != ''
  44. History.add(
  45. :o_id => record.id,
  46. :history_type => 'email',
  47. :history_object => 'Ticket::Article',
  48. :related_o_id => ticket.id,
  49. :related_history_object => 'Ticket',
  50. :value_from => record.subject,
  51. :value_to => recipient_list,
  52. :created_by_id => record.created_by_id,
  53. )
  54. end
  55. end
  56. end