Today I made a first attempt to make use of ruby mailer. A volunteer fills out a form and the information is then sent to an administrator. I generated a mailer called notifier and added the following: class Notifier < ActionMailer::Base def volunteer_signup(volunteer, sent_at = Time.now) @subject = ''A new volunteer has signed up'' @body = { :title => volunteer.title, :first_name => volunteer.first_name, :last_name => volunteer.last_name, :id => volunteer.id } @recipients = ''dsarosi-f/tn6ICKpJyYd0SBGKCxrdi2O/JbrIOy@public.gmane.org'' @from = ''CrossroadsPublicWebiste-f/tn6ICKpJyYd0SBGKCxrdi2O/JbrIOy@public.gmane.org'' @sent_on = sent_at @headers = {} @content_type = ''text/html'' end end Then I generated a view called volunteer_signup.html.erb Dear xxx, <%= @title %><%= @first_name %> <%= @last_name %> has signed up as a new volunteer. To see his/her information copy the text below into your browser''s address bar. http://localhost:3000/volunteers/<%= @id %> I added the following line to my volunteer_controller create method: Notifier.deliver_volunteer_signup(@volunteer) I ran the code and got the following error: mailer sub type missing: "html" I ran the debugger and noticed the following; At /usr/lib/ruby/gems/1.8/gems/actionmailer-2.0.1/lib/action_mailer/ part.rb:59:in ''to_mail'' 59: real_content_type, ctype_attrs = parse_content_type(defaults) This method takes the content_type of the message "text/html" and splits the string so that variable real_content_type is "html". But then on line 82 it calls; 82: part.set_content_type(real_content_type, nil, ctype_attrs) def set_content_type( str, sub = nil, param = nil ) if sub main, sub = str, sub else main, sub = str.split(%r</>, 2) raise ArgumentError, "sub type missing: #{str.inspect}" unless sub end if h = @header[''content-type''] h.main_type = main h.sub_type = sub h.params.clear else store ''Content-Type'', "#{main}/#{sub}" end @header[''content-type''].params.replace param if param str end As you can str contains "html" as real_content_type was passed in, sub is nil. It then tries to split this string again, which has been split before. So str will be split into "html" and nil. Since sub is nil, it will raise the error. If I leave @content_type blank, the same error is raised. Could this be a bug in mailer? If you change str or real_content_type to "text/html" in the debugger, the code will run without errors. I''m new to Ruby on rails, so if this is a bug, please let me know where I should submit it. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Are you using the globalize plugin? Apparently if you comment out ''require "globalize/rails/action_mailer"'' in vendor/plugins/globalize/ init.rb the error goes away.. or maybe try updating the plugin if they fixed the bug yet.. On Dec 20, 8:41 am, Franz <franz.obenhau...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Today I made a first attempt to make use of ruby mailer. A volunteer > fills out a form and the information is then sent to an administrator. > > I generated a mailer called notifier and added the following: > > class Notifier < ActionMailer::Base > def volunteer_signup(volunteer, sent_at = Time.now) > @subject = ''A new volunteer has signed up'' > @body = { :title => volunteer.title, :first_name => > volunteer.first_name, :last_name => volunteer.last_name, > :id => volunteer.id } > @recipients = ''dsar...-f/tn6ICKpJyYd0SBGKCxrdi2O/JbrIOy@public.gmane.org'' > @from = ''CrossroadsPublicWebi...-f/tn6ICKpJyYd0SBGKCxrdi2O/JbrIOy@public.gmane.org'' > @sent_on = sent_at > @headers = {} > @content_type = ''text/html'' > end > end > > Then I generated a view called volunteer_signup.html.erb > > Dear xxx, > > <%= @title %><%= @first_name %> <%= @last_name %> has signed up as a > new volunteer. > > To see his/her information copy the text below into your browser''s > address bar.http://localhost:3000/volunteers/<%= @id %> > > I added the following line to my volunteer_controller create method: > > Notifier.deliver_volunteer_signup(@volunteer) > > I ran the code and got the following error: > > mailer sub type missing: "html" > > I ran the debugger and noticed the following; > > At /usr/lib/ruby/gems/1.8/gems/actionmailer-2.0.1/lib/action_mailer/ > part.rb:59:in ''to_mail'' > > 59: real_content_type, ctype_attrs = parse_content_type(defaults) > > This method takes the content_type of the message "text/html" and > splits the string so that variable real_content_type is "html". But > then on line 82 it calls; > > 82: part.set_content_type(real_content_type, nil, ctype_attrs) > > def set_content_type( str, sub = nil, param = nil ) > if sub > main, sub = str, sub > else > main, sub = str.split(%r</>, 2) > raise ArgumentError, "sub type missing: #{str.inspect}" unless > sub > end > if h = @header[''content-type''] > h.main_type = main > h.sub_type = sub > h.params.clear > else > store ''Content-Type'', "#{main}/#{sub}" > end > @header[''content-type''].params.replace param if param > str > end > > As you can str contains "html" as real_content_type was passed in, sub > is nil. It then tries to split this string again, which has been > split before. So str will be split into "html" and nil. Since sub is > nil, it will raise the error. If I leave @content_type blank, the > same error is raised. > > Could this be a bug in mailer? If you change str or real_content_type > to "text/html" in the debugger, the code will run without errors. I''m > new to Ruby on rails, so if this is a bug, please let me know where I > should submit it.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
I tried updating the plugin but bug isn''t fixed. Your suggestion works though. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Hi Franz, instead of commenting out the globalize/rails/action_mailer and disabling the ability to send Mails in different languages hereby, you should extend your email templates with the locale parameter. For example english templates should look like this: signup_notification.en.text.plain.erb signup_notification.en.text.html.erb Globalize overrides the Action Mailers create-Method giving it the ability to check for multilanguage extentions, as well as the new Action Mailer(2.0.2) is checking for multipart email extentions. So there is no bug anywhere. Everything will work fine. For more information read the Rails API, section Multipart email of ActionMailer::Base Class http://api.rubyonrails.org/classes/ActionMailer/Base.html Best wishes, Roman On 19 Jan., 04:45, Franz <franz.obenhau...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I tried updating the plugin but bug isn''t fixed. Your suggestion > works though.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Franz, Roman''s answer hits the nail on the head. I had the same problem and this is exactly what I also concluded. Follow naming convention for localized mailer templates: <mailer_method>.[<locale>.]<mime_type>.<subtype>.erb Ex.: activation.en-US.text.html.erb Docs (vendor/plugins/globalize/lib/globalize/rails/action_mailer.rb) ------- Globalize overrides the create! method to support multiple templates for different locales. For example, for English it will select the template: signup_notification.en-US.text.html.rhtml It will look for the currently active locale code (en-US) first, then the language code (en). If neither of those are found, it will use the regular name: signup_notification.text.html.rhtml It is fully backwards compatible with the original Rails version. Cheers, Sazima On Jan 27, 7:54 am, wowo08 <rsladec...-Mmb7MZpHnFY@public.gmane.org> wrote:> Hi Franz, > instead of commenting out the globalize/rails/action_mailer and > disabling the ability to send Mails in different languages hereby, you > should extend your email templates with the locale parameter. For > example english templates should look like this: > > signup_notification.en.text.plain.erb > signup_notification.en.text.html.erb > > Globalize overrides the Action Mailers create-Method giving it the > ability to check for multilanguage extentions, as well as the new > Action Mailer(2.0.2) is checking for multipart email extentions. > So there is no bug anywhere. Everything will work fine. > > For more information read the Rails API, section Multipart email of > ActionMailer::Base Class > > http://api.rubyonrails.org/classes/ActionMailer/Base.html > > Best wishes, > Roman > > On 19 Jan., 04:45, Franz <franz.obenhau...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > I tried updating the plugin but bug isn''t fixed. Your suggestion > > works though.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---