The code below does what you want, and does it in the correct way. Reread what you yourself posted in the comment
From: RFC2821: 4.4 Trace Information
When the delivery SMTP server makes
the "final delivery" of a message, it
inserts a return-path line at the
beginning of the mail data. This use
of return-path is required; mail
systems MUST support it. The
return-path line preserves the
information in the
from the MAIL command. Here, final
delivery means the message has left
the SMTP environment. Normally, this
would mean it had been delivered to
the destination user or an associated
mail drop, but in some cases it may be
further processed and transmitted by
another mail system.
and a few lines later.
A message-originating SMTP system
SHOULD NOT send a message that already
contains a Return-path header.
If you carefully read this you will understand that only the final smtp-server/delivery agent is supposed to add the Return-Path
header. It is not something you as client (trying to send a mail) should do. The final smtp-server will base the Return-Path
header on the sender address of the envelope (SMTP MAIL FROM
part).
So setting mail.smtp.from
is the correct way to tell java that the envelope sender address should be different from the from
part.
If you have troubles understanding what the different from
s are just take a look at a telnet smtp-session. Where replyto@example.com
should correspond to mail.smtp.from
and from@example.com
to m.addFrom(...);
telnet smtp.example.com 25
220 smtp.example.com ESMTP .....
helo computername
250 smtp.example.com Hello computername [123.123.123.123]
mail from:<replyto@example.com>
250 <replyto@example.com> is syntactically correct
rcpt to:<rcpt@foo.com>
250 <rcpt@foo.com> verified
data
354 Enter message, ending with "." on a line by itself
To: Joey <to@joey.com>
From: Joey <from@example.com>
Subject: Joey
Hey Joey!
.
250 OK id=....
Quit
props.put("mail.smtp.from", "replyto@example.com");
Session session = Session.getDefaultInstance(props, null);
MimeMessage m = new MimeMessage(session);
m.addFrom(InternetAddress.parse("from@example.com"));