Search code examples
ruby-on-railsemailactionmailermultipart

ActionMailer without template and multipart email


Rails will helpfully send multipart email if there are multiple template types present (e.g. .txt and .html files for the same mailer action).

However, what if I want to do this without templates? Normally we specify body and content_type as arguments:

mail to: 'a@example.com', subject: 'Hello', body: 'Hi', content_type: 'text/html'

So how can this be achieved with multiple bodies having their own type?


Solution

  • class TestMailer < ActionMailer::Base
      def welcome_email
        mail(to: 'example@example.com', subject: 'Welcome to My Awesome Site') do |format|
          format.html { render html: '<h1>Welcome XYZ!</h1>'.html_safe }
          format.text { render plain: 'Welcome XYZ' }
        end
      end
    end
    

    To use it call: TestMailer.welcome_email.deliver_now.

    Documentation, section 2.4