我有一个简单的C#应用程序,用System.Net.Mail类发送SMTP电子邮件。在发送(电子邮件)MailMessage对象之后,我想遍历附件列表并删除与这些附件相关联的原始文件...但是我很难找到与每个附件关联的完整文件路径-而不保留自己的附件文件路径集合。一定有一种好方法可以从附件对象中提取完整的文件路径。
我知道这一定很简单,但我花了太多时间在这上面了...是时候向其他人寻求帮助了。
我知道这一定很简单,但我花了太多时间在这上面了...是时候向其他人寻求帮助了。
filePath
参数通过Attachment
构造函数添加附件,则可以通过ContentStream
属性检索这些附件,并且它们的类型将为FileStream
。以下是如何获取附加文件的文件名的方法:var fileNames = message.Attachments
.Select(a => a.ContentStream)
.OfType<FileStream>()
.Select(fs => fs.Name);
但是不要忘记首先处理 MailMessage
对象,否则你将无法删除这些附件:
IEnumerable<string> attachments = null;
using (var message = new MailMessage())
{
...
attachments = message.Attachments
.Select(a => a.ContentStream)
.OfType<FileStream>()
.Select(fs => fs.Name);
}
foreach (var attachment in attachments )
{
File.Delete(attachment);
}
您可以:
但请注意,邮件消息(包括附件和其流)可能不会立即被收集或清理,因此您可能无法立即删除文件。如果您确实需要以这种方式处理事情,那么更好的方法是子类化Attachment并记录文件名,同时子类化Dispose(以在基础Dispose之后执行)以执行删除。
Attachment.ContentStream
链接缺少结尾的 "x" (应该是 .aspx 文件)。我可以为你编辑,但是我的声望还不够。 - Joel Lee