mailcatcher/bin/catchmail
Samuel Cochran e76d367755 Bring catchmail closer to sendmail
Sendmail's conventional interface is `sendmail [options] [recipient ...]`

Fixes #188
2015-01-17 15:21:13 +11:00

72 lines
1.5 KiB
Ruby
Executable File

#!/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