Как установить пользовательскую кодировку передачи контента с помощью MimeKit / MailKit? - PullRequest
1 голос
/ 08 марта 2019

Этот вопрос о том, что, по моему мнению, «нарушает стандарт», и я понимаю, что возможно, что MimeKit настроен так, чтобы не позволять мне делать то, что я спрашиваю. Эти пользовательские сообщения будут использоваться только для внутренних целей, а не для обычной отправки электронной почты.

Ниже приведено вложение, которое я могу создать с помощью основных функций:

Content-Type: application/octet-stream; name=example.txt
Content-Disposition: attachment; filename=example.txt
Content-Transfer-Encoding: base64

**BASE64 ENCODED ATTACHMENT**

Я хотел бы знать, возможно ли создать следующее:

Content-Type: application/octet-stream; name=example.txt; type=****
Content-Disposition: attachment; filename=example.txt
Content-Transfer-Encoding: *****

**CUSTOM ENCODED ATTACHMENT**

Там, где у меня есть настраиваемая строка для установки «Content-Transfer-Encoding», возможно, настраиваемый «тип» в «Content-Type», а также я использую свой собственный код для кодирования сообщения.

Я предполагаю, что самый простой способ пользовательского кодирования моего сообщения - это сделать это вне MimeKit, а затем установить MimeKit, чтобы он не кодировался. В любом случае, я могу создать пользовательские заголовки, которые содержат только нужные мне строки?

Дополнительный вопрос:

Как мне измениться:

Content-Type: application/octet-stream; name=example.txt
Content-Disposition: attachment; filename=example.txt

до:

Content-Type: application/octet-stream; name="example.txt"
Content-Disposition: attachment; filename="example.txt"

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Как вы обнаружили в своем собственном ответе, вы можете переопределить заголовок Content-Transfer-Encoding, используя Headers.Replace () или даже Headers.Add (), если вы не установили свойство ContentTransferEncoding.

Полагаю, другой ваш главный вопрос: как вы получаете кодированный контент?

Вместо того, чтобы делать:

Content = new MimeContent(File.OpenRead(file), ContentEncoding.Default),

Все, что вам нужно сделать, это передать предварительно закодированный поток в MimeContent .ctor (и продолжать использовать ContentEncoding.Default в качестве второго параметра).

Если вам нужно установить параметр type в заголовке Content-Type, вы можете сделать это:

attachment.ContentType.Parameters.Add("type", "value");

или

var parameter = new Parameter ("name", "value");
attachment.ContentType.Parameters.Add (parameter);

или

attachment.ContentType.Parameters["type"] = "value";

Единственный оставшийся вопрос - как принудительно ввести значения параметров в кавычки. Для этого вам не повезло. MimeKit будет заключать в кавычки значение, только если оно должно быть заключено в кавычки из-за символов в значении.

0 голосов
/ 08 марта 2019

Я обнаружил, что один из моих ответов заменяет заголовки:

var attachment = new MimePart("application", "octet-stream")
{
    Content = new MimeContent(File.OpenRead(file), ContentEncoding.Default),
    ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
    ContentTransferEncoding = ContentEncoding.Base64,
    FileName = Path.GetFileName(file),
};

attachment.Headers.Replace("Content-Transfer-Encoding", "******");
...