C# - 无法将文件附加到电子邮件中

时间:2015-02-26 14:54:31

标签: c# excel email service

我有一项服务,可以创建Excel文件并通过电子邮件发送。

此服务在测试服务器上正常工作,但在生产服务器上我有一个错误 - 附件中有一个奇怪的文件,没有名称如=utf-8B0J3QtdC0YDQvtGB0YLQsNCy0LvQtdC9的扩展名,而且内部的内容相同而不是Excel文件。< / p>

有我的发送方法。我想我的代码中没有麻烦。

public static void SendEmail(string subject, string body, string recipients, Attachment attachment = null)
    {
        string mailServer = Settings.Default.MailServer;

        MailMessage message = new MailMessage(Settings.Default.MailSender, recipients);
        foreach (string address in Settings.Default.MailCopyTo.Split(',').Select(x => x.Trim()))
        {
            if (!string.IsNullOrEmpty(address))
                message.CC.Add(new MailAddress(address));
        }
        message.IsBodyHtml = true;
        message.Body = body;
        message.Subject = subject;

        if(attachment != null)
            message.Attachments.Add(attachment);


        SmtpClient client = new SmtpClient(mailServer);
        var AuthenticationDetails = new NetworkCredential(Settings.Default.MailLogin, Settings.Default.MailPassword);
        client.Credentials = AuthenticationDetails;
        client.Send(message);
    }

1 个答案:

答案 0 :(得分:0)

.NET Framework中存在一个错误,其附件的文件名超过41个unicode字符。

我也有同样的问题并通过将文件名截断为40个字符来修复它。我做了什么:

  1. 获取文件扩展名
  2. 获取不带扩展名的文件名
  3. 将文件名缩短为40 - extension.Length个字符
  4. 添加扩展程序
  5. 我引用an MSDN thread中的答案:

      

    是的,我们已经意识到这个问题并且已经解决了这个问题   未来版本。 [...]

         

    在.NET 4.0中,SmtpClient现在实现RFC行长度限制(76   字符)。这需要对编码过程进行大量更改   我们发现了一些像你描述的问题。

         

    在您的情况下,是的,非ascii附件名称存在问题   将被编码为超过41 utf-8字节   (Encoding.UTF8.GetByteCount(文件名))。在这种情况下的名称   被编码两次,并且可能有额外的换行符。唯一的   已知的解决方法是限制非ascii文件名的长度。