You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MailKit获取邮件附件原始文件名时乱码,如何解决?

问题:MailKit获取附件文件名乱码,无法得到原始文件名

使用MailKit的Fetch方法获取邮件附件时,得到的文件名显示为乱码「$B!Z(BFIlE$B![(B.pdf」,与实际原始文件名「【FILE】.pdf」不符。相关代码如下:

var items = client.Inbox.Fetch(new[] { uid }, MessageSummaryItems.BodyStructure | MessageSummaryItems.UniqueId);
foreach (var item in items)
{
    var attachments = item.Attachments.OfType<BodyPartBasic>();
    foreach (var attachment in attachments)
    {
        Console.WriteLine(attachment.FileName); // 返回 "$B!Z(BFIlE$B![(B.pdf"
    }
}

对应的FETCH日志:

S: * 25 FETCH (UID 24458 BODYSTRUCTURE ((("text" "plain" ("charset" "iso-2022-jp") NIL NIL "quoted-printable" 143 7 NIL NIL NIL NIL)("text" "html" ("charset" "iso-2022-jp") NIL NIL "quoted-printable" 1108 28 NIL NIL NIL NIL) "alternative" ("boundary" "----=_NextPart_001_0025_01DB2399.BBE7F130") NIL NIL NIL)("application" "pdf" ("name" "=?iso-2022-jp?B?GyRCIVsbKEJGSUxFGyRCIVsbKEIucGRm?=") NIL NIL "base64" 121386 NIL ("attachment" ("filename" "=?iso-2022-jp?B?GyRCIVsbKEJGSUxFGyRCIVsbKEIucGRm?=")) NIL NIL) "mixed" ("boundary" "----=_NextPart_000_0024_01DB2399.BBE7F130") NIL NIL NIL))
S: A00000005 OK Fetch completed (0.001 + 0.000 secs).

解决方案

问题出在文件名是RFC 2047格式的编码字符串(基于ISO-2022-JP编码),直接读取attachment.FileName得到的是未解码的原始编码内容,导致显示乱码。可以使用MailKit内置的MimeUtility.DecodeText()方法解码:

var items = client.Inbox.Fetch(new[] { uid }, MessageSummaryItems.BodyStructure | MessageSummaryItems.UniqueId);
foreach (var item in items)
{
    var attachments = item.Attachments.OfType<BodyPartBasic>();
    foreach (var attachment in attachments)
    {
        // 解码RFC 2047格式的文件名
        var decodedFileName = MimeUtility.DecodeText(attachment.FileName);
        Console.WriteLine(decodedFileName); // 输出正确的「【FILE】.pdf」
    }
}

MimeUtility.DecodeText()会自动识别字符串中的编码标识(比如=?iso-2022-jp?B?...?=),解析编码类型和编码方式(B代表Base64),最终还原出正确的原始文件名。

内容的提问来源于stack exchange,提问作者ivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:51:13