.NET SMTP邮件 - 正在重命名的附件文件名

时间:2016-12-10 16:47:19

标签: c# .net email smtp

期望的方法:

我希望在将文件作为附件发送时保留相同的文件名,而不是将.NET重命名(无论出于何种原因,它都会添加到文件的路径上)。 我不想传递另一个参数来设置文件名。

示例:

- Project (folder)
 - Content (folder)
  - Files (folder)
   - PDF (folder)
    - Triumeq (folder)
     - sample.pdf (file)

电子邮件附件中的文件名始终重命名为:

DOMAINcontentfilespdftriumeqsample.pdf

DOMAIN =在图片中标出

enter image description here

我尝试过的事情:

// add attachment if applicable
if (!string.IsNullOrEmpty(attachmentFilePath))
{
    var fs = new FileStream(string.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, attachmentFilePath), FileMode.Open, FileAccess.Read);
    msg.Attachments.Add(new Attachment(fs, fs.Name, MimeTypesHelper.GetContentType(Path.GetExtension(fs.Name))));

   // MimeTypeHelper.GetContentType just returns the MimeType of the file listed in the file stream
}

if (!string.IsNullOrEmpty(attachmentFilePath))
{
    msg.Attachments.Add(new Attachment(string.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, attachmentFilePath)));
}

每种方式始终重命名文件,并且不保留原始文件名

1 个答案:

答案 0 :(得分:1)

您使用的附件构造函数需要将Mime ContentType的Name属性值作为第二个参数。当您使用斜杠传递字符串时,它们将被删除为不允许的字符。

您将无法在文件附件名称中包含某些路径,只允许使用纯文件名。所以你应该从路径中提取文件名,例如:

msg.Attachments.Add(new Attachment(fs, Path.GetFileName(fs.Name), MimeTypesHelper.GetContentType(Path.GetExtension(fs.Name))));

这会使附件名称为' sample.pdf'。