in www/secretary/workbench/models/message.rb [305:403]
def reply(fields)
mail = Mail.new
mail.from = fields[:from]
mail.in_reply_to = self.id
mail.references = self.id
if self.subject =~ /^re:\s/i
mail.subject = self.subject
elsif self.subject
mail.subject = 'Re: ' + self.subject
elsif fields[:subject]
mail.subject = fields[:subject]
end
mail.body = fields[:body]
to = []
cc = []
bcc = []
if fields[:bcc]
Array(fields[:bcc]).compact.each do |addr|
addr = Message.liberal_email_parser(addr) if addr.is_a? String
next if bcc.any? {|a| a.address == addr.address}
bcc << addr
end
end
if fields[:to]
Array(fields[:to]).compact.each do |addr|
addr = Message.liberal_email_parser(addr) if addr.is_a? String
next if to.any? {|a| a.address = addr.address}
to << addr
end
end
self.from.addrs.each do |addr|
next if to.any? {|a| a.address == addr.address}
if fields[:to]
next if cc.any? {|a| a.address == addr.address}
next if bcc.any? {|a| a.address == addr.address}
cc << addr
else
to << addr
end
end
if self.to
self.to.addrs.each do |addr|
next if to.any? {|a| a.address == addr.address}
next if cc.any? {|a| a.address == addr.address}
next if bcc.any? {|a| a.address == addr.address}
cc << addr
end
end
if self.cc
self.cc.each do |addr|
addr = Message.liberal_email_parser(addr) if addr.is_a? String
next if to.any? {|a| a.address == addr.address}
next if cc.any? {|a| a.address == addr.address}
next if bcc.any? {|a| a.address == addr.address}
cc << addr
end
end
if fields[:cc]
Array(fields[:cc]).compact.each do |addr|
addr = Message.liberal_email_parser(addr) if addr.is_a? String
next if to.any? {|a| a.address == addr.address}
next if cc.any? {|a| a.address == addr.address}
next if bcc.any? {|a| a.address == addr.address}
cc << addr
end
end
mail[:to] = to.map(&:format)
mail[:cc] = cc.map(&:format) unless cc.empty?
mail[:bcc] = bcc.map(&:format) unless bcc.empty?
mail
end