aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer/lib/action_mailer/delivery_method
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2009-11-02 23:46:00 -0200
committerJosé Valim <jose.valim@gmail.com>2009-11-02 23:46:00 -0200
commitd002826e54415a340e55fdbf363d005faebf8fc5 (patch)
tree431146dfb0b15c4507fd49bb7d6f18bd40ccf839 /actionmailer/lib/action_mailer/delivery_method
parent9ba83cce0318fa5051764f4a16c286adf30169e2 (diff)
parent14370e1aab6ddfb5b86cf50bd7e5abcebae0684c (diff)
downloadrails-d002826e54415a340e55fdbf363d005faebf8fc5.tar.gz
rails-d002826e54415a340e55fdbf363d005faebf8fc5.tar.bz2
rails-d002826e54415a340e55fdbf363d005faebf8fc5.zip
Merge branch 'master' of git://github.com/rails/rails
Diffstat (limited to 'actionmailer/lib/action_mailer/delivery_method')
-rw-r--r--actionmailer/lib/action_mailer/delivery_method/file.rb21
-rw-r--r--actionmailer/lib/action_mailer/delivery_method/sendmail.rb22
-rw-r--r--actionmailer/lib/action_mailer/delivery_method/smtp.rb31
-rw-r--r--actionmailer/lib/action_mailer/delivery_method/test.rb12
4 files changed, 86 insertions, 0 deletions
diff --git a/actionmailer/lib/action_mailer/delivery_method/file.rb b/actionmailer/lib/action_mailer/delivery_method/file.rb
new file mode 100644
index 0000000000..587ae37ffa
--- /dev/null
+++ b/actionmailer/lib/action_mailer/delivery_method/file.rb
@@ -0,0 +1,21 @@
+require 'tmpdir'
+
+module ActionMailer
+ module DeliveryMethod
+
+ # A delivery method implementation which writes all mails to a file.
+ class File < Method
+ self.settings = {
+ :location => defined?(Rails) ? "#{Rails.root}/tmp/mails" : "#{Dir.tmpdir}/mails"
+ }
+
+ def perform_delivery(mail)
+ FileUtils.mkdir_p settings[:location]
+
+ (mail.to + mail.cc + mail.bcc).uniq.each do |to|
+ ::File.open(::File.join(settings[:location], to), 'a') { |f| f.write(mail) }
+ end
+ end
+ end
+ end
+end
diff --git a/actionmailer/lib/action_mailer/delivery_method/sendmail.rb b/actionmailer/lib/action_mailer/delivery_method/sendmail.rb
new file mode 100644
index 0000000000..db55af79f1
--- /dev/null
+++ b/actionmailer/lib/action_mailer/delivery_method/sendmail.rb
@@ -0,0 +1,22 @@
+module ActionMailer
+ module DeliveryMethod
+
+ # A delivery method implementation which sends via sendmail.
+ class Sendmail < Method
+ self.settings = {
+ :location => '/usr/sbin/sendmail',
+ :arguments => '-i -t'
+ }
+
+ def perform_delivery(mail)
+ sendmail_args = settings[:arguments]
+ sendmail_args += " -f \"#{mail['return-path']}\"" if mail['return-path']
+ IO.popen("#{settings[:location]} #{sendmail_args}","w+") do |sm|
+ sm.print(mail.encoded.gsub(/\r/, ''))
+ sm.flush
+ end
+ end
+ end
+
+ end
+end
diff --git a/actionmailer/lib/action_mailer/delivery_method/smtp.rb b/actionmailer/lib/action_mailer/delivery_method/smtp.rb
new file mode 100644
index 0000000000..86b0ae8329
--- /dev/null
+++ b/actionmailer/lib/action_mailer/delivery_method/smtp.rb
@@ -0,0 +1,31 @@
+module ActionMailer
+ module DeliveryMethod
+ # A delivery method implementation which sends via smtp.
+ class Smtp < Method
+
+ self.settings = {
+ :address => "localhost",
+ :port => 25,
+ :domain => 'localhost.localdomain',
+ :user_name => nil,
+ :password => nil,
+ :authentication => nil,
+ :enable_starttls_auto => true,
+ }
+
+ def perform_delivery(mail)
+ destinations = mail.destinations
+ mail.ready_to_send
+ sender = (mail['return-path'] && mail['return-path'].spec) || mail['from']
+
+ smtp = Net::SMTP.new(settings[:address], settings[:port])
+ smtp.enable_starttls_auto if settings[:enable_starttls_auto] && smtp.respond_to?(:enable_starttls_auto)
+ smtp.start(settings[:domain], settings[:user_name], settings[:password],
+ settings[:authentication]) do |smtp|
+ smtp.sendmail(mail.encoded, sender, destinations)
+ end
+ end
+ end
+
+ end
+end
diff --git a/actionmailer/lib/action_mailer/delivery_method/test.rb b/actionmailer/lib/action_mailer/delivery_method/test.rb
new file mode 100644
index 0000000000..6e3239d52a
--- /dev/null
+++ b/actionmailer/lib/action_mailer/delivery_method/test.rb
@@ -0,0 +1,12 @@
+module ActionMailer
+ module DeliveryMethod
+
+ # A delivery method implementation designed for testing, which just appends each record to the :deliveries array
+ class Test < Method
+ def perform_delivery(mail)
+ ActionMailer::Base.deliveries << mail
+ end
+ end
+
+ end
+end