使用EAGetMail保存EML前移除附件失败,寻求技术解决方案
解决EAGetMail移除附件后EML仍保留附件的问题
你的问题出在正向循环移除附件的逻辑上:当你删除一个附件时,_mail.Attachments数组的长度会立即缩短,后续的索引会发生偏移,导致部分附件被跳过,没有被真正删除。
正确的实现方式
改用反向循环从最后一个附件开始删除,这样数组长度的变化不会影响未处理的附件索引:
_mail = new("EAGetMailLicence"); _mail.Load(memoryStream.ToArray()); // 反向循环删除所有附件 for (int i = _mail.Attachments.Length - 1; i >= 0; i--) { _mail.RemoveAttachment(_mail.Attachments[i]); } _mail.Update(); // 此处执行保存.eml文件的操作
为什么其他方法无效?
_mail.Attachments[i] = null:只是将数组元素置空,但EAGetMail的邮件对象内部依然保留了附件的原始数据,不会影响最终生成的EML。Array.Clear(_mail.Attachments):同样只是清空数组引用,没有触发EAGetMail内部的附件移除逻辑,邮件原始结构未被修改。
只有通过RemoveAttachment方法并配合正确的循环逻辑,才能真正从邮件对象中移除附件,再调用Update()同步修改,最后保存的EML就不会包含附件了。
内容的提问来源于stack exchange,提问作者Said Saber
相关产品推荐
相关产品推荐

