我想壓縮XML樹並將其用作電子郵件附件。帶附件的電子郵件發送成功,但創建的zip文件總是損壞 - 它不是有效的zip文件,但包含二進制數據。爲電子郵件附件壓縮MemoryStream
問題是重建如下,具體參見BuildAttachment()
:
static void Main(string[] args)
{
try
{
var report = new XElement("Report",
new XElement("Product",
new XElement("ID", "10000001"),
new XElement("Name", "abcdefghijklm"),
new XElement("Group", "nopqrstuvwxyz")
)
);
var mailMessage = BuildMessage(report);
EmailMessage(mailMessage);
Thread.Sleep(10000);
}
catch (Exception e) { Console.WriteLine(e.Message); }
}
static MailMessage BuildMessage(XElement report)
{
string from = "[email protected]";
string to = "[email protected]";
var message = new MailMessage(from, to, "Subject text", "Body text");
var attachment = BuildAttachment(report);
message.Attachments.Add(attachment);
return message;
}
static Attachment BuildAttachment(XElement report)
{
var inStream = new MemoryStream();
report.Save(inStream);
inStream.Position = 0;
var outStream = new MemoryStream();
var compress = new DeflateStream(outStream, CompressionMode.Compress);
inStream.CopyTo(compress);
outStream.Position = 0;
return new Attachment(outStream, "report.zip", "application/zip");
}
static void EmailMessage(MailMessage message)
{
var smtpClient = new SmtpClient("127.0.0.1");
smtpClient.SendCompleted += SendCompletedCallback;
smtpClient.SendAsync(message, null);
}
static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
if (e.Error != null)
Console.WriteLine(e.Error.ToString());
}
爲了把問題情境:這是一個Windows服務應用程序的一部分,所以我不想在磁盤上創建文件,以及電子郵件消息還包含xslt轉換的xml樹的替代視圖,所以我不想要一個完全不同的解決方案。
任何建議爲什麼壓縮文件損壞?
'DeflateStream =郵編File'文件(.zip可以有多種類型的壓縮)的 – user7116 2012-07-23 14:20:24
可能重複[如何使用System.IO.Compression讀/寫ZIP文件?(HTTP:/ /stackoverflow.com/questions/184309/how-to-use-system-io-compression-to-read-write-zip-files) – user7116 2012-07-23 14:24:46