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

C# 如何使用MimeKit/MailKit设置自定义内容传输编码?,c#,.net,smtp,mailkit,mimekit,C#,.net,Smtp,Mailkit,Mimekit,这个问题是关于我认为什么是“违反标准”的问题,我理解MimeKit可能被设置为特别不允许我做我所要求的事情。这些自定义邮件将仅在内部使用,不用于常规电子邮件发送 以下是我能够使用基本功能创建的附件: Content-Type: application/octet-stream; name=example.txt Content-Disposition: attachment; filename=example.txt Content-Transfer-Encoding: base64 **BA

这个问题是关于我认为什么是“违反标准”的问题,我理解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**
其中,我有一个自定义字符串来设置“内容传输编码”,可能是“内容类型”下的自定义“类型”,还使用我自己的自定义代码来编码消息

我假设自定义消息编码的最简单方法是在MimeKit之外进行,然后将MimeKit设置为not encode。我是否可以创建只包含所需字符串的自定义标题

额外问题:

我将如何着手改变:

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


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

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", "******");

正如您在自己的回答中所发现的,如果未设置
ContentTransferEncoding
属性,您可以使用Headers.Replace()甚至Headers.Add()覆盖内容传输编码头

我猜你的另一个主要问题是如何获得定制编码的内容

而不是做:

Content = new MimeContent(File.OpenRead(file), ContentEncoding.Default),
您只需将预编码的流传递到
MimeContent
.ctor(并继续使用
ContentEncoding.Default
作为第二个参数)

如果需要在内容类型标题中设置
type
参数,可以执行以下操作:

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

剩下的唯一问题是如何强制引用参数值。因此,你就不走运了。MimeKit仅在由于值中的字符而需要引用该值时才会引用该值

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