当前位置: 首页 > 知识库问答 >
问题:

Javamail多部件订购不正确

孙文康
2023-03-14

我有一个应用程序,它试图动态构建一条Javamail消息,组装邮件时可用的Mime正文部分。每个图像的顶部都有一个“GPC”图像,后面是一些HTML文本(正文),一个由HTML构建的结束语,一个结束语“品牌”图像,以及结束语的最后一部分,也是HTML。文件附件可能包括,也可能不包括。如果适用,错误免责声明(HTML)可能会出现在第一张图片之前。

免责声明,正文,结尾,

我搞不懂。在我看来,“父”多部分应该是“混合”子类型,因为身体部位的顺序很重要,它们相对不相关,而嵌套的多部分是“相关”的,因为一个身体部位引用另一个身体部位。我的代码:

public MimeMultipart email_content_builder() throws MessagingException {
   MimeMultipart mp = new MimeMultipart();
   MimeBodyPart txt_part = new MimeBodyPart(), att_part, err_part, gpc_img_location_part, gpc_img_part, brand_img_location_part, brand_img_part, closing_pt1_part, closing_pt2_part;
   DataSource att_source, gpc_img_src, brand_img_src;
   String gpc_img_container_html, brand_img_container_html;

  //Insert error disclaimer, if applicable:
   if (!error_disclaimer.isEmpty()) {
      err_part = new MimeBodyPart();
      err_part.setText(error_disclaimer, "ISO-8859-1", "html");
      mp.addBodyPart(err_part);
   }

  //Insert GPC logo image, if applicable:
   if (GPC_logo.length > 0) {
      MimeMultipart gpc_imagery_mp = new MimeMultipart("related");
      MimeBodyPart gpc_imagery_part = new MimeBodyPart();

     //When resizing the GPC image, the height should be roughly 23% of the width;  use this factor:  .2331
      gpc_img_container_html = "<html><body><img src='cid:gpc_logo' height=\"23px\" width=\"100px\"></body></html>";

      gpc_img_location_part = new MimeBodyPart();
      gpc_img_location_part.setContent(gpc_img_container_html, "text/html");

      gpc_imagery_mp.addBodyPart(gpc_img_location_part);

      gpc_img_part = new MimeBodyPart();
      gpc_img_src = new ByteArrayDataSource(GPC_logo, "image/jpeg");
      gpc_img_part.setDataHandler(new DataHandler(gpc_img_src));
      gpc_img_part.setHeader("Content-ID", "<gpc_logo>");
      gpc_img_part.setDisposition(MimeBodyPart.INLINE);

      gpc_imagery_mp.addBodyPart(gpc_img_part);
      gpc_imagery_part.setContent(gpc_imagery_mp);
      mp.addBodyPart(gpc_imagery_part);
   }

  //Insert main body of email:
   txt_part.setText(body, "ISO-8859-1", "html");
   mp.addBodyPart(txt_part);

  //Insert the first part of the closing, if applicable:
   if (!Closing_Part1.isEmpty()) {
      closing_pt1_part = new MimeBodyPart();
      closing_pt1_part.setText(Closing_Part1, "ISO-8859-1", "html");
      mp.addBodyPart(closing_pt1_part);
   }

  //Insert brand logo image, if applicable:
   if (brand_logo.length > 0) {
      MimeMultipart brand_imagery_mp = new MimeMultipart("related");
      MimeBodyPart brand_imagery_part = new MimeBodyPart();

     //When resizing the brand image, the height should be roughly 43% of the width;  use this factor:  .4294
      brand_img_container_html = "<html><body><img src='cid:brand_logo' height=\"64px\" width=\"150px\"></body></html>";

      brand_img_location_part = new MimeBodyPart();
      brand_img_location_part.setContent(brand_img_container_html, "text/html");

      brand_imagery_mp.addBodyPart(brand_img_location_part);

      brand_img_part = new MimeBodyPart();
      brand_img_src = new ByteArrayDataSource(brand_logo, "image/jpeg");
      brand_img_part.setDataHandler(new DataHandler(brand_img_src));
      brand_img_part.setHeader("Content-ID", "<brand_logo>");
      brand_img_part.setDisposition(MimeBodyPart.INLINE);

      brand_imagery_mp.addBodyPart(brand_img_part);
      brand_imagery_part.setContent(brand_imagery_mp);
      mp.addBodyPart(brand_imagery_part);
   }

  //Insert the second part of the closing, if applicable:
   if (!Closing_Part2.isEmpty()) {
      closing_pt2_part = new MimeBodyPart();
      closing_pt2_part.setText(Closing_Part2, "ISO-8859-1", "html");
      mp.addBodyPart(closing_pt2_part);
   }

  //Insert attachments, if applicable:
   if (attachments != null) {
      for (int j = 0; j < attachments.size(); j++) {
         att_part = new MimeBodyPart();

         att_source = new FileDataSource((attachments.get(j)).getPath());
         att_part.setDataHandler(new DataHandler(att_source));
         att_part.setFileName((attachments.get(j)).getPath());

         mp.addBodyPart(att_part);
      }
   }
   return mp;
}

