Uploaded image for project: 'James Server'
  1. James Server
  2. JAMES-281

Return-Path twice in header



    • Type: Bug
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 2.1.3, 2.2.0
    • Fix Version/s: 2.2.0
    • Component/s: SMTPServer
    • Labels:



      I posted about this problem a while ago on the list. I see that James 2.2.0RC2 still contains this issue so I've taken the liverty of creating a Jira entry.

      We experienced some unexpected behavior with James 2.1.3 when sending a message that has two Return-Path headers.

      An example of such a message:

      Return-Path: testuser@example.com
      From: "Brinkers" <testuser@example.com>
      To: <testuser@example.com>
      Subject: Return-Path mail
      Return-Path: another_testuser@example.com
      Date: Tue, 9 Dec 2003 22:36:33 -0500


      James transforms this into something like

      Content-Type: text/plain;
      Content-Transfer-Encoding: quoted-printable
      content-class: urn:content-classes:message
      Date: Thu, 15 Jan 2004 12:02:16 +0100

      Received: from vallum.intra.izecom.com ([])
      by uffizi.intra.izecom.com (JAMES SMTP Server 2.1.3) with SMTP
      ID 302
      for <hes@secure.izemail.com>;
      Thu, 15 Jan 2004 12:02:19 +0100 (CET)
      From: "Brinkers" <testuser@example.com>
      To: <testuser@example.com>
      Subject: Test Mail
      Date: Tue, 9 Dec 2003 22:36:33 -0500


      It seems that new headers are created and the original headers start with after a blank line, causing them to be interpreted as a message body.

      In Outlook, this is displayed as a message without Subject or From field, where the message body starts with the 'another_testuser@example.com' followed by the original headers.

      Now putting the Return-Path twice in your headers is probably not a good idea, but we do happen to have some emails that have that in our test set and would like to process them in a reasonable way.

      So we investigated the James source code trying to find the cause for this unexpected behavior.

      In org.apache.james.smtpserver.SMTPHandler in the method
      processMailHeaders() we found the following call to retrieve the Return-Path header.

      // Determine the Return-Path
      String returnPath =

      This roughly means "Give me all Return-Path headers separated by line breaks.". Later on, this returnPath String is put on top of all headers.
      We deduced that if there is more than one Return-Path header, this will result in something like

      Return-Path: testuser@example.com
      From: "Brinkers" <testuser@example.com>
      To: <testuser@example.com>
      Subject: Return-Path mail
      Date: Tue, 9 Dec 2003 22:36:33 -0500


      where that the second line ('another_testuser@example.com') is interpreted as the start of the message body later on, causing new headers to be invented and the old headers to dispappear on the message body.

      We changed the call to get the getHeader() in processMailHeaders() to pass a null argument:

      // Determine the Return-Path
      String returnPath =
      headers.getHeader(RFC2822Headers.RETURN_PATH, null);

      which roughly means "Give only one Return-Path header".

      After recompiling and deploying James, our test mails passed James correctly.

      We would appreciate it if this fix, or a similar one, could be included in the next James release.

      Thank you

      Hes Siemelink
      Izecom BV




            • Assignee:
              noel Noel J. Bergman
              hes Hes Siemelink
            • Votes:
              0 Vote for this issue
              0 Start watching this issue


              • Created: