我想發送一封電子郵件,其中只包含一個附件,不包含任何文本或其他內容。JAVA mail api:爲什麼你需要Multipart才能發送帶附件的電子郵件?
爲什麼我應該將此表示爲多部分電子郵件的正文部分?
爲什麼我不能只寫
message.setFileName(filepath);
當在另一方面,這種工作
message.setText("blablabla");
我想發送一封電子郵件,其中只包含一個附件,不包含任何文本或其他內容。JAVA mail api:爲什麼你需要Multipart才能發送帶附件的電子郵件?
爲什麼我應該將此表示爲多部分電子郵件的正文部分?
爲什麼我不能只寫
message.setFileName(filepath);
當在另一方面,這種工作
message.setText("blablabla");
因爲這是MIME標準,所有電子郵件應遵循RFC MIME爲了讓電子郵件客戶端正確顯示電子郵件。附加的圖像是二進制數據,而消息正文總是ASCII,用戶無法在body displayd中打開帶有二進制文件的電子郵件,這是沒有用的。圖像的二進制代碼被轉換爲BASE64,因此二進制文件可以以ASCII字符的形式進行傳輸,並且必須位於電子郵件MIME邊界。電子郵件軟件知道如何找到這些邊界,並且可以將圖像作爲附件顯示給用戶,也可以在正文中顯示正確的方式,具體取決於您如何設置MIME邊界。 Multipart意味着電子郵件具有多種邊界,其中ASCII電子郵件正文是其中之一,無論該電子郵件是否爲白色。
這很有道理,謝謝你的回答 – John
閱讀https://www.ietf.org/rfc/rfc2045.txt - 包含消息主體支持附件而不是文本。是的,他們必須被編碼(例如base64或quoted-printable),但他們不需要在多部分。如果您不相信,請提供參考。 –
因爲郵件必須有正文部分 – Jens
這不是因爲Java電子郵件API。這是因爲SMTP協議。 檢查此問題http://stackoverflow.com/questions/3902455/smtp-multipart-alternative-vs-multipart-mixed –
延斯,@RicardoVila你是不正確的。 SMTP電子郵件支持將非文本類型作爲其直接主體的消息,而不使用多部分。檢查RFC:https://www.ietf.org/rfc/rfc2045.txt –