Почему кракозябры в Теме письма в «Opera Mail»?

Мылю письмо:

var msg = []byte("To: " + myMail + "\r\n" +
  "Subject: " + "Тема письма" + "\r\n" +
  "Это содержимое письма.")
var err = smtp.SendMail(HostPortSMTP, auth, MailFrom, []string{myMail}, msg)

Как я понимаю, оно уходит в кодировке UTF-8... И на веб-странице - на почтовом сервере - все нормально выглядит, но в почтовом клиенте "Opera Mail" в Теме [вместо кириллицы] кракозябры. Как решить? Как это вообще делается? Может как-то запрашивается требуемая для клиента кодировка? Ведь приходящие письма в этом клиенте отображаются нормально.


Ответы (1 шт):

Автор решения: Pak Uula

Сейчас RFC 6532 предписывает почтовым агентам поддерживать UTF-8. Но в времена оны, когда Юникод ещё бегал в коротких штанишках (1992-й год), в RFC 1342 была предложена схема кодирования encoded words, которую, по идее, до сих пор все поддерживают.

Идея была в том, чтобы не-ASCII символы кодировать отдельно от ASCII символов. Я не буду погружаться в детали, расскажу чисто конкретно на примере utf-8.

Строка Тема письма кодируется так: =?utf-8?B?0KLQtdC80LAg0L/QuNGB0YzQvNCwCg==?=

Закодированная строка начинается с префикса =?, затем идёт название кодировки, следом после разделителя ? буква B означает, что байтовая строка закодирована base64. Между ? и ?= располагаются байты строки Тема письма, сначала закодированные в utf-8, а потом в base64.

Протестируйте ваш почтовый агент, подсунув ему в тему письма строку

Subject: =?utf-8?B?0KLQtdC80LAg0L/QuNGB0YzQvNCwCg==?=
→ Ссылка