在发送之前查找电子邮件大小

时间:2012-02-27 05:48:55

标签: java email jsp javamail

我希望在发送之前显示电子邮件的大致尺寸。我正在使用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 个答案:

答案 0 :(得分:3)

获得准确大小的唯一方法是创建自己的OutputStream来计算写入的所有字节但不对它们执行任何操作,然后使用msg.writeTo()将消息写入该OutputStream,并在完成后询问它写了多少字节。

答案 1 :(得分:1)

您应该考虑邮件可以使用quoted-printable和/或uuencoded进行编码。您应该在打包之后但在发送之前收到原始消息,并检查其长度。

答案 2 :(得分:1)

你正在尝试做一些相当棘手的事情。考虑一下:

电子邮件由标题和正文组成:

  • 标题由一些行组成,这些行包含您提供的信息(标题,电子邮件地址等),邮件发送代理添加的其他行,以及由转移代理和接收添加的更多行程序

  • 最简单的身体只包括几乎逐字传递的文本行。但是大多数电子邮件正文实际上是MIME编码的,并且MIME编码添加了说明每个“部分”开始和结束的位置,类型是什么等等的东西。并且一些非文本的部分(例如图像)需要被编码为文本字符,以便它们可以安全地传输。

当您将所有这些内容组合在一起时,您会发现确定电子邮件的各个部分有多大的过程非常复杂。

可能更简单的方法是创建一个虚拟邮件传输代理,在那里发送邮件,然后通过粗略解析传输的邮件来测量其整体大小和组件的大小。但即使这是一项非常重要的任务。