Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 1958

Show
Ignore:
Timestamp:
07/31/05 08:26:32 (3 years ago)
Author:
minam
Message:

ActionMailer::Base.deliver(email) had been accidentally removed, but was documented in the Rails book #1849

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/actionmailer/CHANGELOG

    r1849 r1958  
    11*SVN* 
     2 
     3* ActionMailer::Base.deliver(email) had been accidentally removed, but was documented in the Rails book #1849 
    24 
    35* Fix problem with sendmail delivery where headers should be delimited by \n characters instead of \r\n, which confuses some mail readers #1742 [Kent Sibilev] 
  • trunk/actionmailer/lib/action_mailer/base.rb

    r1849 r1958  
    161161    attr_reader       :mail 
    162162 
     163    class << self 
     164      def method_missing(method_symbol, *parameters)#:nodoc: 
     165        case method_symbol.id2name 
     166          when /^create_([_a-z]\w*)/  then new($1, *parameters).mail 
     167          when /^deliver_([_a-z]\w*)/ then new($1, *parameters).deliver! 
     168          when "new" then nil 
     169          else super 
     170        end 
     171      end 
     172 
     173      def receive(raw_email) #:nodoc: 
     174        logger.info "Received mail:\n #{raw_email}" unless logger.nil? 
     175        mail = TMail::Mail.parse(raw_email) 
     176        mail.base64_decode 
     177        new.receive(mail) 
     178      end 
     179 
     180      # Deliver the given mail object directly. This can be used to deliver 
     181      # a preconstructed mail object, like: 
     182      # 
     183      #   email = MyMailer.create_some_mail(parameters) 
     184      #   email.set_some_obscure_header "frobnicate" 
     185      #   MyMailer.deliver(email) 
     186      def deliver(mail) 
     187        new.deliver!(mail) 
     188      end 
     189    end 
     190 
    163191    # Instantiate a new mailer object. If +method_name+ is not +nil+, the mailer 
    164192    # will be initialized according to the named method. If not, the mailer will 
     
    224252    end 
    225253 
    226     # Delivers the cached TMail::Mail object. If no TMail::Mail object has been 
    227     # created (via the #create! method, for instance) this will fail. 
    228     def deliver! #:nodoc: 
    229       raise "no mail object available for delivery!" unless @mail 
     254    # Delivers a TMail::Mail object. By default, it delivers the cached mail 
     255    # object (from the #create! method). If no cached mail object exists, and 
     256    # no alternate has been given as the parameter, this will fail. 
     257    def deliver!(mail = @mail) #:nodoc: 
     258      raise "no mail object available for delivery!" unless mail 
    230259      logger.info "Sent mail:\n #{mail.encoded}" unless logger.nil? 
    231260 
    232261      begin 
    233         send("perform_delivery_#{delivery_method}", @mail) if perform_deliveries 
     262        send("perform_delivery_#{delivery_method}", mail) if perform_deliveries 
    234263      rescue Object => e 
    235264        raise e if raise_delivery_errors 
    236265      end 
    237266 
    238       return @mail 
     267      return mail 
    239268    end 
    240269 
     
    335364        deliveries << mail 
    336365      end 
    337  
    338     class << self 
    339       def method_missing(method_symbol, *parameters)#:nodoc: 
    340         case method_symbol.id2name 
    341           when /^create_([_a-z]\w*)/  then new($1, *parameters).mail 
    342           when /^deliver_([_a-z]\w*)/ then new($1, *parameters).deliver! 
    343           when "new" then nil 
    344           else super 
    345         end 
    346       end 
    347  
    348       def receive(raw_email) 
    349         logger.info "Received mail:\n #{raw_email}" unless logger.nil? 
    350         mail = TMail::Mail.parse(raw_email) 
    351         mail.base64_decode 
    352         new.receive(mail) 
    353       end 
    354  
    355     end 
    356366  end 
    357367end 
  • trunk/actionmailer/test/mail_service_test.rb

    r1732 r1958  
    669669    assert_match(/:/, mail.bcc_addrs.to_s) 
    670670  end 
     671 
     672  def test_deliver_with_mail_object 
     673    mail = TestMailer::create_headers_with_nonalpha_chars(@recipient) 
     674    assert_nothing_raised { TestMailer.deliver(mail) } 
     675    assert_equal 1, TestMailer.deliveries.length 
     676  end 
    671677end 
    672678