2011-06-28 73 views
0

如何更改可執行二進制文件的實際文件擴展名以通過gmail smtp協議(全部在python中)發送該文件。Python:通過smtp發送可執行的二進制文件到gmail

例: 「二元」 到 「binary.jpg」

我會試試這個:

 
import gzip, shutil 
src = open('3c7983cb70e9630cc4ee2fe3e1fb16c2', 'rb') 
dest = gzip.open('3c7983cb70e9630cc4ee2fe3e1fb16c2.gz.jpg', 'wb') 
shutil.copyfileobj(src, dest) 

但是當我嘗試通過Gmail SMTP發送它發生這樣:

 
smtplib.SMTPDataError: (552, '5.7.0 Our system detected an illegal attachment on your message. Please\n5.7.0 visit http://mail.google.com/support/bin/answer.py?answer=6590 to\n5.7.0 review our attachment guidelines. n18sm433437wbh.23') 

提前感謝。

+1

把文件命名爲'.jpg.gz'而不是'.gz.jpg'更加傳統,我懷疑這會解決你的問題,但它會讓事情變得更加清晰。 ,'gmail'可能檢查二進制文件的內容以確定它是否是可執行文件,而不管它的擴展名。 – GWW

+0

但不起作用 – x13

+0

是什麼讓你覺得gmail的工程師不夠聰明,不能使用Windows?在大多數操作系統中,文件擴展名完全不相關,依靠它來檢測非法附件是愚蠢的。 – geoffspear

回答

3

根據谷歌的政策,二進制文件被禁止。

Gmail won't accept these types of files even if they are sent in a zipped 
(.zip, .tar, .tgz, .taz, .z, .gz) format. If this type of message is sent to 
your Gmail address, it is bounced back to the sender automatically. 

所以谷歌是解壓文件,最有可能檢查文件頭的方式確定文件類型(而不是依靠提供的擴展。要解決這個問題,你可以嘗試上傳它作爲一個受密碼保護的ZIP文件,因爲谷歌將無法打開它來掃描內容,假設他們允許的話,另一個選擇是在發送文件之前對文件進行加密,甚至一個非常簡單的XOR加密可能足以通過過濾。然後在檢索文件時需要解密

+0

如何將文件編碼爲base64? – x13

+0

from https://support.google.com/a/answer/6590?hl=zh-CN 無法發送包含zip文件的受密碼保護的zip文件。如果可能,請解壓縮所有文件或刪除密碼保護。 Mac用戶發送一個也包含另一個zip文件的zip文件會增加文件損壞的可能性。我們建議您首先解壓縮所有文件並僅創建一個zip文件。 – theAlse