Нахождение размера письма перед отправкой - PullRequest
2 голосов
/ 27 февраля 2012

Я хочу отобразить приблизительный размер электронного письма перед его отправкой. Я использую 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;
  }

Позже я добавлю размер строки и размер изображения. НО размер письма и размер, который я получаю перед отправкой, различны. Есть ли что-то еще, что я должен рассмотреть, или я делаю это неправильно?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 27 февраля 2012

Единственный способ получить точный размер - создать свой собственный OutputStream, который подсчитывает все записанные байты, но ничего не делает с ними, затем использует msg.writeTo (), чтобы записать сообщение в этот OutputStream, и когда вы закончите, спроситеэто сколько байт было написано.

1 голос
/ 27 февраля 2012

Вы пытаетесь сделать что-то довольно сложное.Примите во внимание следующее:

Письмо состоит из заголовка и тела:

  • Заголовок состоит из нескольких строк, содержащих информацию, которую вы предоставляете (заголовок, адреса электронной почты и т. Д.).) другие строки, добавленные агентом отправки почты, и дополнительные строки, добавленные агентами передачи и принимающей программой.

  • Простейший элемент body состоит только из строк текстакоторые проходят через (почти) дословно.Но большинство тел электронной почты на самом деле кодируются MIME, а кодировка MIME добавляет материал, который говорит, где начинается и заканчивается каждая «часть», каков ее тип и так далее.И некоторые части (такие как изображения), которые не являются текстовыми по своей природе, должны быть закодированы как текстовые символы, чтобы их можно было безопасно передавать.

Когда вы объединяете все эти вещи,Вы можете видеть, что процесс определения размера различных частей письма очень сложен.

Возможно, более простой подход - создать фиктивного агента пересылки почты, отправить туда письмо, а затем измерить его общий размер и размер его компонентов, грубо проанализировав передаваемую почту.Но даже это нетривиальная задача.

1 голос
/ 27 февраля 2012

Следует учитывать, что сообщение может быть закодировано в кавычках и / или в uuencoded.Вы должны получить необработанное сообщение после упаковки, но перед отправкой и проверить его длину.

...