Forum: Ruby on Rails ActionMailer - ROR Recipes - Multipart/alternative

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
softwareengineer 99 (Guest)
on 2006-02-06 23:01
(Received via mailing list)
I am using the SaltedHashLoginGenerator. and would like to send the
e-mail in multipart/alternative format.

  By default my application is using forgot_password_en.rhtml template.

  I read in the ROR Recipes book

  "ActionMailer sees these templates, recognizes the pattern in their
  file names, and automatically sets the MIME type of the message to
  multipart/alternative and adds each rendered view with the content
type
  in its file name."

  So I created  forgot_password_en.text.plain.rhtml template and
forgot_password_en.text.html.rhtml templates (and removed the
forgot_password_en.rhtml template temporarily).

  Now my application won't send any email.

  How can I make ActionMailer recognize these templates and set the
appropriate MIMe type?


  My mailer function looks like this:

    def forgot_password(member, url=nil)
      setup_email(member)

      # Email header info
      @subject += "Forgotten password notification"

      # Email body substitutions
      @body["name"] = "#{member.firstname} #{member.lastname}"
      @body["login"] = member.login
      @body["url"] = url || MemberSystem::CONFIG[:app_url].to_s
      @body["app_name"] = MemberSystem::CONFIG[:app_name].to_s
    end


  Thanks for your assistance.
  Frank
Chad F. (Guest)
on 2006-02-07 17:42
(Received via mailing list)
On 2/6/06, softwareengineer 99 <removed_email_address@domain.invalid> wrote:
> multipart/alternative and adds each rendered view with the content type
>
>     @body["name"] = "#{member.firstname} #{member.lastname}"
>     @body["login"] = member.login
>     @body["url"] = url || MemberSystem::CONFIG[:app_url].to_s
>     @body["app_name"] = MemberSystem::CONFIG[:app_name].to_s
>   end


Hi Frank.

Would this work if your templates weren't called "_en"?  I believe
ActionMailer requires the template to be named _exactly_ the same as the
mailer's method (forgot_password) with the remaining dot-separated parts
of
the name representing the mime type and template type (eg .rhtml).

So if you rename your templates to, for example,
forgot_password.text.plain.rhtml does your mailer start working again?

--
Chad F.
http://chadfowler.com
http://pragmaticprogrammer.com/titles/fr_rr/ (Rails Recipes - In Beta!)
http://pragmaticprogrammer.com/titles/mjwti/ (My Job Went to India, and
All
I Got Was This Lousy Book)
http://rubycentral.org
http://rubygarden.org
http://rubygems.rubyforge.org (over one million gems served!)
softwareengineer 99 (Guest)
on 2006-02-07 18:20
(Received via mailing list)
Hello Chad,
  Thank you for your reply. I will certainly follow your tip and post
the  results here. It sounds like it should work, but I will let you
know.

  Thanks
  Frank

Chad F. <removed_email_address@domain.invalid> wrote:
  Hi Frank.

  Would this work if your templates weren't called "_en"?  I  believe
ActionMailer requires the template to be named _exactly_ the  same as
the mailer's method (forgot_password) with the remaining  dot-separated
parts of the name representing the mime type and template  type (eg
.rhtml).

  So if you rename your templates to, for example,
forgot_password.text.plain.rhtml does your mailer start working again?

  --
Chad F.
http://chadfowler.com
http://pragmaticprogrammer.com/titles/fr_rr/ (Rails Recipes - In Beta!)
  http://pragmaticprogrammer.com/titles/mjwti/ (My Job Went to India,
and All I Got Was This Lousy Book)
http://rubycentral.org
http://rubygarden.org
http://rubygems.rubyforge.org (over one million gems served!)

  _______________________________________________
Rails mailing list
removed_email_address@domain.invalid
http://lists.rubyonrails.org/mailman/listinfo/rails
Ben M. (Guest)
on 2006-02-07 20:13
(Received via mailing list)
Chad F. wrote:
> Would this work if your templates weren't called "_en"?  I believe
> ActionMailer requires the template to be named _exactly_ the same as the
> mailer's method (forgot_password) with the remaining dot-separated parts
> of the name representing the mime type and template type (eg .rhtml).
>
> So if you rename your templates to, for example,
> forgot_password.text.plain.rhtml does your mailer start working again?
>

I used SHLG and it generated a "forgot_password" method in my
MemberNotify ActionMailer
subclass and a "forgot_password_en.html" view. That all appears to work.

Sorry I can't offer any insight on why things aren't working -- I'm
still very new to all
this -- but I thought I should point out that the "_en" isn't breaking
mine. I'm fairly
certain that's added by the Localization plugin.

b
Chad F. (Guest)
on 2006-02-07 20:25
(Received via mailing list)
On 2/7/06, Ben M. <removed_email_address@domain.invalid> wrote:
> I used SHLG and it generated a "forgot_password" method in my MemberNotify ActionMailer
> subclass and a "forgot_password_en.html" view. That all appears to work.
>
> Sorry I can't offer any insight on why things aren't working -- I'm still very new to 
all
> this -- but I thought I should point out that the "_en" isn't breaking mine. I'm fairly
> certain that's added by the Localization plugin.

