【问题标题】:Java MimeMessage email printing header info in bodyJava MimeMessage 电子邮件在正文中打印标题信息
【发布时间】:2011-07-09 00:18:19
【问题描述】:

我继承的代码库正在打印电子邮件正文中的一些标题信息。这是正在打印的内容:

Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

如果我在创建消息后立即message.writeTo(System.out);,上面的文本将打印出来。

是否有属性文件或某处指定了这些内容?

看起来当邮件到达时,发送服务器已经为这三个属性写入了正确/不同的标题信息。

有什么删除它的想法吗?

另外,这里是整个函数:

private String sendConfirmationEmail (String to, String from, String subject, String body, boolean CCSender) {
  try
  {
    String smtpHost = Properties.smtp;      
    String fromAddress = from;
    String toAddress = to;

    Properties properties = System.getProperties();
    properties.put("mail.smtp.host", smtpHost);

    Session session = Session.getInstance(properties, null);

    MimeMessage message = new MimeMessage(session);

    message.setFrom(new InternetAddress(fromAddress));
    message.setRecipient(Message.RecipientType.TO,
            new InternetAddress(toAddress));

    message.setRecipient(Message.RecipientType.BCC,
            new InternetAddress(fromAddress));

    if (CCSender) {
      message.setRecipient(Message.RecipientType.CC,
              new InternetAddress(from));
    }
    message.setSubject(subject);
    message.setText(body);

    message.saveChanges();

    Transport.send(message);
    return "1:success";
  }
  catch(Exception e)
  {
    return "0:failure "+e.toString();
  }
}

【问题讨论】:

  • 您是否尝试过创建某种过滤方法,或者使用正则表达式来分块标题或其他内容。也许提供示例输入/输出有人可以帮助你。
  • 为什么您要删除这些标题?它们是准确的,只要 body 是全 ASCII 并且没有行 > 998 个字符...
  • 我想阻止它们在电子邮件中打印出来。所有收件人都会在电子邮件正文的顶部看到这三行。
  • 标头最终出现在邮件正文中并没有内在的原因。快速提问:如果将message.setSubject(subject) 更改为message.setSubject(subject.trim()),一切正常吗?

标签: java email jakarta-mail email-headers


【解决方案1】:

这些属性通过 java 邮件 api 公开,在例如 MimeMessage 中设置为标题属性。

Message msg = new MimeMessage(session);
msg.setHeader("MIME-Version", "1.0" );
msg.setHeader("Content-Type", "text/plain; charset=us-ascii" );

邮件服务器可以根据其本地策略依次更改标头。邮件服务器之间的通信可以很好地使用例如gzip 压缩,需要另一组标头。

[编辑]如果您观察source code for MimeMessage,您会看到一些标头设置为默认值,例如setHeader("MIME-Version", "1.0");

【讨论】:

  • 是的,但是如何将它们从我的电子邮件正文中删除?
  • @estubey,你不知道,作为 request/response 的标头,除非手动复制到正文中,否则它们不是正文的一部分。
  • 不确定从哪里复制它们。当我在我的函数中这样做时:
  • MimeMessage message = new MimeMessage(session); message.writeTo(System.out);内容输出包含: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit
  • MessagetoString() 例程,因为它还封装了标头。显然,打印了 default 标题。
猜你喜欢
  • 2021-02-06
  • 2015-03-29
  • 2011-07-07
  • 2013-07-25
  • 2020-10-06
  • 2013-07-30
  • 2012-07-11
  • 2016-10-21
  • 1970-01-01
相关资源
最近更新 更多