Skip to content

Instantly share code, notes, and snippets.

@azumakuniyuki
Created May 31, 2017 07:00
Show Gist options
  • Save azumakuniyuki/3ad4b3a531b7ac6016e3f96232e3cc6a to your computer and use it in GitHub Desktop.
Save azumakuniyuki/3ad4b3a531b7ac6016e3f96232e3cc6a to your computer and use it in GitHub Desktop.
Sample script for updating sisito database
#!/usr/bin/env ruby
require 'fileutils'
require 'sisimai'
require 'mysql2'
require 'tmpdir'
COLUMNS = %w(
timestamp
lhost
rhost
alias
listid
reason
action
subject
messageid
smtpagent
softbounce
smtpcommand
destination
senderdomain
feedbacktype
diagnosticcode
deliverystatus
timezoneoffset
addresser
recipient
)
MAIL_DIR = $*.shift
def process(path, **options)
Dir.mktmpdir do |tmpdir|
FileUtils.mv(Dir["#{path}/*"], tmpdir)
v = Sisimai.make(tmpdir, **options) || []
v.each {|e| yield(e) }
end
end
def insert(mysql, data)
values = data.to_hash.values_at(*COLUMNS)
addresseralias = data.addresser.alias
addresseralias = data.addresser.address if addresseralias.empty?
values << addresseralias
columns = (COLUMNS + ['addresseralias', 'digest', 'created_at', 'updated_at']).join(?,)
timestamp = values.shift
values = (["FROM_UNIXTIME(#{timestamp})"] + values.map(&:inspect) + ['SHA1(recipient)', 'NOW()', 'NOW()']).join(?,)
sql = "INSERT INTO bounce_mails (#{columns}) VALUES (#{values})"
puts 'SQL = ' + sql
mysql.query(sql)
end
mysql = Mysql2::Client.new(host: 'localhost', username: 'root', database: 'sisito')
process(MAIL_DIR) do |data|
insert(mysql, data)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment