
Untitled
By: a guest on
Aug 5th, 2012 | syntax:
None | size: 1.40 KB | hits: 13 | expires: Never
#!/usr/bin/ruby
require "net/smtp"
require "getoptlong"
require "socket"
opts = GetoptLong.new(
[ '--to', '-t', GetoptLong::REQUIRED_ARGUMENT],
[ '--from', '-f', GetoptLong::REQUIRED_ARGUMENT],
[ '--server', '-s', GetoptLong::REQUIRED_ARGUMENT]
)
to = false
from = false
server = false
msg = ""
opts.each { |opt, arg|
case opt
when '--to'
to = arg
when '--from'
from = arg
when '--server'
server = arg
end
}
unless (to && from && server)
puts ("Please specify to (-t), from (-f) and smtp server (-s)")
exit
end
$stdin.each { |line|
msg << line
}
begin
smtp = Net::SMTP.new(server, 25)
smtp.open_timeout=60
smtp.read_timeout=90
smtp.start(Socket.gethostname) do |s|
s.send_message msg, from, to
end
rescue Net::SMTPFatalError => e
puts("Fatal error while sending message to #{to} via #{server}: #{e}");
rescue Net::SMTPServerBusy => e
puts("Failed to send message to #{to} via #{server}, try again later: #{e}");
rescue Timeout::Error => e
puts("Timeout reached while sending message to #{to} via #{server}, try again later: #{e}");
rescue Exception => e
puts("Unknown error while sending message to #{to} via #{server}: #{e.class} #{e}")
end