我正在編寫一個Python腳本來設置套接字以通過SMTP從我的Gmail帳戶發送帶有圖像的多部分電子郵件。我沒有將smtplib或email.mime用於教育目的。我使用ssl和套接字並用ssl.wrap_socket封裝一個TCP套接字。SMTP到Gmail:圖像被添加的CRLFs損壞
一切正常,電子郵件到達與文字和附加圖像。但是,附加的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))
也許你應該使用更高級別的模塊,如果你不想了解協議的所有細節,並讓它做「正確的事情」。如果您確實想要使用套接字,請深入MIME RFC。 – Cans