没有文件名的附件

本文关键字:文件名 | 更新日期: 2023-09-27 18:12:36

当使用System.Net.Mail命名空间向任何Yahoo帐户发送带有附件的电子邮件时,附件将以'untitled'名称而不是文件名下载。

在Yahoo Mail界面中,附件看起来有正确的名称,但当你下载它时,所有附件的下载名称都变成了"untitled"。同样的邮件在Gmail、Outlook.com、Windows Live Mail和其他客户端上都可以正常工作。

查看原始消息,它包含有名称但没有filename属性的内容类型。如果设置了filename属性,雅虎可以正常工作,但c#库不使用这个。

这是c#为附件生成的头文件:

Content-Type: application/octet-stream; name=test.pdf

这是雅虎的标头:

Content-Type: application/octet-stream; name=file2; filename=test.pdf
到目前为止,有人明白这个问题吗?是否有解决c#默认邮件发送的方法?
 using (var message = new MailMessage("from@domain", "to@yahoo.com.br", "Test with attachment", "Test with attachment"))
    {
        var attachment = new Attachment(@"c:'temp'test.pdf"); // Same result using stream instead path to file.
        attachment.Name = "test.pdf"; // Same result without this line.
        message.Attachments.Add(attachment);
        using (var smtp = new SmtpClient("smtp.domain", 587))
        {
            smtp.Credentials = new NetworkCredential("from@domain", "password");
            smtp.Send(message);
        }
    }

没有文件名的附件

我找到了一个解决方案:

attachment.ContentDisposition.FileName = "test.pdf";

这将在原始电子邮件消息中添加缺少的filename属性,并解决Yahoo的限制。

您是否尝试显式指定内容类型?

var attachment = new Attachment(... , MediaTypeNames.Application.Octet);