为电子邮件中添加的每个附件命名

本文关键字:电子邮件 添加 | 更新日期: 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对象,也可以进一步简化此操作。假设filesIEnumerable<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投影到具有无扩展名名称和完整路径的匿名类型。循环枚举这些内容,并使用与以前相同的方法来添加附件。