Lars Heinemann пишет:
Ivan,

I would also suggest you post your endpoint config for the mail sender here so I can have a look at it.

Hi Lars!

Here is my xbean.xml of mail sender.


        <mail:sender service="my:mailSenderService"
                 endpoint="senderEndpoint"
                 debugMode="true"
                 connection="#connection"
                  />

<bean id="connection" class="java.lang.String">
<constructor-arg> <value>smtps://[EMAIL PROTECTED]</value>
          </constructor-arg>
        </bean>   


Truly yours,
Ivan Pryvalov.


Regards
Lars



Am Montag 13 Oktober 2008 17:23:01 schrieb ivan:
Hi Lars!

My code looks like :

<<< SomeClass implements MessageExchangeListener;

ServiceMixClient client = new ServiceMixClientFacade(context);
EndpointResolver tmpER = client.createResolverForService(destQname);
InOnly io = client.createInOnlyExchange(tmpER);
NormalizedMessage msg = io.getInMessage();
msg.setProperty(MSG_TAG_XXXX, YYYY);
...
client.send(io);




What is principal difference between my code and yours?

Thanks,
Truly yours,
Ivan Pryvalov.

Lars Heinemann пишет:
Ivan,

it should work if you put the property to the normalized message...

For example:

MessageExchange me = ....;
NormalizedMessage nmsg = me.createMessage();

nmsg.setProperty(AbstractMailMarshaler.MSG_TAG_FROM,
"[EMAIL PROTECTED]");

me.setMessage(nmsg, "in");
getChannel().send(me);

The property has to be set on the In-Message...not on the message
exchange.

Regards
Lars

Am Montag 13 Oktober 2008 16:48:33 schrieb ivan:
Hi Lars!

Ok, I just tried to set sender via NM, but I can not do it.

<<<
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


I wanted to set tag "From" via second way. But it my tests it didn't
work. I back to first way :)


Truly yours,
Ivan Pryvalov.

Lars Heinemann пишет:
Ivan,

I don't understand your question?

Looking at the code...

if (this.sender == null) {
    this.sender = this.marshaler != null
                ? this.marshaler.getDefaultSenderForOutgoingMails() :
AbstractMailMarshaler.DEFAULT_SENDER;
        }

Given the situation, a marshaler returns NULL on method
getDefaultSenderForOutgoingMails() you would run into a NPE without
this check. So this check is absolute needed here.

Regards
Lars

Am Montag 13 Oktober 2008 12:56:41 schrieb ivan:
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_
FR OM ) .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