Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何按文件扩展名获取电子邮件附件MIME类型?_C++_Windows_Winapi - Fatal编程技术网

C++ 如何按文件扩展名获取电子邮件附件MIME类型?

C++ 如何按文件扩展名获取电子邮件附件MIME类型?,c++,windows,winapi,C++,Windows,Winapi,我正在尝试编写一个类,该类将用于发送带有附件的电子邮件。为此,我需要为base-64编码的附件内容提供附件的MIME类型。问题是如何获得它,假设使用附件的文件扩展名 顺便说一句,我希望有比长时间的切换/案例更好的情况。但是,如果这是我唯一的选择,我在哪里可以得到这些关联的最详尽的列表?您可以在注册表中的以下任一项下查找: HKEY\u CLASSES\u ROOT\\并查看它是否有的“内容类型”值 HKEY\u CLASSES\u ROOT\MIME\Database\Content Type\

我正在尝试编写一个类,该类将用于发送带有附件的电子邮件。为此,我需要为base-64编码的附件内容提供附件的MIME类型。问题是如何获得它,假设使用附件的文件扩展名


顺便说一句,我希望有比长时间的
切换/案例
更好的情况。但是,如果这是我唯一的选择,我在哪里可以得到这些关联的最详尽的列表?

您可以在注册表中的以下任一项下查找:

  • HKEY\u CLASSES\u ROOT\\
    并查看它是否有
    的“内容类型”

  • HKEY\u CLASSES\u ROOT\MIME\Database\Content Type\
    ,枚举每个子项,直到找到其
    “Extension”
    值包含文件扩展名的子项

  • 还有一个问题


    如果找不到匹配的内容类型,则始终可以使用
    应用程序/octet流

    除了在另一个回答中建议的内容之外,下面是一个硬编码的MIME类型关联文件扩展名列表,我将其从JSON列表转换为C结构


    哎呀,不能在这里发布。太长了。相反。

    谢谢。这基本上就是操作系统中安装的所有文件关联,对吗。例如,如果我没有安装
    .pdf
    查看器,它就不会在该注册表项中,对吗?我希望Windows在这些天的默认情况下会附带一个pdf条目。但基本上是的。您需要检查新安装的Windows,以查看哪些是内置的。但其他应用程序可以添加自己的应用程序。我猜用户不太可能处理他们没有查看器/关联的文件。@c0000fd还有
    FindMimeFromData
    API,它可以嗅探数据并为您提供一个没有文件扩展名的MIME类型,尽管它识别的类型列表相当有限。是的,我刚刚检查了一个没有安装PDF viewer的Windows 7操作系统,该键中没有
    application/PDF
    项。尽管
    findmemefromdata
    看起来很有趣。谢谢。@c00000fd:注册表的MIME数据库不包含所有可能的文件扩展名。但它也不是注册表中存储MIME信息的唯一位置。我用另一个你可以查看的位置更新了这个答案。