Dear Rails Core,

I believe I have identified a bug related to passing a format block to a mail() 
method call (I identified this on Rails 3.2.14, have not tried other versions 
of Rails).  Contrary to what is documented here 
http://guides.rubyonrails.org/action_mailer_basics.html, I was not able to 
successfully pass a format block to my mail method call like so:

 mail(:to => @user.email, :subject => email_subject) do |format|
        format.html { render layout: nil}
        format.text { render }
      end

When passing a format block to mailer, this makes Gmail  (web-based) and my OS 
X Mail client display the Plain-text alternative when it should be displaying 
the HTML version. In Gmail web interface it opens to the Plain text 
alternative, and if you "switch to Plain text" you actually see the HTML 
version which is pretty odd.  (Gmail does not give you an option to view the 
alternative)

Oddly, the very same mail mail message does display correctly when sent to an 
@mailinator.com address (which only displays the HTML). 


When you don't pass a format block to the mailer call, like so:

        mail(:to => @user.email, :subject => email_subject) 

... the mail is displayed correctly in Gmail.

I examined line-by-line the raw source of the two mail messages, and I noticed 
this:

1) In the working version (with a format block in my code), the plain text 
appears first above the HTML alternative. (I don't think this should matter at 
all, I'm just noting it in case it is significant). 

2) Within the text/html section of the message, there are some headers. (You 
see this below the "mime part boundary"  that looks something like 
----==_mimepart_52ec14fb61916_a3ff60f2ed3f4146dd

For the non-working version (with a format block), I see this header:
Content-Transfer-Encoding: 7bit

For the working version (without a format block), I see this header instead:
Content-Transfer-Encoding: quoted-printable

I'm not sure if either one is acceptable in the RFC standard, nor I have looked 
into the Rails code itself. However, obviously we cannot send emails that don't 
work in Gmail, so for us we need to use a workaround. (In my case I was able to 
easily remove the format block because all I was doing was setting the layout, 
which I could set globally on the mailer object instead.)

Obviously the work-around is OK for me, but I thought I'd send this note as 
documentation for the archive. 


Regards,

Jason FB



-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to