Sha256: 635f8fe0518601c954216d7061338a9d0a635b56dcb3ba49bdc73a222eec03fb

Contents?: true

Size: 1.3 KB

Versions: 118

Compression:

Stored size: 1.3 KB

Contents

require 'tins'
require 'net/smtp'
require 'time'

class Mail
  extend Tins::DSLAccessor
  include Tins::InstanceExec
  include Tins::MethodMissingDelegator::DelegatorModule
  include Tins::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

118 entries across 104 versions & 8 rubygems

Version Path
tdiary-5.2.4 vendor/bundle/ruby/3.1.0/gems/tins-1.31.1/examples/mail.rb
tdiary-5.2.3 vendor/bundle/ruby/3.1.0/gems/tins-1.31.1/examples/mail.rb
tdiary-5.2.2 vendor/bundle/ruby/3.1.0/gems/tins-1.31.1/examples/mail.rb
tins-1.31.1 examples/mail.rb
tdiary-5.2.1 vendor/bundle/ruby/3.1.0/gems/tins-1.31.0/examples/mail.rb
tins-1.31.0 examples/mail.rb
tins-1.30.0 examples/mail.rb
tdiary-5.2.0 vendor/bundle/ruby/3.0.0/gems/tins-1.29.1/examples/mail.rb
tdiary-5.2.0 vendor/bundle/ruby/2.7.0/gems/tins-1.29.1/examples/mail.rb
tdiary-5.1.7 vendor/bundle/ruby/2.7.0/gems/tins-1.29.1/examples/mail.rb
tdiary-5.1.7 vendor/bundle/ruby/3.0.0/gems/tins-1.29.1/examples/mail.rb
tdiary-5.1.6 vendor/bundle/ruby/2.7.0/gems/tdiary-5.1.5/vendor/bundle/ruby/2.7.0/gems/tins-1.28.0/examples/mail.rb
tdiary-5.1.6 vendor/bundle/ruby/2.7.0/gems/tdiary-5.1.5/vendor/bundle/ruby/3.0.0/gems/tdiary-5.1.4/vendor/bundle/ruby/2.7.0/gems/tins-1.26.0/examples/mail.rb
tdiary-5.1.6 vendor/bundle/ruby/2.7.0/gems/tdiary-5.1.5/vendor/bundle/ruby/3.0.0/gems/tins-1.26.0/examples/mail.rb
tdiary-5.1.6 vendor/bundle/ruby/2.7.0/gems/tins-1.29.1/examples/mail.rb
tdiary-5.1.6 vendor/bundle/ruby/3.0.0/gems/tins-1.29.1/examples/mail.rb
tdiary-5.1.6 vendor/bundle/ruby/2.7.0/gems/tins-1.28.0/examples/mail.rb
tins-1.29.1 examples/mail.rb
tins-1.29.0 examples/mail.rb
tdiary-5.1.5 vendor/bundle/ruby/3.0.0/gems/tdiary-5.1.4/vendor/bundle/ruby/2.7.0/gems/tins-1.26.0/examples/mail.rb