blob: 1a7082c852d5ea7bca934c15da37e15b0673cd45 [file] [log] [blame]
#!/usr/bin/env ruby
#
# Parse mail files and update summary YAML file
#
# DRAFT DRAFT DRAFT DRAFT
#
# Could perhaps be incorporated into the deliver script, once proven
$LOAD_PATH.unshift '/srv/whimsy/lib'
require 'whimsy/asf/yaml'
require 'mail'
MAIL_ROOT = '/srv/mail'
list = ARGV.shift || 'board' # provide the list on the command line (e.g. board)
yyyymm = ARGV.shift || Time.now.strftime('%Y%m')
yamlfile = ARGV.shift || File.join(MAIL_ROOT, list, "#{yyyymm}.yaml") # where to find the YAML summary
maildir = File.join(MAIL_ROOT, list, yyyymm) # where to find the mail files
data = Hash.new
begin
current = YamlFile.read(yamlfile)
rescue Errno::ENOENT
current = {}
end
Dir.glob("#{maildir}/[0-9a-f][0-9a-f]*").each do |p|
name = File.basename(p)
unless current[name]
mail=Mail.read(p)
entry = {
Subject: mail.subject,
Date: (mail['Date'].decoded rescue ''), # textual
DateParsed: (mail.date.to_s rescue ''), # parsed
From: (mail['From'].decoded rescue ''),
To: (mail['To'].decoded rescue ''),
Cc: (mail['Cc'].decoded rescue ''),
# list of destination emails
Emails: [(mail[:to].addresses.map(&:to_str) rescue []),(mail[:cc].addresses.map(&:to_str) rescue [])].flatten,
MessageId: mail.message_id, # could be nil
EnvelopeFrom: mail.envelope_from,
}
data[name] = entry
end
end
# update the file with any new entries
YamlFile.update(yamlfile) do |yaml|
data.each do |k,v|
unless yaml[k] # don't update existing entries
yaml[k] = v
end
end
end