Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 5th, 2012  |  syntax: None  |  size: 1.40 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #!/usr/bin/ruby
  2.  
  3.  
  4. require "net/smtp"
  5. require "getoptlong"
  6. require "socket"
  7.  
  8. opts = GetoptLong.new(
  9.         [ '--to', '-t', GetoptLong::REQUIRED_ARGUMENT],
  10.         [ '--from', '-f', GetoptLong::REQUIRED_ARGUMENT],
  11.         [ '--server', '-s', GetoptLong::REQUIRED_ARGUMENT]
  12. )
  13.  
  14. to = false
  15. from = false
  16. server = false
  17. msg = ""
  18.  
  19. opts.each { |opt, arg|
  20.         case opt
  21.         when '--to'
  22.                 to = arg
  23.         when '--from'
  24.                 from = arg
  25.         when '--server'
  26.                 server = arg
  27.         end
  28. }
  29.  
  30. unless (to && from && server)
  31.         puts ("Please specify to (-t), from (-f) and smtp server (-s)")
  32.         exit
  33. end
  34.  
  35. $stdin.each { |line|
  36.         msg << line
  37. }
  38.  
  39. begin
  40.         smtp = Net::SMTP.new(server, 25)
  41.         smtp.open_timeout=60
  42.         smtp.read_timeout=90
  43.  
  44.         smtp.start(Socket.gethostname) do |s|
  45.                 s.send_message msg, from, to
  46.         end
  47. rescue Net::SMTPFatalError => e
  48.         puts("Fatal error while sending message to #{to} via #{server}: #{e}");
  49. rescue Net::SMTPServerBusy => e
  50.         puts("Failed to send message to #{to} via #{server}, try again later: #{e}");
  51. rescue Timeout::Error => e
  52.         puts("Timeout reached while sending message to #{to} via #{server}, try again later: #{e}");
  53. rescue Exception => e
  54.         puts("Unknown error while sending message to #{to} via #{server}: #{e.class} #{e}")
  55. end