2013-07-09 76 views
1

我想使用C#發送Zip文件併發送.csv文件。 我創建這些文件,將它們壓縮並使用SMTP Gmail主機發送它們。C#使用gmail創建和發送Zip文件

它有時可能需要幾個小時才能到達目的地。 對於測試,我使用非常小的文件,所以大小不是問題。

如果我嘗試使用gmail「手動」發送這些zip文件,我會收到以下錯誤: 「myFile.csv.zip包含一個可執行文件。出於安全原因,Gmail不允許您發送此類文件。 「

我覺得可能是我的壓縮方法的問題,但它非常直截了當:

string compressedFile = fileName + ".zip"; 

FileInfo fi = new FileInfo(fileName); 
using (FileStream inFile = fi.OpenRead()) 
{ 
    using (FileStream outFile = File.Create(compressedFile)) 
    { 
     using (GZipStream Compress = new GZipStream(outFile, CompressionMode.Compress)) 
     { 
      inFile.CopyTo(Compress); 
      Compress.Close(); 
     } 
     outFile.Dispose(); 
    } 
} 
return compressedFile; 

剛一說明: 如果我採取相同的文件,手動ZIP或RAR它,我沒有問題。這也發生在文本文件上。從MSDN

+0

您是否嘗試過使用「DeflateStream」或爲檔案提供「.gz」文件擴展名?也許Gmail對「匹配」擴展和壓縮格式非常嚴格。 – cremor

+0

實際上使用'DeflateStream'可能不是一個好主意,如果其他程序應該能夠打開它。我從來沒有用過它自己,但經過一些閱讀後,它似乎實際上並沒有產生一個默認的zip文件。你在.NET 4.5嗎?那麼你應該使用'ZipFile'或'ZipArchive'。 – cremor

+0

@cremor給出一個.gz擴展名解決了問題:)如果你發佈這個作爲你的答案,我會接受它。 –

回答

1

報價:

Compressed GZipStream objects written to a file with an extension of .gz can be decompressed using many common compression tools

的gzip文件是不是真正的 「壓縮」 文件。他們通常使用「gz」作爲文件擴展名。您可以嘗試一下,也許Gmail對「匹配」擴展名和壓縮格式非常嚴格。

如果您使用.NET 4.5,則可以使用ZipArchive類。那個實際上處理「zip」文件。

+0

看看[DotNetZip](http://dotnetzip.codeplex.com/)是一個更好的選擇。 –