in reply to Re^3: Wide characters in e-mail
in thread Wide characters in e-mail

The problem with this solution is that it breaks emails that are not UTF. If I send a message with some non ASCII Latin1 (well, windows1252) characters, with this binmode() I receive them converted to UTF-8.

So I guess, I should binmode($s, ":utf8"); only for the UTF-8 body of the message or the UTF-8 message part. And turn it back to binary($s); afterwards. Though I'm afraid of what it would do if someone did the encode('utf8', ...) on the text before turning it to Mail::Sender :-(

So I'm afraid of making that change.

Replies are listed 'Best First'.
Re^5: Wide characters in e-mail
by ikegami (Patriarch) on May 04, 2008 at 00:24 UTC

    If I send a message with some non ASCII Latin1 (well, windows1252) characters,

    You can't do that given $mail{'Content-type'} = 'text/plain; charset="utf-8"';. It would be like Verizon quoting a price of 0.002 *cents* per kilobyte but charging you 0.002 *dollars* per kilobyte. (story) You can't tell the client you're using one encoding and but actually use another.

    If you use $mail{'Content-type'} = 'text/plain; charset="UTF-8"';, then you'd use binmode($s, ":encoding(UTF-8)"); or encode("UTF-8", $text).

    If you use $mail{'Content-type'} = 'text/plain; charset="cp1252"';, then you'd use binmode($s, ":encoding(cp1252)"); or encode("cp1252", $text).

    Though I'm afraid of what it would do if someone did the encode('utf8', ...) on the text before turning it to Mail::Sender :-(

    It would produce junk. You can't use both encode($encoding, ) and binmode(, ":encoding($encoding)").