Sending Mails with mutations ä,ü,ö

T. N.t. wrote:

Adam Meyer wrote:

Hi everyone

I am sending mails with rails in German. The Problem is that the German
letters ä,ü,ö are arriving correctly at the receiver.

When the subject contains the word

Für

the receiver gets

Für

Does anybody knows this issue?

This is strange. ActionMailer (or is it TMail?) should encode this
correctly like =?utf-8?Q?=C3=84=C3=96=C3=9C?= (this is ÄÖÜ). For me it
does it very well. What version do you use and what is your code?

Regards, T.

I am riding on 2.2.2 with Actionmailer and my code is

  def invoice(kwiker, url, name)
    setup_email(kwiker)
    @subject += 'Rechnung für Bestellung bei kwikit.de Grusskarten'
    @body[:url] = "http://#{APP_CONFIG['site_host']}/"

    part :content_type => "text/plain", :body =>
render_message("invoice.html.erb", body)

    attachment :content_type => "application/pdf",
               :body => File.read(url),
               :filename => name
  end

and this is in my production.rb

   ActionMailer::Base.delivery_method = :smtp

   ActionMailer::Base.perform_deliveries = true
   ActionMailer::Base.raise_delivery_errors = true
   ActionMailer::Base.default_charset = "utf-8"

Adam Meyer wrote:

...
I am riding on 2.2.2 with Actionmailer and my code is

I have 2.3.4; maybe it's a new feature that the headers are quoted
automatically.

For now you could do it by hand. Somewhere in the TMail module must be
the function to make RFC 2231 headers. I can't find it now. So a
temporary solution was:

     @subject = "=?utf-8?Q?#{[@subject].pack("M").chomp}?="

A more advanced function would break longer strings into multiple lines.

Hope this helps, T.

T. N.t. wrote:

Adam Meyer wrote:

...
I am riding on 2.2.2 with Actionmailer and my code is

I have 2.3.4; maybe it's a new feature that the headers are quoted
automatically.

For now you could do it by hand. Somewhere in the TMail module must be
the function to make RFC 2231 headers. I can't find it now. So a
temporary solution was:

     @subject = "=?utf-8?Q?#{[@subject].pack("M").chomp}?="

A more advanced function would break longer strings into multiple lines.

Hope this helps, T.

hmm... but its not only in the subject. its in body too.

I am scared to update my rails, I dont want my app to break down
completely.

You should not be scared to try an update, specify version 2.2.2 in
environment.rb (or freeze 2.2.2 into the app), install the later
version of rails and modify your app on a branch in your version
control system (I prefer git) so you can experiment without affecting
your working code. Then when all is working on the branch simply
merge it into the trunk.

Colin
Colin

Adam Meyer wrote:

hmm... but its not only in the subject. its in body too.

I don't know what @body[:url] is, but for

   part :content_type => "text/plain",
    :body => render_message("invoice.html.erb", body)

you probably should say :content_type => 'text/plain; charset=utf-8'

T.

T. N.t. wrote:

Adam Meyer wrote:

hmm... but its not only in the subject. its in body too.

I don't know what @body[:url] is, but for

   part :content_type => "text/plain",
    :body => render_message("invoice.html.erb", body)

you probably should say :content_type => 'text/plain; charset=utf-8'

T.

@body[:url] is just a value I want to use in the email template.
Your solution might work in the body, but what is with the subject?

Adam Meyer wrote:
[...]

I am scared to update my rails, I dont want my app to break down
completely.

That's why you have comprehensive automated tests! Just make sure that
all tests pass after you upgrade.

(You *do* have tests, right? If not, write some right away.)

Best,

Adam Meyer wrote:

I don't know what is happening in you code, but it works.
Thanks!

Honestly, I also don't understand this pack command, but what happens
is, that it encodes the string as quoted-printable. In

  =?utf-8?Q?string?=

utf-8 is obviously the charset/encoding, Q is the way the bytes are
represented with 7-bit characters, which is quoted-printable (Q) or
base64 (B) and then comes obviously the string. So instead of that
cryptic ['string'].pack("M").chomp you could also do

  "=?utf-8?B?#{Base64.b64encode(@subject).chomp}?="

But quoted-printable is more adequate for european texts.

T.