Commit 2775fb9
Changed files (2)
lib
minbox
lib/minbox/client.rb
@@ -16,12 +16,12 @@ module Minbox
case line
when /^EHLO/i then ehlo(line)
when /^HELO/i then helo(line)
- when /^MAIL FROM/i then mail_from(line)
- when /^RCPT TO/i then rcpt_to(line)
+ when /^MAIL FROM/i then noop
+ when /^RCPT TO/i then noop
when /^DATA/i then data(&block)
when /^QUIT/i then quit
when /^STARTTLS/i then start_tls
- when /^RSET/i then reset
+ when /^RSET/i then noop
when /^NOOP/i then noop
when /^AUTH PLAIN/i then auth_plain(line)
when /^AUTH LOGIN/i then auth_login(line)
@@ -55,14 +55,6 @@ module Minbox
yield(Mail.new(body.join)) unless body.empty?
end
- def rcpt_to(_line)
- write '250 OK'
- end
-
- def mail_from(_line)
- write '250 OK'
- end
-
def ehlo(line)
_ehlo, _client_domain = line.split(' ')
write "250-#{server.host} offers a warm hug of welcome"
@@ -86,10 +78,6 @@ module Minbox
@socket = socket.accept
end
- def reset
- write '250 OK'
- end
-
def noop
write '250 OK'
end
lib/minbox/publisher.rb
@@ -3,40 +3,6 @@
require 'redis'
module Minbox
- class Publisher
- attr_reader :publishers
-
- def initialize(*publishers)
- @publishers = Array(publishers)
- end
-
- def add(publisher)
- publishers.push(publisher)
- end
-
- def publish(mail)
- Thread.new do
- Minbox.logger.debug("Publishing: #{mail.message_id}")
- publishers.each { |x| x.publish(mail) }
- end
- end
-
- def self.from(outputs)
- publisher = Publisher.new
- outputs.each do |x|
- case x
- when 'stdout'
- publisher.add(LogPublisher.new)
- when 'redis'
- publisher.add(RedisPublisher.new)
- when 'file'
- publisher.add(FilePublisher.new)
- end
- end
- publisher
- end
- end
-
class LogPublisher
def initialize(logger = Minbox.logger)
@logger = logger
@@ -69,4 +35,38 @@ module Minbox
IO.write(File.join(dir, "#{Time.now.to_i}.eml"), mail.to_s)
end
end
+
+ class Publisher
+ REGISTERED_PUBLISHERS = {
+ stdout: LogPublisher,
+ redis: RedisPublisher,
+ file: FilePublisher,
+ }.freeze
+
+ attr_reader :publishers
+
+ def initialize(*publishers)
+ @publishers = Array(publishers)
+ end
+
+ def add(publisher)
+ publishers.push(publisher)
+ end
+
+ def publish(mail)
+ Thread.new do
+ Minbox.logger.debug("Publishing: #{mail.message_id}")
+ publishers.each { |x| x.publish(mail) }
+ end
+ end
+
+ def self.from(outputs)
+ publisher = Publisher.new
+ outputs.each do |x|
+ clazz = REGISTERED_PUBLISHERS[x.to_sym]
+ publisher.add(clazz.new) if clazz
+ end
+ publisher
+ end
+ end
end