communicate_email.rb 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. class Observer::Ticket::Article::CommunicateEmail < ActiveRecord::Observer
  2. observe 'ticket::_article'
  3. def after_create(record)
  4. # return if we run import mode
  5. return if Setting.get('import_mode')
  6. # if sender is customer, do not communication
  7. sender = Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id )
  8. return 1 if sender == nil
  9. return 1 if sender['name'] == 'Customer'
  10. # only apply on emails
  11. type = Ticket::Article::Type.lookup( :id => record.ticket_article_type_id )
  12. return if type['name'] != 'email'
  13. # build subject
  14. ticket = Ticket.lookup( :id => record.ticket_id )
  15. subject = ticket.subject_build( record.subject )
  16. # send email
  17. a = Channel::IMAP.new
  18. message = a.send(
  19. {
  20. :message_id => record.message_id,
  21. :in_reply_to => record.in_reply_to,
  22. :from => record.from,
  23. :to => record.to,
  24. :cc => record.cc,
  25. :subject => subject,
  26. :body => record.body,
  27. :attachments => record.attachments
  28. }
  29. )
  30. # store mail plain
  31. Store.add(
  32. :object => 'Ticket::Article::Mail',
  33. :o_id => record.id,
  34. :data => message.to_s,
  35. :filename => "ticket-#{ticket.number}-#{record.id}.eml",
  36. :preferences => {},
  37. :created_by_id => record.created_by_id,
  38. )
  39. # add history record
  40. recipient_list = ''
  41. [:to, :cc].each { |key|
  42. if record[key] && record[key] != ''
  43. if recipient_list != ''
  44. recipient_list += ','
  45. end
  46. recipient_list += record[key]
  47. end
  48. }
  49. if recipient_list != ''
  50. History.history_create(
  51. :o_id => record.id,
  52. :history_type => 'email',
  53. :history_object => 'Ticket::Article',
  54. :related_o_id => ticket.id,
  55. :related_history_object => 'Ticket',
  56. :value_from => record.subject,
  57. :value_to => recipient_list,
  58. :created_by_id => record.created_by_id,
  59. )
  60. end
  61. end
  62. end