【问题标题】:How to control alignment of mail header?如何控制邮件标题的对齐方式?
【发布时间】:2012-03-15 12:49:32
【问题描述】:

我遇到一种情况,当我发送一封电子邮件主题超过 80 个字符的电子邮件时,有时电子邮件主题会插入一个“制表符”字符。我检查了无效电子邮件的邮件标题,它们是对齐的,如果邮件标题条目超过 80 个字符,它将换行到一个新行,并插入一个“标签”。不知道是哪个配置控制的,javaMail设置? SMTP 设置?

示例标题:

案例一:电子邮件主题无效,插入了一个字符“制表符”。

Received: from as09.aaaaaaaaa.com ([192.168.1.129]) by aaaaaaaaa.com
    ([192.168.1.49]) with ESMTP (TREND IMSS SMTP Service 7.0; TLS:
    TLSv1/SSLv3,168bits,DES-CBC3-SHA) id ba8afe04001a23ba ; Wed, 1 Feb 2012
    16:17:10 +0800
Received: from as09 (localhost [127.0.0.1])by as09.aaaaaaaaa.com
    (8.13.8+Sun/8.13.8) with ESMTP id q118HAgi021891;Wed, 1 Feb 2012 16:17:10
    +0800 (HKT)
Message-ID: <25866052.1328084230581.JavaMail.oracle@as09>
Date: Wed, 1 Feb 2012 08:17:10 +0000
From: <sss@abc.com>
To: ben@abc.com,
    john@abc.com,
    jimmy@abc.com
Subject: test Daily report for city pairs of iPhone App enquiries indocument
     version Demo Customer/Test/Test/123/1231
CC: sam@abc.com
MIME-Version: 1.0

案例二:有效的电子邮件主题,刚刚包装

Received: from as08.aaaaaaaaa.com ([192.168.1.104]) by aaaaaaaaa.com
 ([192.168.1.49]) with ESMTP (TREND IMSS SMTP Service 7.0; TLS:
 TLSv1/SSLv3,168bits,DES-CBC3-SHA) id c356e969001b37a5 ; Fri, 3 Feb 2012
 09:16:58 +0800
Received: from as08.aaaaaaaaa.com (localhost [127.0.0.1])   by
 as08.aaaaaaaaa.com (8.13.4+Sun/8.13.4) with ESMTP id q131Gw1l006160;   Fri, 3
 Feb 2012 09:16:58 +0800 (HKT)
Message-ID: <17351450.1328231818282.JavaMail.oracle@as08.aaaaaaaaa.com>
Date: Fri, 3 Feb 2012 01:16:58 +0000
From: <sss@abc.com>
To: ben@abc.com
Subject: test Daily report for city pairs of iPhone App enquiries in
 document version Demo Customer/Test/Test/123/1231
CC: sam@abc.com

示例java代码:

public void sendEmail(Request req) throws Exception {
  Session mailSession;
  MimeMessage msg;
  Properties mailSessionProp = new Properties();
  mailSessionProp.put("mail.smtp.host", "localhost");
  mailSessionProp.put("mail.smtp.port", "25");

  mailSession = Session.getInstance(mailSessionProp, null);
  msg = new MimeMessage(mailSession);
  msg.addRecipients("TO", InternetAddress.parse(req.getRecipientAddress()));
  msg.setSubject(MimeUtility.encodeText(req.getSubject(), "UTF-8", "B"));
  msg.setHeader("X-Mailer", "");
  msg.setSentDate(new Date());
  msg.setContent(req.getMessage(), req.getMessageContentType().getType());
  Transport.send(msg);
}

Java 邮件:

    Manifest-Version: 1.0
    Implementation-Version: 1.3.3_01
    Specification-Title: JavaMail(TM) API Design Specification
    Specification-Version: 1.3
    Extension-Name: javax.mail
    Created-By: 1.3.1 (Sun Microsystems Inc.)
    Implementation-Vendor-Id: com.sun
    Implementation-Vendor: Sun Microsystems, Inc.
    Specification-Vendor: Sun Microsystems, Inc.
    SCCS-ID: @(#)javamail.mf    1.5 02/03/14

【问题讨论】:

标签: java smtp jakarta-mail sendmail


【解决方案1】:

根据http://www.faqs.org/rfcs/rfc2822.html,这种行为是正确的

2.2.3。长标题字段

每个标题字段在逻辑上都是单行字符,包括字段名称、冒号和字段正文。然而,为了方便起见,并处理每行 998/78 个字符的限制,标题字段的字段主体部分可以拆分为多个 线表示;这称为“折叠”。一般规则是,只要该标准允许折叠空格(不仅仅是 WSP 字符),就可以在任何 WSP 之前插入 CRLF。

【讨论】:

  • 您好 Tichodroma,您知道哪个系统插入了“标签”吗?如何配置?
【解决方案2】:

JavaMail 将在您调用 setSubject() 时包装标头,并在您调用 getSubject() 时将其打开。

【讨论】:

  • 但是同样的java代码,为什么有时插入'tab',有时不插入?我检查了JavaMail,它只是包装了主题,而不是插入一个新的字符'\t'。
  • 你需要给我看一些例子,有时/有时不需要。标题的格式化方式是换行(续行)以空白字符开头。 MIME 规范允许使用空格或制表符,但 JavaMail 选择制表符是因为它在阅读原始 MIME 消息时更容易阅读标题。
  • 嗨,比尔,我上传了一些示例邮件头。我检查了JavaMail代码,它在包裹邮件标题时没有插入标签。
  • 告诉我你是如何测试这个的细节。
  • 我有两个应用服务器,as08,as09(每个应用服务器都有一个 smtp 服务器。)。我在as08上调用了发送邮件功能,然后检查邮件头,发现邮件头折叠了。然后我在as09上调用了发送邮件功能,检查邮件头,发现邮件头折叠并插入了一个'tab'。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多