如何对 MIME 消息中 Content-Disposition 标头的文件名参数值进行编码?

2024-02-23

通过查看一些邮件的来源,我发现很多邮件都使用了“Encoded Words”(RFC 2047 https://www.ietf.org/rfc/rfc2047.txt) 格式对文件名参数值进行编码。然而,根据 RFC 2047,这种编码方法不应用于标头参数值。相反,参数值(例如 Content-Disposition 标头中的文件名参数)应使用建议的编码方法RFC 2231 https://www.ietf.org/rfc/rfc2231.txt.

因此,我的问题是为什么这么多电子邮件不符合 RFC 标准。使用 RFC 2047 格式对标头参数值进行编码是否正确?所有电子邮件代理都能正确解析这些电子邮件吗?


可悲的事实是,许多流行的电子邮件客户端都违反了相关的 RFC。

事实上,正如您所猜测的,MIME 正文部分中的文件名应该使用 RFC2231,但许多实际实现使用 RFC2047 或许多其他非正式的、临时的或最坏的不确定的文件名编码。

至于“为什么”,我真的认为这是无法回答的。从根本上说,我认为我们不能比猜测这在某种程度上是一个错误更好。

常见且容易识别的错误编码似乎在流行客户端之间相当透明地工作;但根据定义,不遵守规范就无法保证接收者可以正确地猜猜意图是什么。

作为参考,这里是一个模型消息,应该希望通过验证(-:

From: me <[email protected] /cdn-cgi/l/email-protection>
To: =?utf-8?B?G=C3=B6del?= <[email protected] /cdn-cgi/l/email-protection>
Subject: File name and recipient are identical,
  but encoded differently
Mime-Version: 1.0
Content-type: application/octet-stream;
  name*=UTF-8''G%C3%B6del
Content-disposition: attachment;
  filename*=UTF-8''G%C3%B6del
Content-transfer-encoding: base64

R8O2ZGVsCg==

根据记录,Content-Type:标头的name参数被取代filename的参数Content-Disposition:标头,但许多实现仍然保守地指定两者,以防某些地方的某些客户端仍然不明白Content-Disposition:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对 MIME 消息中 Content-Disposition 标头的文件名参数值进行编码? 的相关文章

随机推荐

  • Android 上的 TextView 下画线

    我有一个动态添加文本视图的布局 我想用一条线分隔每个文本视图 像这样的东西 TextView TextView TextView 我找到了给文本加下划线的方法 但我想画一条固定大小的线 而不是给文本加下划线 这是最简单且最类似于使用 hr
  • npm install 以获取标签版本的依赖关系

    TL DR 我的项目依赖于 dep snapshot 其中 快照 是一个标签 跑步npm install不获取新版本的 dep 完整故事 所以最近我开始了一个 JS 项目 并且 长话短说 我通过本地安装的 Nexus 设置了自己的私人存储库
  • 无法在 Ubuntu Linux 中使用 pip 安装 Python 包:InsecurePlatformWarning、SSLError、tlsv1 警报协议版本

    以前我曾经通过 pip 安装软件包 但现在我尝试使用 pip 安装 Python 库 出现 SSL 错误 home teleduce virtualenvs teleduce handler local lib python2 7 site
  • 检测下拉导航是否会离开屏幕并重新定位

    我已经有了典型的下拉导航 并且我正在尝试确保下拉菜单链接始终可访问且可见 li a href Link 1 a ul li a href Link 1 a li li a href Link 2 a li li a href Link 3
  • 无法绑定地址 php-fpm 的监听套接字

    我按照以下指示进行操作https www digitalocean com community tutorials how to install linux nginx mysql php lemp stack on centos 7 ht
  • 如何在 MongoDB 中存储键以 $ 开头的对象

    我想保存对文档所做的更改 最简单的方法是存储对文档所做的实际更改 我的意思是说 var changes set text Some text db posts update id id changes db changes insert p
  • 为什么即使列表视图有项目,布局文件中的空视图也会显示在屏幕上?

    我有一个列表视图来显示某些项目 并且我还使用了一个空视图 以防我的适配器没有可供列表视图显示的项目 问题是当我首先进行此活动时 它会在屏幕上显示空视图一秒钟 然后加载项目并在列表视图中显示它们 我的活动onCreate看起来像这样 Over
  • Angular2访问嵌套JSON

    我是 Typescript 中 Angular 2 的新手 我想使用 NgFor 访问 JSON 的 D 和 G 有没有办法访问元素 A B C D E F G H 我还创建了一个 Plunker Plunker https plnkr c
  • 如何从Mac到Linux交叉编译?

    我用 Rust 写了一个小游戏 然后用了cargo build release在 Mac 上编译发行版本 我尝试与使用 Ubuntu 的朋友分享此内容 但当他尝试运行二进制文件时 出现以下错误 cannot execute binary f
  • 如何判断下拉菜单是否有可供选择的选项?

    如何判断下拉菜单是否有可供选择的选项 var menu getElementById select id if menu options length has children else empty
  • 如何使用 JAXB 和 spring-boot 将 XML 转换为字符串?

    当我运行mvn spring boot run在包含 pom xml 文件的文件夹上 应用程序启动并将 POJO 正确序列化为 XML 但是当我通过转到目标文件夹并使用以下命令启动它时java jar在我得到的jar文件中javax xml
  • SCRIPT87:参数无效

    我有一个 jquery 函数 可以在所有浏览器中运行 但不能在兼容模式下的 ie7 和 ie 9 中运行 问题出在这个函数中 non attivo live click function clearInterval start slide
  • Servlet 3.1 - 安全约束 - 没有 web.xml

    Java Servlet 3 0 和 3 1 规范允许开发人员在 Java 代码中执行许多常见的基于配置的任务 而不是通过提供 web xml 文件的传统机制 我的应用程序已经完成了所有这些工作 但是在寻求解决应用程序安全性时 我找不到任何
  • React+Jest - 测试异步组件并等待安装

    我正在尝试测试一个具有异步功能的 React 组件componentDidMount Promise 本身不需要被嘲笑 它不一定用于访问外部内容 主要只是 props 的包装 但是 为了测试它 我需要使用wrapper update 4 t
  • 在 C++ 中将序列化的 Thrift 结构序列化到 Kafka

    我有一套structs定义于Thrift例如以下内容 struct Foo 1 i32 a 2 i64 b 我需要执行以下操作C a 序列化实例Foo转换为 Thrift 兼容字节 使用Binary or Compact节俭协议 b 将字节
  • Objective C 中的 INT32U 和 INT8U

    我在声明下方遇到错误 当声明 INT32U 时 我得到 错误 Though INT32U和 int 是 4 个字节 我如何声明 INT8U 的等价物 我不能使用 int 这里作为它的INT8U是2个字节 INT32U C Uucode IN
  • JavaScript - 动态创建 SVG 并修改光标

    假设我有一个 HTML5 画布 在本例中使用 Fabric js 并且我想更改画布上的光标以表示已选择的画笔大小和颜色 我认为应该有一种方法可以通过使用 JS 动态更改 SVG 的属性 大小和颜色 来做到这一点 这样我们就不必使用多个图像
  • React Native热重载刷新但不更新更改

    我了解 React 的基础知识 并在 React 上完成了一些个人项目 现在我开始反应本机 https facebook github io react native 所以我创建了一个新项目并运行run android命令 它完成了所有必需
  • 隐藏 UITabBarController 中的顶部栏

    如何使用 OBJ C 代码 不使用 Interface Builder 隐藏 UITabBarController 中的顶部栏 请参阅下面链接中的图片以更好地了解我的要求 http skitch com jugsvn dxkr7 iphon
  • 如何对 MIME 消息中 Content-Disposition 标头的文件名参数值进行编码?

    通过查看一些邮件的来源 我发现很多邮件都使用了 Encoded Words RFC 2047 https www ietf org rfc rfc2047 txt 格式对文件名参数值进行编码 然而 根据 RFC 2047 这种编码方法不应用