Yea, my bet is (I don't know the localization plugin well) that the
localization plugin overrides the view-finding logic in a way that
doesn't affect the hardcoded checks that happen in the ActionMailer
code.  It might be worth a patch to ActionMailer to make it more
flexible if that's the case (or maybe not).

--
Chad F.
http://chadfowler.com
http://pragmaticprogrammer.com/titles/fr_rr/ (Rails Recipes - In Beta!)
http://pragmaticprogrammer.com/titles/mjwti/ (My Job Went to India,
and All I Got Was This Lousy Book)
http://rubycentral.org
http://rubygarden.org
http://rubygems.rubyforge.org (over one million gems served!)
softwareengineer 99 (Guest)
on 2006-02-07 21:07
(Received via mailing list)
Dear Chad,

  Thank you for your assistance.

  I tried renaming as per your suggestion and tried resending email but
the email delivery failed.

  Then I looked in the localization code and found the following code in
lib/localization.rb which is responsible for adding the _en to the
template name:

    # redefinition of ActionMail::Base#render_message, that adds locale
suffix to
    # the template name
    ActionMailer::Base.module_eval <<-EOL
    private
    def render_message(method_name, body)
      initialize_template_class(body).render_file(method_name +
"_#{CONFIG[:default_language]}")
    end
    EOL

  I commented the entire code out, restarted the server and tried again
and voila!, it worked.

  My forgot password message arrived with content-type set to:

  multipart/alternative;
boundary=mimepart_43e8db39b433c_1a4a..fdbaf1bcc3c9

  Seeing how many folks are using SLHG, I highly recommend the addition
of following tips as the addition of these will highly benefit your
readers:

  1. How to modify the above code to keep the localization but still be
able to use multi-part messages.
  2. How to specify a reply_to address for ActionMailer. (I still cannot
figure it out)
  3. How to specify content type of text/html without using multipart
for SLHG (by using @content_type="text/html")

  The SLHG works great, though it does takes some time. I have finally
integrated it and recommend that it be added to the recipes also. The
documentation that comes with SLHG is pretty self explanatory but can
be overwhelming.

  What editor did you use to compose the book? Docbook or something
else?

  Thank you once again for your assistance and great tips.

  Frank
  Ruby Gemologist
  P.S. I recommend that all Ruby developers be officially called Ruby
gemologists to stand out from the rest.



Chad F. <removed_email_address@domain.invalid> wrote:  On 2/7/06, Ben M.  wrote:
> I used SHLG and it generated a "forgot_password" method in my MemberNotify ActionMailer
> subclass and a "forgot_password_en.html" view. That all appears to work.
>
> Sorry I can't offer any insight on why things aren't working -- I'm still very new to 
all
> this -- but I thought I should point out that the "_en" isn't breaking mine. I'm fairly
> certain that's added by the Localization plugin.

Yea, my bet is (I don't know the localization plugin well) that the
localization plugin overrides the view-finding logic in a way that
doesn't affect the hardcoded checks that happen in the ActionMailer
code.  It might be worth a patch to ActionMailer to make it more
flexible if that's the case (or maybe not).

--
Chad F.
http://chadfowler.com
http://pragmaticprogrammer.com/titles/fr_rr/ (Rails Recipes - In Beta!)
http://pragmaticprogrammer.com/titles/mjwti/ (My Job Went to India,
and All I Got Was This Lousy Book)
http://rubycentral.org
http://rubygarden.org
http://rubygems.rubyforge.org (over one million gems served!)
Chad F. (Guest)
on 2006-02-07 21:16
(Received via mailing list)
On 2/7/06, softwareengineer 99 <removed_email_address@domain.invalid> wrote:
>
>    EOL
>
>  I commented the entire code out, restarted the server and tried again and
> voila!, it worked.
>

I'm not surprised.  Thanks for posting your findings.

> figure it out)
>  3. How to specify content type of text/html without using multipart for
> SLHG (by using @content_type="text/html")
>

Thanks for your suggestions.

>  The SLHG works great, though it does takes some time. I have finally
> integrated it and recommend that it be added to the recipes also. The
> documentation that comes with SLHG is pretty self explanatory but can be
> overwhelming.
>
>  What editor did you use to compose the book? Docbook or something else?
>

I'm using the Pragmatic Programmers' proprietary (and absolutely
amazing!) publishing system.  All of the writing is done in XML.

>  Thank you once again for your assistance and great tips.
>

Thanks!

--
Chad F.
http://chadfowler.com
http://pragmaticprogrammer.com/titles/fr_rr/ (Rails Recipes - In Beta!)
http://pragmaticprogrammer.com/titles/mjwti/ (My Job Went to India,
and All I Got Was This Lousy Book)
http://rubycentral.org
http://rubygarden.org
http://rubygems.rubyforge.org (over one million gems served!)
This topic is locked and can not be replied to.