aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer/lib/action_mailer/delivery_method/sendmail.rb
diff options
context:
space:
mode:
authorMatthew Rudy Jacobs <MatthewRudyJacobs@gmail.com>2009-10-28 09:17:59 +0000
committerYehuda Katz <wycats@gmail.com>2009-11-01 02:23:47 +0100
commitf4f76772fb5c25357a54baaa9cd20f7e9a1cd653 (patch)
treec3095ca798d006fa5750538d862cf5fcc35da6ba /actionmailer/lib/action_mailer/delivery_method/sendmail.rb
parent3f560386125adabe441facf2514ad53425e4af4e (diff)
downloadrails-f4f76772fb5c25357a54baaa9cd20f7e9a1cd653.tar.gz
rails-f4f76772fb5c25357a54baaa9cd20f7e9a1cd653.tar.bz2
rails-f4f76772fb5c25357a54baaa9cd20f7e9a1cd653.zip
abstract all of the ActionMailer delivery methods into their own classes. thereby the following are equivalent
ActionMailer::Base.delivery_method = :smtp ActionMailer::Base.delivery_method = ActionMailer::DeliveryMethod::Smtp we could equally set our own custom object as long as it provides the instance method :perform_delivery(mail) eg. class MySmsDeliveryMethod def perform_delivery(mail) Sms.send(mail['to'], mail['body']) end end MySmsMailer.delivery_method = MySmsDeliveryMethod.new Signed-off-by: José Valim <jose.valim@gmail.com>
Diffstat (limited to 'actionmailer/lib/action_mailer/delivery_method/sendmail.rb')
-rw-r--r--actionmailer/lib/action_mailer/delivery_method/sendmail.rb22
1 files changed, 22 insertions, 0 deletions
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..34e03b8060
--- /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