Andrey Eremin
Andrey Eremin

Reputation: 285

Convert header of email to another encoding in ActionMailer in Ruby

I have a website written on ruby 1.8.5 and rails 1.2.6.

There is a feedback page.

So.

i've got a model class:

class Feedback::Notify < ActionMailer::Base
  def answer_for_managers(question)
    recipients [email protected]
    from       "[email protected]"
    subject    "Обратная связь: ответ на вопрос"
    body       "question" => question
    content_type "text/html"    
  end
end

Then i have a controller:

class Feedback::QuestionController < Office::BaseController
  def update
      Feedback::Notify.deliver_answer_for_managers(@question)
  end
end

The problem is when a message is sent its subject looks like: =?utf-8?Q?=d0=9e=d0=b1=d1=80=d0=b0=d1=82=d0=bd=d0=b0=d1=8f_=d1=81=d0=b2=d1=8f=d0=b7=d1=8c=3a_=d0=a1=d0=be=d1=82=d1=80=d1=83=d0=b4=d0=bd=d0=b8=d0=ba_=d0=be=d1=82=d0=b2=d0=b5=d1=82=d0=b8=d0=bb_=d0=bd=d0=b0_=d0=b2=d0=be=d0=bf=d1=80=d0=be=d1=81_=d0=ba=d0=bb=d0=b8=d0=b5=d0=bd=d1=82=d0=b0_=23=35=36_=d0=be=d1=82_=32=36=2e=30=38=2e=32=30=31=31_=31=31=3a=33=33?=

so it's url-encoded.

Is there any way to prevent converting subject text to url-encoding? All files are in UTF8 encoding

Upvotes: 0

Views: 529

Answers (2)

Ariel Lopez
Ariel Lopez

Reputation: 1

i solve my problem by adding default 'Content-Transfer-Encoding' => '7bit' in my ActionMailer

have a look in the API docs

Upvotes: 0

Holger Just
Holger Just

Reputation: 55888

If you would put unescaped UTF-8 characters into header fields, you would be violating the respective standards RFC 822 and RFC 5322 which state that header fields can only be composed of (7-bit) ASCII characters.

Thus, ActionMailer does the right thing here and escapes the UTF-8 characters. As nothing in the headers states that another encoding is to be used, the recipient (and all intermediate servers) have no other chance than to follow that standard as they have no other clue which encoding might have been used.

As RFC 822 is rather old (but still authoritative for email), UTF-8 just didn't exist as it was specified. The escaping is a workaround specified by RFC 2047 which exactly specifies what you see in the header. MUAs are expected to unescape the text and display the proper glyphs on rendering.

Note that it is entirely possible to send unicode text inside the message body (most of the time inside a MIME container). There it is possible to specify the actual data encoding and the transport encoding using additional headers. See RFC 2045 ff. for more details.

Please read either the RFCs or have a look at the Wikipedia entry on Unicode and e-mail.

Upvotes: 2

Related Questions