【问题标题】:How to set custom content transfer encoding using MimeKit/MailKit?如何使用 MimeKit/MailKit 设置自定义内容传输编码?
【发布时间】:2019-03-07 23:22:34
【问题描述】:

这个问题是关于我认为“打破标准”的问题,我知道 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


    【解决方案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 只会在由于值中的字符而需要引用该值时才引用该值。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-12-18
        • 2015-07-23
        • 2019-09-03
        • 1970-01-01
        • 1970-01-01
        • 2012-07-28
        • 1970-01-01
        • 1970-01-01
        • 2012-01-20
        相关资源
        最近更新 更多