如何使用MimeKit / MailKit设置自定义内容传输编码?

问题描述 投票:1回答:2

这个问题是关于我认为“打破标准”的问题,我明白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"
c# .net smtp mailkit mimekit
2个回答
1
投票

正如您在自己的答案中发现的那样,如果未设置ContentTransferEncoding属性,则可以使用Headers.Replace()甚至Headers.Add()覆盖Content-Transfer-Encoding标头。

我想你的另一个主要问题是如何获得自定义编码内容?

而不是做:

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

您需要做的就是将预编码流传递到MimeContent .ctor(并继续使用ContentEncoding.Default作为第二个参数)。

如果需要在Content-Type标头中设置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
投票

我发现我的一个答案是替换标题:

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", "******");
© www.soinside.com 2019 - 2024. All rights reserved.