Sha256: 23037ac5e6b3f2ce5629b3600b41da1025ff9373ccc3207e2aad0e5b9ae75bdf

Contents?: true

Size: 1.31 KB

Versions: 5

Compression:

Stored size: 1.31 KB

Contents

require 'dslkit/polite'
require 'net/smtp'
require 'time'

class Mail
  extend DSLKit::DSLAccessor
  include DSLKit::InstanceExec
  include DSLKit::MethodMissingDelegator::DelegatorModule
  include DSLKit::BlockSelf

  def initialize(&block)
    super block_self(&block)
    instance_exec(&block)
  end

  dsl_accessor :mail_server, ENV['MAILSERVER'] || 'mail'

  dsl_accessor :body

  if ENV['USER']
    dsl_accessor :from, ENV['USER'] + '@' + (ENV['MAILSERVER'] || 'mail')
  else
    dsl_accessor :from, 'joe@doe.com'
  end

  dsl_accessor :to,       'flori@ping.de'

  dsl_accessor :subject,  'Test Email'

  dsl_accessor :date      do Time.now.rfc2822 end

  def message_id
    key = [ ENV['HOSTNAME'] || 'localhost', $$ , Time.now ].join
    (::Digest::MD5.new << key).to_s
  end

  def msg
    [
      "From: #{from}",
      "To: #{to}",
      "Subject: #{subject}",
      "Date: #{date}",
      "Message-Id: <#{message_id}@#{mail_server}>",
      '',
      body
    ] * "\n"
  end

  def send
    ::Net::SMTP.start(mail_server, 25) do |smtp|
      smtp.send_message msg, from, to
    end
  end
end

def mail(&block)
  Mail.new(&block)
end

def prompt
  STDOUT.print "Send to? "
  STDOUT.flush
  STDIN.gets.strip
end

m = mail do
  subject subject + ': Hi!'
  if rcpt = prompt
    to      rcpt
  end
  body    "Hello, world!\n"
end
m.send

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
dslkit-0.2.13 examples/mail.rb
dslkit-0.2.12 examples/mail.rb
dslkit-0.2.11 examples/mail.rb
dslkit-0.2.10 examples/mail.rb
dslkit-0.2.9 examples/mail.rb