使用Redemption导入含超长附件文件名的邮件问题求助
解决Redemption导入超长分块文件名附件显示为“Untitled attachment”的问题
我来帮你梳理这个问题的解决思路——你遇到的是Redemption的RDOMail.Import方法对RFC 2231格式分块文件名的解析兼容性问题。这种name*0/filename*0的分块命名是处理超长文件名的标准格式,但当前版本的Redemption在导入时没有正确拼接这些分块,导致Outlook 365无法识别文件名,显示为“Untitled attachment”。
下面是几个可行的解决方向:
1. 预处理MIME文件,手动拼接分块文件名
在调用RDOMail.Import之前,先读取保存的MIME文件内容,把分块的文件名参数拼接成完整名称后再导入:
- 找到所有包含
filename*0=、filename*1=的Content-Disposition行,以及name*0=、name*1=的Content-Type行 - 把分块的字符串拼接成完整文件名,替换掉原来的分块行
比如把:
替换为:Content-Disposition: attachment; filename*0="this is an attachment with a really long file name - i hope "; filename*1="it works as intended.txt"Content-Disposition: attachment; filename="this is an attachment with a really long file name - i hope it works as intended.txt" - 注意保留编码标识(比如你的例子里的
charset=UTF-8),确保拼接后的文件名编码正确
2. 直接用Redemption的IMAP对象获取邮件(如果来源是IMAP服务器)
如果你的邮件是从IMAP服务器获取的,跳过“保存为MIME文件再导入”的步骤,直接用Redemption的RDOIMAPMessage对象获取:
// 假设已经连接到IMAP服务器并获取到目标文件夹 RDOIMAPFolder imapFolder = rdoSession.GetDefaultFolder(rdoDefaultFolders.olFolderInbox) as RDOIMAPFolder; RDOIMAPMessage msg = imapFolder.Items[1] as RDOIMAPMessage; msg.Download(); // 直接从服务器下载完整邮件
这种方式Redemption会直接处理服务器返回的邮件数据,通常能正确解析分块文件名,避免导入MIME文件时的解析问题。
3. 导入后手动修复附件文件名
如果预处理MIME文件太繁琐,可以先完成导入,再遍历附件集合手动设置正确的文件名:
- 导入邮件后,循环遍历
RDOMail.Attachments集合 - 从原MIME文件中提取对应附件的分块文件名并拼接完整
- 设置
RDOAttachment.FileName属性为拼接后的完整名称,然后保存邮件:
foreach (RDOAttachment att in rdoMail.Attachments) { // 从原MIME文件中解析出当前附件的完整文件名 string fullFileName = "拼接后的完整文件名"; att.FileName = fullFileName; } rdoMail.Save();
4. 更新Redemption到最新版本
你当前使用的是v5.21.0.05378,这个版本可能存在对RFC 2231分块文件名的支持缺陷。建议检查Redemption的官方更新,升级到最新版本后,RDOMail.Import方法可能已经修复了这个问题,无需额外处理。
内容的提问来源于stack exchange,提问作者user12504699
相关产品推荐
相关产品推荐

