class MailSlackBot

Constants

VERSION

Attributes

config[R]

Public Class Methods

configure() { |config| ... } click to toggle source
# File lib/mail_slack_bot.rb, line 15
def configure
  @config = Configatron::RootStore.new
  @config.slack.channel = '#general'
  @config.slack.username = 'mail'
  @config.slack.icon_emoji = ':mail:'
  @config.mail_check_interval = 10
  @config.mail = Mail::Configuration.instance
  @config.logger = Logger.new(STDOUT)
  yield(@config)
end

Public Instance Methods

manipulate(mail, slack_client) click to toggle source
# File lib/mail_slack_bot.rb, line 50
def manipulate(mail, slack_client)
  text_plain = if mail.multipart?
    mail.parts.detect { |p| p.content_type =~ /text\/plain/i }.body.decoded
  else
    mail.body.decoded
  end
  slack_client.ping NKF.nkf('-w', text_plain),
                           pretext: mail.subject,
                           icon_emoji: @config.slack.icon_emoji
end
run() { |config| ... } click to toggle source
# File lib/mail_slack_bot.rb, line 28
def run
  @config = self.class.config
  yield(@config) if block_given?
  @logger = @config.logger
  sleep_time = @config.mail_check_interval
  slack_client = Slack::Notifier.new(@config.slack.team, @config.slack.token,
                                     channel: @config.slack.channel, username: @config.slack.username)
  loop do
    begin
      @logger.debug("Feching mail.")
      Mail.all.each do |mail|
        @logger.debug mail.subject
        @logger.debug mail.body.decoded
        manipulate(mail, slack_client)
      end
    rescue => e
      slack_client.ping e.backtrace.join("\n"), pretext: e.message, icon_emoji: ":bow:"
    end
    sleep sleep_time
  end
end