gpt4 book ai didi

python - SMTP 到 Gmail : image corrupted by added CRLFs

转载 作者:太空宇宙 更新时间:2023-11-03 14:05:35 25 4
gpt4 key购买 nike

我正在编写一个 Python 脚本来设置套接字,以通过 SMTP 从我的 Gmail 帐户发送包含图像的多部分电子邮件。我没有将 smtplib 或 email.mime 用于教育目的。我正在使用 ssl 和套接字,并使用 ssl.wrap_socket 包装一个 TCP 套接字。

一切正常,电子邮件到达时带有文本和附加图像。但是,附加的 JPEG 图像已损坏。

在十六进制编辑器中比较原始图像和损坏的图像,我可以看到 jpeg 中的所有 0x0D 和 0x0A 字节都已被 0x0D0x0A 替换。这些字节将代表文本中的 CR 和 LF,因此在某些时候,我的二进制数据中的 CR 和 LF 似乎被 CRLF 不恰本地替换了。

如果我在将二进制数据发送到 ssl 套接字之前立即将其写入文件,则二进制数据似乎是正确的。 Gmail 似乎正确地解释了内容类型,因为它将损坏的图像显示为图像。

CRLF 替换可能会渗透到二进制图像数据中的任何想法?

解决方法:

编码头的相关解决代码:

        b'Content-Transfer-Encoding: base64\r\n' +\

对于 base64 编码本身:

clientSocketSSL.sendall(base64.b64encode(msgImage))

最佳答案

由于您没有显示任何代码,我猜测您只是将二进制图像放入邮件中。但是,传统邮件只能传输 ASCII 数据,并且行长度限制为 1000 个字符,因此必须对数据进行编码才能传输,请参阅 Wikipedia:MIME了解更多信息。

如果您没有为传输指定任何编码,它将被视为 7 位,如果您幸运地被视为 8 位编码,并且这两种编码都将行结束视为特殊的,并将根据平台进行更改。这意味着在 Windows 上,原始的单个 LF 将存储为 CRLF,而在 Unix 上,原始的 CRLF 将仅存储为 LF。请注意,不仅发送和接收邮件的用户代理可能会调整数据以适应平台,而且中间的任何邮件服务器也可能会更改这些数据。

总结:使用 MIME 正确编码二进制数据以进行传输,email提供您需要的功能。

关于python - SMTP 到 Gmail : image corrupted by added CRLFs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42318318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com