2011-06-28 20 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