【发布时间】:2014-07-22 07:19:42
【问题描述】:
我开发了一个应用程序,它需要通过电子邮件(在附件中)发送压缩文件。一切都很好,除了一件事:附件名称中的西里尔字母(或其他 unicode)字符消失了。它们在邮件名称和邮件正文中工作正常,但在附件中却不行。
我使用以下代码作为附件:
var attachment = new Attachment(file, MediaTypeNames.Application.Zip);
ContentDisposition disposition = attachment.ContentDisposition;
disposition.CreationDate = File.GetCreationTime(file);
disposition.ModificationDate = File.GetLastWriteTime(file);
disposition.ReadDate = File.GetLastAccessTime(file);
disposition.FileName = Path.GetFileName(file);
disposition.Size = new FileInfo(file).Length;
disposition.DispositionType = DispositionTypeNames.Attachment;
message.Attachments.Add(attachment);
smtpClient.Send(message);
并使用 SmtpClient 类发送电子邮件。我尝试了一些在 SO 上找到的解决方法,比如
att.Name = "история-болезни.doc"; // non-english filename
att.Name = System.Web.HttpUtility.UrlEncode(att.Name, System.Text.Encoding.UTF8);
但一无所获...我的日志显示电子邮件以正确的附件名称发送到服务器,我还尝试手动(不是以编程方式)发送此类电子邮件,而且效果也很好。
那么,我该如何解决这个问题?我找到了一些 .Net 框架的补丁,但这并不好,因为我必须将我的应用程序发布到许多不同的客户端,而且我不想在应用程序正常运行之前在他们的计算机上安装补丁程序。
UPD。
【问题讨论】:
-
你试过this吗?
-
@OğuzSezer,正如我所提到的,我最好使用没有此类可安装修补程序的解决方法,因为它会使应用程序部署复杂化。我还有其他选择吗?
-
我想没有其他解决方案,我遇到了同样的问题,这是唯一对我有用的解决方案。如果您发现其他东西,请告诉我:)
-
@OğuzSezer,您尝试过框架升级吗?也许它会解决问题?
-
不,我仍在使用带有修补程序的 V4.0。我不打算在不久的将来升级我的应用程序的框架版本。