这个问题是关于我认为“打破标准”的问题,我明白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"
正如您在自己的答案中发现的那样,如果未设置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将仅引用该值。
我发现我的一个答案是替换标题:
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", "******");