私は MimeKit を使用して電子メール本文の文字列を作成し、それを受信者のリストとすべての受信者のプレースホルダーと共に pmta に渡し、pmta がそれらをマージします。件名にキリル文字も含まれている場合、件名にプレースホルダーがありません。
プレースホルダーは、角括弧で囲まれた文字列として表されます。つまり、[firstname]
2 つのトークンと間に数文字のサブジェクトのサンプル:
subject = "Message for [firstname] Агф [firstname]";
次の文字列を生成します (2 番目のプレースホルダーに注意してください。エンコードのために欠落しています)。
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) は正常に保持され、暗号化後にトークンが存在し、すべてが期待どおりに機能します。これに関する私の問題は件名の部分にあります。
特定のトークン/プレースホルダーがエンコードによって回避されるこの状況をどのように克服できるかについてのアドバイスはありますか?
どんな助けでも大歓迎です。