共有1个答案

薛云瀚
2023-03-14

您对不同的邮件阅读器如何显示邮件中的多个正文部分的控制非常有限。您最好将所有非附件内容放入单个文本/html正文部分,使用html来格式化邮件。您可以在消息中包含图像,但在Web上引用图像通常更简单。

 类似资料:
  • 我最初的目标是能够在侧边栏中按标题排序显示Woocommerce产品。目前,此小部件中唯一的排序选项是日期、价格、随机和销售。 我能够在wc类小部件产品的两个部分中添加标题排序选项。php: 在这里: 此自定义工作正常,但: 我的问题:我应该在哪里保存这个定制的“”文件,以防止它在下一次更新时被覆盖<或者。。。有没有更优雅的方法来实现这一点?非常感谢。

  • 问题内容: 我正在寻找一种数据结构的Java实现,该实现包含一组元素的集合,为这些元素定义了 部分排序 ,并且允许以某种 拓扑顺序 对这些元素进行迭代(任何可能的排序都可以;最好是稳定的)随着集合内容的变化而排序)。 理想的情况下,将落实一个,或接口,并支持所有的接口上的方法。在指定总排序方面,可以使用实例化集合,并且如果比较的两个元素彼此之间没有排序,则比较器可以引发异常(?)。另外,如果插入的

  • 问题内容: 我有一个与数据库对话的servlet,然后返回一个有序(按时间排序)对象的列表。在servlet部分,我有 从日志中,我可以看到数据库以正确的顺序返回了User对象。 在前端,我有 但是顺序改变了。 我只在返回的列表很大(超过130个用户)时才注意到这一点。 我尝试使用Firebug进行调试,Firebug中的“响应选项卡”显示列表的顺序与servlet中的日志不同。 我做错了什么吗?

  • 我是Flink的新手,我试图理解Flink是如何在其的并行抽象中命令调用。考虑这个产生部分和的流的例子: 我希望它的输出是流:。事实上,就在这里。 是否可以安全地假设这种情况始终存在,尤其是在从具有大量并行性的源读取数据时?

  • 问题内容: 我正在编写一个具有People模型的Django应用程序,但遇到了麻烦。我正在使用“多对多”关系将角色对象分配给人们- 角色具有名称和权重。我希望按角色最重的顺序来排列我的人员清单。如果我执行People.objects.order_by(’-roles__weight’),那么当人们被分配了多个角色时,我会得到重复。 我最初的想法是添加一个称为 最重角色权重 的非规范化字段- 并以此

  • 我使用下面的代码将pdf文件附加到邮件(JAVAMAIL)中。这个位置工作完美,并添加附件到我的邮件,但这邮件没有任何正文。 当我将下面的行添加到我的代码中时,它会删除附件并发送给我只包含文本的邮件。 请帮助我添加附件和测试体到我的邮件。