Почему кракозябры в Теме письма в «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 шт):
Сейчас 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==?=