Python:通过SMTP将可执行二进制文件发送到Gmail

2 投票
1 回答
2452 浏览
提问于 2025-04-16 20:29

我想知道怎么能把一个可执行文件的真实扩展名改成其他格式,这样我就可以通过Gmail的SMTP协议发送这个文件(都是用Python来做)。

比如说,把“binary”改成“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 个回答

5

根据谷歌的政策,二进制文件是被禁止的。

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文件,因为谷歌就无法打开它来扫描内容,前提是他们允许这样做。另一个选择是,在发送文件之前先对其进行加密,甚至简单的异或加密可能就足够让它通过过滤。这样你在取回文件时就需要解密。

撰写回答