2012-02-27 25 views
2

我想在發送郵件之前顯示郵件的大小。我正在使用java/jsp/js。在發送之前查找郵件大小

我有一個像下面

<html> 
...... 
<img src="xyz.jpg"/> 
...... 
</html> 

輸入現在,我計算的電子郵件大小如下表示。

由於HTML發送的郵件正文,我是把整個HTML內容和獲取字節大小

strSize = content.getBytes().length; 

我被讀取圖像和獲取長度

URL url = new URL(imageurl); 
    InputStream is = url.openStream(); 
    byte[] b = new byte[2048]; 
    int length = 0; 
    while((length = is.read(b)) != -1) { 
    totalLength += length; 
    } 

後來得到的圖像大小我將添加字符串大小和圖像大小。但是在發送郵件之前我收到的電子郵件的大小和大小都不同。還有什麼我應該考慮的,還是我以錯誤的方式去做?

預先感謝您。

回答

1

您應該認爲該郵件可能使用quoted-printable和/或uuencoded編碼。您應該在包裝之後,但在發送之前收到原始信息,並檢查其長度。

1

你正在嘗試做一些相當棘手的事情。試想一下:

的電子郵件由一個頭和一個主體:

  • 頭由包含的信息,您提供由添加了一些線(標題,電子郵件地址等),其他線路的郵件發送代理以及由傳輸代理和接收程序添加的更多行。

  • 最簡單的身體只是由幾乎逐字地穿過的文本行組成。但大多數電子郵件實體都是MIME編碼的,MIME編碼添加了一些內容,說明每個「部分」的開始和結束位置,其類型等等。而一些非文本性質的部分(如圖像)需要編碼爲文本字符,以便可以安全傳輸。

當你把所有這些事情,你可以看到,搞清楚有多大的電子郵件的各個部分將是的過程非常複雜。

可能更簡單的方法是創建一個虛擬郵件傳輸代理,將郵件發送到那裏,然後通過粗略分析傳輸的郵件來測量其總體大小以及組件的大小。但即使這是一項不平凡的任務。

3

獲得正確大小的唯一方法是創建自己的OutputStream,它可以統計所有寫入的字節,但不對它們執行任何操作,然後使用msg.writeTo()將消息寫入該OutputStream,並在完成時問它寫了多少字節。

相關問題