【问题标题】:Finding the email size before sending it在发送之前查找电子邮件大小
【发布时间】:2012-03-16 15:56:16
【问题描述】:

我想在发送前显示电子邮件的大致大小。我正在使用 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;
  }

稍后我将添加字符串大小和图像大小。但是电子邮件的大小和我在发送之前得到的大小都是不同的。还有什么我应该考虑的还是我做错了?

提前谢谢你。

【问题讨论】:

  • 这个问题已经发布很久了,但是你在这里找到了问题的任何解决方案吗?

标签: java email jsp jakarta-mail


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    • 最简单的 for 正文只包含(几乎)逐字逐句传递的文本行。但是大多数电子邮件正文实际上是 MIME 编码的,并且 MIME 编码添加了一些内容,说明每个“部分”的开始和结束位置、它的类型等等。而一些非文本的部分(如图片)需要编码为文本字符,以便安全传输。

    当你把所有这些东西结合起来时,你会发现弄清楚电子邮件的各个部分会有多大的过程是非常复杂的。

    可能,一种更简单的方法是创建一个虚拟邮件传输代理,将邮件发送到那里,然后通过粗略解析传输的邮件来测量其整体大小及其组件的大小。但即便如此,这也是一项艰巨的任务。

    【讨论】:

      【解决方案3】:

      您应该考虑到消息可能以quoted-printable 和/或uuencoded 编码。您应该在打包之后但在发送之前获取原始消息,并检查其长度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多