我有一项服务,可以创建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);
}
答案 0 :(得分:0)
.NET Framework中存在一个错误,其附件的文件名超过41个unicode字符。
我也有同样的问题并通过将文件名截断为40个字符来修复它。我做了什么:
40 - extension.Length
个字符我引用an MSDN thread中的答案:
是的,我们已经意识到这个问题并且已经解决了这个问题 未来版本。 [...]
在.NET 4.0中,SmtpClient现在实现RFC行长度限制(76 字符)。这需要对编码过程进行大量更改 我们发现了一些像你描述的问题。
在您的情况下,是的,非ascii附件名称存在问题 将被编码为超过41 utf-8字节 (Encoding.UTF8.GetByteCount(文件名))。在这种情况下的名称 被编码两次,并且可能有额外的换行符。唯一的 已知的解决方法是限制非ascii文件名的长度。