Сюжетная кодировка MimeKit и кириллица

Я использую MimeKit для создания строки тела электронной почты, затем передаю ее pmta вместе со списком получателей + заполнители для каждого получателя, затем pmta заботится об их объединении. Отсутствуют заполнители в теме, если тема также содержит кириллические символы.

Заполнители выражаются строками в квадратных скобках, т. Е. [firstname]

Пример темы с двумя жетонами и несколькими символами между ними:

subject = "Message for [firstname] Агф [firstname]";

генерирует следующую строку (обратите внимание на второй заполнитель, отсутствующий из-за кодировки):

From: ...
Date: ...
Subject: Message for [firstname]
 =?utf-8?b?0JDQs9Cw0YTQvtC90L7QsiDQhtC70LvRjyBbZmlyc3RuYW1lXSDQhtC70LvRjw==?=

Вот как я создаю сообщение:

Encoding useEncoding = Encoding.UTF8;

subject = subject.Replace("\u00A0", " "); // replace nbsp with normal space in case one copied by mistake

var message = new MimeMessage() { Subject = subject };

var bodyText = StripHtmlBody(body);

var textPart = new TextPart(MimeKit.Text.TextFormat.Plain)
{
    ContentTransferEncoding = ContentEncoding.QuotedPrintable
};
textPart.SetText(useEncoding, bodyText);


var htmlPart = new TextPart(MimeKit.Text.TextFormat.Html)
{
    ContentTransferEncoding = ContentEncoding.QuotedPrintable
};
htmlPart.SetText(useEncoding, body);


var multipartAlternative = new MultipartAlternative()
{
    textPart,
    htmlPart
};

message.Body = multipartAlternative;

foreach (var item in headers)
    message.Headers.Add(item.HeaderId, item.HeaderValue);

var tokenMailbox = MailboxAddress.Parse("non-existing-email@domain.com");
message.To.Add(tokenMailbox);
message.Prepare(EncodingConstraint.EightBit, 998);

var messageString = "";
using (var ms = new MemoryStream())
{
    message.WriteTo(ms);
    messageString = useEncoding.GetString(ms.ToArray());
}

messageString = messageString.Replace(tokenMailbox.ToString(), "[ReceiverMailbox]");

// inject in pmta and return...

Тело сообщения (текст и html) сохраняется нормально, токены остаются после шифрования, и все работает, как ожидалось, моя проблема с этим связана с темой.

Есть ли какой-нибудь совет о том, как я могу преодолеть эту ситуацию, когда определенные токены / заполнители будут избавлены от кодирования?

Любая помощь приветствуется.

1 ответ

Вам нужно расшифровать предмет перед выполнением любых операций по замене строк.

Другие вопросы по тегам