#!/usr/bin/env ruby begin require 'mail' rescue LoadError require 'rubygems' require 'mail' end require 'optparse' options = {:smtp_ip => '127.0.0.1', :smtp_port => 1025} OptionParser.new do |parser| parser.banner = <<-BANNER.gsub /^ +/, "" Usage: catchmail [options] [recipient ...] sendmail-like interface to forward mail to MailCatcher. BANNER parser.on('--ip IP') do |ip| options[:smtp_ip] = ip end parser.on('--smtp-ip IP', 'Set the ip address of the smtp server') do |ip| options[:smtp_ip] = ip end parser.on('--smtp-port PORT', Integer, 'Set the port of the smtp server') do |port| options[:smtp_port] = port end parser.on('-f FROM', 'Set the sending address') do |from| options[:from] = from end parser.on('-oi', 'Ignored option -oi') do |ignored| end parser.on('-t', 'Ignored option -t') do |ignored| end parser.on('-q', 'Ignored option -q') do |ignored| end parser.on('-x', '--no-exit', 'Can\'t exit from the application') do options[:no_exit] = true end parser.on('-h', '--help', 'Display this help information') do puts parser exit! end end.parse! Mail.defaults do delivery_method :smtp, :address => options[:smtp_ip], :port => options[:smtp_port] end message = Mail.new($stdin.read) message.return_path = options[:from] if options[:from] ARGV.each do |recipient| if message.to.nil? message.to = recipient else message.to << recipient end end message.deliver