为电子邮件中添加的每个附件命名
本文关键字:电子邮件 添加 | 更新日期: 2023-09-27 18:33:30
如果条件 FileInfo.Exists 为真,我成功地编写了自动向电子邮件添加附件,如下所示:
if (filename.Exists)
{
message.Attachments.Add(new Attachment(path + @"'filefolder'filename.extension"));
}
我有一系列这样的代码来连接许多附件; 我的问题是如何为每个附件命名?像这样:
if (filename.Exists)
{
message.Attachments.Add(new Attachment(path + @"'filefolder'filename.extension"));
//here i would like to write code to assign a different name for each attachment
}
if (filename2.Exists)
{
message.Attachments.Add(new Attachment(path + @"'filefolder2'filename2.extension"));
//here i would like to write code to assign a different name for each attachment
}
由于这些附件中的许多都具有相同的名称.extension,我想知道原始附件instad的相对名称,即在我收到的电子邮件中有多个具有相同名称的文件。
感谢您的帮助。
修改代码以利用已有的FileInfo
对象,然后使用 Path.GetFileNameWithoutExtension() 提取名称。
var contentName = Path.GetFileNameWithoutExtension(filename);
message.Attachments.Add(new Attachment(filename.FullName) { Name = contentName });
如果集合中有FileInfo
对象,也可以进一步简化此操作。假设files
是IEnumerable<FileInfo>
,那这个呢?
var attachments = files
.Where(f => f.Exists)
.Select(f => new
{
Path = f.FullName,
ContentName = Path.GetFileNameWithoutExtension(f.FullName)
});
foreach (var attachmentInfo in attachments)
{
message.Attachments.Add(
new Attachment(attachmentInfo.Path) { Name = attachmentInfo.ContentName });
}
第一行是一组 LINQ 运算符,这些运算符将可枚举的FileInfo
投影到具有无扩展名名称和完整路径的匿名类型。循环枚举这些内容,并使用与以前相同的方法来添加附件。