Class: BulkMail
- Inherits:
-
Object
- Object
- BulkMail
- Defined in:
- lib/bulkmail.rb
Constant Summary collapse
- LINE_BREAK =
"\r\n"
- HEADER_FMT =
"%s: %s\r\n".freeze
- @@server_settings =
{ :host => 'localhost', :port => 25, :helo_domain => nil, :user => nil, :password => nil, :auth => :plain }
Class Method Summary collapse
-
.format_headers(headers) ⇒ Object
Returns the message headers formatted.
-
.send_bulk(sender, recipients, body, headers) ⇒ Object
Sends bulk mail to a large number of recipients.
-
.send_message(smtp, from, to, body, headers = nil) ⇒ Object
Sends an email.
-
.server_settings ⇒ Object
Returns the server_settings hash.
-
.smtp ⇒ Object
Starts an SMTP session and yields.
Class Method Details
.format_headers(headers) ⇒ Object
Returns the message headers formatted
57 58 59 60 61 |
# File 'lib/bulkmail.rb', line 57 def self.format_headers(headers) headers.inject('') do |m, kv| m << (HEADER_FMT % [kv[0].to_header, kv[1]]) end end |
.send_bulk(sender, recipients, body, headers) ⇒ Object
Sends bulk mail to a large number of recipients.
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/bulkmail.rb', line 89 def self.send_bulk(sender, recipients, body, headers) failed = [] succeeded = [] headers[:from] = headers[:to] = sender recipients = recipients.map {|r| r.email_addr}.compact recipients.split(10).each do |list| begin smtp {|s| (s, sender.email_addr, list, body, headers)} succeeded.concat list puts "Sent message to #{list.join(', ')}" rescue => e failed.concat list puts "Failed to send to #{list.join(', ')}: #{e.}\r\n#{e.backtrace.first}" end end # log failed addresses unless failed.empty? File.open('failed.bulkmail', 'w') {|f| failed.each {|l|f.puts l}} end puts "Message to sent to #{succeeded.size} of #{recipients.size} recipients" end |
.send_message(smtp, from, to, body, headers = nil) ⇒ Object
Sends an email
77 78 79 80 81 82 83 84 85 86 |
# File 'lib/bulkmail.rb', line 77 def self.(smtp, from, to, body, headers = nil) if headers && !headers.empty? msg = format_headers(headers) else msg = LINE_BREAK end msg << LINE_BREAK msg << body smtp. msg, from, to end |
.server_settings ⇒ Object
Returns the server_settings hash
49 50 51 |
# File 'lib/bulkmail.rb', line 49 def self.server_settings @@server_settings end |
.smtp ⇒ Object
Starts an SMTP session and yields
64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/bulkmail.rb', line 64 def self.smtp Net::SMTP.start( @@server_settings[:host], @@server_settings[:port], @@server_settings[:helo_domain] || @@server_settings[:host], @@server_settings[:user], @@server_settings[:password], @@server_settings[:auth]) do |smtp| yield smtp end end |