如何使用 MimeKit/MailKit 设置自定义内容传输编码?
How to set custom content transfer encoding using MimeKit/MailKit?
这个问题是关于我的看法 "breaking the standard" 我知道 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" 下的自定义 "type",并且还使用我自己的自定义代码对消息进行编码。
我假设自定义编码我的消息的最简单方法是在 MimeKit 之外执行此操作,然后将 MimeKit 设置为不编码。无论如何,我可以创建只包含我想要的字符串的自定义 headers 吗?
附加问题:
我将如何改变:
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"
我发现我的答案之一是替换 headers:
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", "******");
正如您在自己的答案中发现的那样,您可以使用 Headers.Replace() 甚至 Headers.Add() 来覆盖 Content-Transfer-Encoding header 't 设置 ContentTransferEncoding
属性.
我猜你的另一个主要问题是如何获得自定义编码内容?
而不是做:
Content = new MimeContent(File.OpenRead(file), ContentEncoding.Default),
您需要做的就是将 pre-encoded 流传入 MimeContent
.ctor(并继续使用 ContentEncoding.Default
作为第二个参数)。
如果需要在Content-Typeheader中设置一个type
参数,可以这样做:
attachment.ContentType.Parameters.Add("type", "value");
或
var parameter = new Parameter ("name", "value");
attachment.ContentType.Parameters.Add (parameter);
或
attachment.ContentType.Parameters["type"] = "value";
剩下的唯一问题是如何强制引用参数值。为此,你运气不好。 MimeKit 只会在值中的字符需要引用时引用值。
这个问题是关于我的看法 "breaking the standard" 我知道 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" 下的自定义 "type",并且还使用我自己的自定义代码对消息进行编码。
我假设自定义编码我的消息的最简单方法是在 MimeKit 之外执行此操作,然后将 MimeKit 设置为不编码。无论如何,我可以创建只包含我想要的字符串的自定义 headers 吗?
附加问题:
我将如何改变:
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"
我发现我的答案之一是替换 headers:
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", "******");
正如您在自己的答案中发现的那样,您可以使用 Headers.Replace() 甚至 Headers.Add() 来覆盖 Content-Transfer-Encoding header 't 设置 ContentTransferEncoding
属性.
我猜你的另一个主要问题是如何获得自定义编码内容?
而不是做:
Content = new MimeContent(File.OpenRead(file), ContentEncoding.Default),
您需要做的就是将 pre-encoded 流传入 MimeContent
.ctor(并继续使用 ContentEncoding.Default
作为第二个参数)。
如果需要在Content-Typeheader中设置一个type
参数,可以这样做:
attachment.ContentType.Parameters.Add("type", "value");
或
var parameter = new Parameter ("name", "value");
attachment.ContentType.Parameters.Add (parameter);
或
attachment.ContentType.Parameters["type"] = "value";
剩下的唯一问题是如何强制引用参数值。为此,你运气不好。 MimeKit 只会在值中的字符需要引用时引用值。