【问题标题】:Attachment without filename没有文件名的附件
【发布时间】:2016-10-10 13:06:16
【问题描述】:

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

在 Yahoo Mail 界面中,附件看起来具有正确的名称,但是当您下载它时,所有附件的下载名称都变为“无标题”。相同的电子邮件消息适用于 Gmail、Outlook.com、Windows Live Mail 和其他客户端。

查看原始消息,它包含一个带有名称但没有文件名属性的内容类型。如果设置了文件名属性但 C# 库不使用此属性,则 Yahoo 工作正常。

这是 C# 为附件生成的标头:

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

这是适用于 Yahoo 的标头:

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);
        }
    }

【问题讨论】:

  • 您是否尝试过设置附件的名称属性?你能告诉我们你的代码吗?
  • 是的,我尝试设置文件名,作为流发送并传递文件路径。我会把代码说清楚。

标签: c# email


【解决方案1】:

我找到了解决办法:

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

这会在原始电子邮件中添加缺少的文件名属性并解决 Yahoo 限制。

【讨论】:

    【解决方案2】:

    您是否尝试过明确指定内容类型?

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

    【讨论】:

    • 是的,我也尝试设置媒体类型。下载工作正常(未损坏)。唯一的问题是文件名,而且仅限于 Yahoo 帐户。
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2014-05-07
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    相关资源
    最近更新 更多