Hi Lars!

All shown code has check on Null:

<<<
if (from != null) {
  mimeMessage.setFrom(from);
}
>>>


As far as I understood, anyway "from" is set either from "this.sender" or "this.marshaler.getDefaultSenderForOutgoingMails()".
So, we can not get situation (from==null). It is correct?

Ivan Pryvalov.


Lars Heinemann пишет:
Ivan,

you only look at one aspect of the logic.
Please have a look at the DefaultMailMarshaler class.

protected void fillMailHeaders(MimeMessage mimeMessage, MessageExchange exchange, NormalizedMessage nmsg, String configuredSender, String configuredReceiver)
        throws Exception {

        ...

        // fill the "From" field of the mail
        if (configuredSender != null && configuredSender.trim().length() > 0) {
            // if sender is configured through xbean then use it
            Address from = InternetAddress.parse(configuredSender)[0];
            if (from != null) {
                mimeMessage.setFrom(from);
            }
} else if (nmsg.getProperty(AbstractMailMarshaler.MSG_TAG_FROM) != null) {
            // use the delivered From field from the message
Address from = InternetAddress.parse(nmsg.getProperty(AbstractMailMarshaler.MSG_TAG_FROM)
                .toString())[0];
            if (from != null) {
                mimeMessage.setFrom(from);
            }
        } else {
            // there was no From field delivered, so use the default sender
Address from = InternetAddress.parse(getDefaultSenderForOutgoingMails())[0];
            if (from != null) {
                mimeMessage.setFrom(from);
            }
        }
...


I hope this makes it more clear to you. If you write your own marshaler, then you are also responsible for filling the mail properties correctly. When using the default marshaler, all should work fine if you did it correct.

Regards
Lars








Am Freitag 10 Oktober 2008 15:30:05 schrieb ivan:
Hi!

I read at http://servicemix.apache.org/servicemix-mail.html:

<<<
How is the sender determined?

if there is a preconfigured sender for the endpoint from xbean.xml, it
will be used
else if MSG_TAG_FROM is defined in the message properties, then it will
be used
else the method getDefaultSender() of the marshaler is invoked



Also I looked at the source (I downloaded it some month ago from
3.3-SNAPSHOT):

<<< MailSenderEndpoint.java

     public void validate() throws DeploymentException {
         super.validate();

         if (this.config == null || this.connection == null) {
             throw new DeploymentException("No valid connection uri
provided.");
         }
         if (this.sender == null) {
             this.sender = this.marshaler != null
                 ? this.marshaler.getDefaultSenderForOutgoingMails() :
AbstractMailMarshaler.DEFAULT_SENDER;
         }
     }



So, it seems, there is no way to configure "sender" header for e-mail
via MSG_TAG_FROM.

Am I right? Or maybe it is already fixed?

Truly yours,
Ivan Pryvalov.



Reply via email to