[ 
https://issues.apache.org/activemq/browse/CAMEL-1028?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

David Peterson updated CAMEL-1028:
----------------------------------

    Description: 
Don't require a login in the send mail URI because internal relay mail servers 
don't require them.  If you do include one, the mail server gets confused and 
thinks that you are looping and it will bounce the email so this is a bit 
inconvenient bug.

Thread [Thread: 1 [EMAIL PROTECTED] (Suspended (exception 
NullPointerException))        
        Properties(Hashtable<K,V>).put(K, V) line: 394  
        MailConfiguration.createJavaMailProperties() line: 146  
        MailConfiguration.createJavaMailSender() line: 107      
        MailEndpoint.createProducer() line: 53  
        ProducerCache<E>.getProducer(Endpoint<E>) line: 50      
        ProducerCache<E>.send(Endpoint<E>, Processor) line: 84  
        DefaultProducerTemplate<E>.send(Endpoint<E>, Processor) line: 84        
        DefaultProducerTemplate<E>.sendBodyAndHeaders(Endpoint, Object, 
Map<String,Object>) line: 143   
        DefaultProducerTemplate<E>.sendBodyAndHeaders(String, Object, 
Map<String,Object>) line: 139     
        LogEmailThrowsAdvice.sendEmail(String) line: 64 
        LogEmailThrowsAdvice.afterThrowing(Method, Object[], Object, Exception) 
line: 42        
        NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not 
available [native method]  
        NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39      
        DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25  
        Method.invoke(Object, Object...) line: 597      
        ThrowsAdviceInterceptor.invokeHandlerMethod(MethodInvocation, 
Throwable, Method) line: 146      
        ThrowsAdviceInterceptor.invoke(MethodInvocation) line: 131      
        ReflectiveMethodInvocation.proceed() line: 171  
        JdkDynamicAopProxy.invoke(Object, Method, Object[]) line: 204   
        $Proxy24.process(Exchange) line: not available  
        BeanProcessor.process(Exchange) line: 81        
        BeanEndpoint(ProcessorEndpoint).onExchange(Exchange) line: 92   
        ProcessorEndpoint$1.process(Exchange) line: 66  
        
AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(Exchange, 
AsyncCallback) line: 43   
        SendProcessor.process(Exchange, AsyncCallback) line: 75 
        InstrumentationProcessor.process(Exchange, AsyncCallback) line: 57      
        DeadLetterChannel.process(Exchange, AsyncCallback, 
DeadLetterChannel$RedeliveryData) line: 155  
        DeadLetterChannel.process(Exchange, AsyncCallback) line: 91     
        InstrumentationProcessor.process(Exchange, AsyncCallback) line: 57      
        UnitOfWorkProcessor.process(Exchange, AsyncCallback) line: 39   
        AsyncProcessorHelper.process(AsyncProcessor, Exchange) line: 41 
        UnitOfWorkProcessor(DelegateAsyncProcessor).process(Exchange) line: 66  
        MailConsumer.processMessage(Message) line: 169  
        MailConsumer.processMessages(Message[]) line: 151       
        MailConsumer.poll() line: 105   
        MailConsumer(ScheduledPollConsumer<E>).run() line: 65   
        Executors$RunnableAdapter<T>.call() line: 441   
        FutureTask$Sync.innerRunAndReset() line: 317    
        
ScheduledThreadPoolExecutor$ScheduledFutureTask<V>(FutureTask<V>).runAndReset() 
line: 150       
        
ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.access$101(ScheduledThreadPoolExecutor$ScheduledFutureTask)
 line: 98 
        ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.runPeriodic() line: 
181      
        ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.run() line: 205      
        ThreadPoolExecutor$Worker.runTask(Runnable) line: 885   
        ThreadPoolExecutor$Worker.run() line: 907       
        Thread.run() line: 619  


Code:
AOPExceptionHandler:
        private void sendEmail(String errors) {
                template = camelContext.createProducerTemplate();
                StringBuffer body = new StringBuffer("Hello Techops.\n");
                body.append("Got an exception please handle.\n\nRegards 
Reportdev.\n\n");
                body.append(errors);
                template.sendBodyAndHeaders(emailServerUri, body, 
emailProperties);
        }

applicationContext.xml
<bean id="logThrowsAdvice" class="com.contextweb.advice.LogEmailThrowsAdvice">
                <property name="camelContext" ref="camel" />
                <property name="sendMail" value="true" />
                <!-- username=reportdev&amp;[EMAIL PROTECTED] -->
                <property name="emailServerUri"
                        value="smtp://mail.apache.corp" />
                <property name="emailProperties">
                        <map>
                                <entry key="From">
                                        <value>"[EMAIL PROTECTED]"</value>
                                </entry>
                                <entry key="Subject">
                                        <value>"Exception in 3rd Party 
Reporting Email
                                                Processing"</value>
                                </entry>
                                <entry key="To">
                                        <value>"[EMAIL PROTECTED]"</value>
                                </entry>
                        </map>
                </property>
                <property name="logFactory" ref="LogFactoryBean" />
        </bean>

Workaround is to use URI for "To" and put the username after the ? in the URI.  
This will fool the mail relay server into routing the email bypassing it's loop 
detection logic:
        <!-- Define the ThrowsAdvice bean -->
        <bean id="logThrowsAdvice" 
class="com.contextweb.advice.LogEmailThrowsAdvice">
                <property name="camelContext" ref="camel" />
                <property name="sendMail" value="true" />
                <property name="emailServerUri"
                        
value="smtp://mail.contextweb.corp?username=reportdev&amp;[EMAIL PROTECTED]" />
                <property name="emailProperties">
                        <map>
                                <entry key="From">
                                        <value>"[EMAIL PROTECTED]"</value>
                                </entry>
                                <entry key="Subject">
                                        <value>"Exception in 3rd Party 
Reporting Email
                                                Processing"</value>
                                </entry>
                        </map>
                </property>
                <property name="logFactory" ref="LogFactoryBean" />
        </bean>

  was:
Don't require a login in the send mail URI because internal relay mail servers 
don't require them.  If you do include one, the mail server gets confused and 
thinks that you are looping and it will bounce the email so this is a bit 
inconvenient bug.

e       RuntimeCamelException  (id=212) 
        cause   FailedToCreateProducerException  (id=215)       
        detailMessage   "org.apache.camel.FailedToCreateProducerException: 
Failed to create Producer for endpoint: Endpoint[smtp://mail.contextweb.corp]. 
Reason: java.lang.NullPointerException" (id=217)      
        stackTrace      null    


Stack Trace:
Thread [Thread: 1 [EMAIL PROTECTED] (Suspended) 
        
AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(Exchange, 
AsyncCallback) line: 45   
        SendProcessor.process(Exchange, AsyncCallback) line: 75 
        InstrumentationProcessor.process(Exchange, AsyncCallback) line: 57      
        DeadLetterChannel.process(Exchange, AsyncCallback, 
DeadLetterChannel$RedeliveryData) line: 155  
        DeadLetterChannel.process(Exchange, AsyncCallback) line: 91     
        InstrumentationProcessor.process(Exchange, AsyncCallback) line: 57      
        UnitOfWorkProcessor.process(Exchange, AsyncCallback) line: 39   
        AsyncProcessorHelper.process(AsyncProcessor, Exchange) line: 41 
        UnitOfWorkProcessor(DelegateAsyncProcessor).process(Exchange) line: 66  
        MailConsumer.processMessage(Message) line: 169  
        MailConsumer.processMessages(Message[]) line: 151       
        MailConsumer.poll() line: 105   
        MailConsumer(ScheduledPollConsumer<E>).run() line: 65   
        Executors$RunnableAdapter<T>.call() line: 441   
        FutureTask$Sync.innerRunAndReset() line: 317    
        
ScheduledThreadPoolExecutor$ScheduledFutureTask<V>(FutureTask<V>).runAndReset() 
line: 150       
        
ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.access$101(ScheduledThreadPoolExecutor$ScheduledFutureTask)
 line: 98 
        ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.runPeriodic() line: 
181      
        ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.run() line: 205      
        ThreadPoolExecutor$Worker.runTask(Runnable) line: 885   
        ThreadPoolExecutor$Worker.run() line: 907       
        Thread.run() line: 619  

Code:
AOPExceptionHandler:
        private void sendEmail(String errors) {
                template = camelContext.createProducerTemplate();
                StringBuffer body = new StringBuffer("Hello Techops.\n");
                body.append("Got an exception please handle.\n\nRegards 
Reportdev.\n\n");
                body.append(errors);
                template.sendBodyAndHeaders(emailServerUri, body, 
emailProperties);
        }

applicationContext.xml
<bean id="logThrowsAdvice" class="com.contextweb.advice.LogEmailThrowsAdvice">
                <property name="camelContext" ref="camel" />
                <property name="sendMail" value="true" />
                <!-- username=reportdev&amp;[EMAIL PROTECTED] -->
                <property name="emailServerUri"
                        value="smtp://mail.apache.corp" />
                <property name="emailProperties">
                        <map>
                                <entry key="From">
                                        <value>"[EMAIL PROTECTED]"</value>
                                </entry>
                                <entry key="Subject">
                                        <value>"Exception in 3rd Party 
Reporting Email
                                                Processing"</value>
                                </entry>
                                <entry key="To">
                                        <value>"[EMAIL PROTECTED]"</value>
                                </entry>
                        </map>
                </property>
                <property name="logFactory" ref="LogFactoryBean" />
        </bean>

Workaround is to use URI for "To" and put the username after the ? in the URI.  
This will fool the mail relay server into routing the email bypassing it's loop 
detection logic:
        <!-- Define the ThrowsAdvice bean -->
        <bean id="logThrowsAdvice" 
class="com.contextweb.advice.LogEmailThrowsAdvice">
                <property name="camelContext" ref="camel" />
                <property name="sendMail" value="true" />
                <property name="emailServerUri"
                        
value="smtp://mail.contextweb.corp?username=reportdev&amp;[EMAIL PROTECTED]" />
                <property name="emailProperties">
                        <map>
                                <entry key="From">
                                        <value>"[EMAIL PROTECTED]"</value>
                                </entry>
                                <entry key="Subject">
                                        <value>"Exception in 3rd Party 
Reporting Email
                                                Processing"</value>
                                </entry>
                        </map>
                </property>
                <property name="logFactory" ref="LogFactoryBean" />
        </bean>


Changed eclipse to catch the actual NullPointerException so replacing the stack 
trace w/ a better one.

> Don't require username on send mail routes (relays don't require login)
> -----------------------------------------------------------------------
>
>                 Key: CAMEL-1028
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1028
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-mail
>    Affects Versions: 1.4.0
>            Reporter: David Peterson
>
> Don't require a login in the send mail URI because internal relay mail 
> servers don't require them.  If you do include one, the mail server gets 
> confused and thinks that you are looping and it will bounce the email so this 
> is a bit inconvenient bug.
> Thread [Thread: 1 [EMAIL PROTECTED] (Suspended (exception 
> NullPointerException))      
>       Properties(Hashtable<K,V>).put(K, V) line: 394  
>       MailConfiguration.createJavaMailProperties() line: 146  
>       MailConfiguration.createJavaMailSender() line: 107      
>       MailEndpoint.createProducer() line: 53  
>       ProducerCache<E>.getProducer(Endpoint<E>) line: 50      
>       ProducerCache<E>.send(Endpoint<E>, Processor) line: 84  
>       DefaultProducerTemplate<E>.send(Endpoint<E>, Processor) line: 84        
>       DefaultProducerTemplate<E>.sendBodyAndHeaders(Endpoint, Object, 
> Map<String,Object>) line: 143   
>       DefaultProducerTemplate<E>.sendBodyAndHeaders(String, Object, 
> Map<String,Object>) line: 139     
>       LogEmailThrowsAdvice.sendEmail(String) line: 64 
>       LogEmailThrowsAdvice.afterThrowing(Method, Object[], Object, Exception) 
> line: 42        
>       NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not 
> available [native method]  
>       NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39      
>       DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25  
>       Method.invoke(Object, Object...) line: 597      
>       ThrowsAdviceInterceptor.invokeHandlerMethod(MethodInvocation, 
> Throwable, Method) line: 146      
>       ThrowsAdviceInterceptor.invoke(MethodInvocation) line: 131      
>       ReflectiveMethodInvocation.proceed() line: 171  
>       JdkDynamicAopProxy.invoke(Object, Method, Object[]) line: 204   
>       $Proxy24.process(Exchange) line: not available  
>       BeanProcessor.process(Exchange) line: 81        
>       BeanEndpoint(ProcessorEndpoint).onExchange(Exchange) line: 92   
>       ProcessorEndpoint$1.process(Exchange) line: 66  
>       
> AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(Exchange, 
> AsyncCallback) line: 43   
>       SendProcessor.process(Exchange, AsyncCallback) line: 75 
>       InstrumentationProcessor.process(Exchange, AsyncCallback) line: 57      
>       DeadLetterChannel.process(Exchange, AsyncCallback, 
> DeadLetterChannel$RedeliveryData) line: 155  
>       DeadLetterChannel.process(Exchange, AsyncCallback) line: 91     
>       InstrumentationProcessor.process(Exchange, AsyncCallback) line: 57      
>       UnitOfWorkProcessor.process(Exchange, AsyncCallback) line: 39   
>       AsyncProcessorHelper.process(AsyncProcessor, Exchange) line: 41 
>       UnitOfWorkProcessor(DelegateAsyncProcessor).process(Exchange) line: 66  
>       MailConsumer.processMessage(Message) line: 169  
>       MailConsumer.processMessages(Message[]) line: 151       
>       MailConsumer.poll() line: 105   
>       MailConsumer(ScheduledPollConsumer<E>).run() line: 65   
>       Executors$RunnableAdapter<T>.call() line: 441   
>       FutureTask$Sync.innerRunAndReset() line: 317    
>       
> ScheduledThreadPoolExecutor$ScheduledFutureTask<V>(FutureTask<V>).runAndReset()
>  line: 150       
>       
> ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.access$101(ScheduledThreadPoolExecutor$ScheduledFutureTask)
>  line: 98 
>       ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.runPeriodic() line: 
> 181      
>       ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.run() line: 205      
>       ThreadPoolExecutor$Worker.runTask(Runnable) line: 885   
>       ThreadPoolExecutor$Worker.run() line: 907       
>       Thread.run() line: 619  
> Code:
> AOPExceptionHandler:
>       private void sendEmail(String errors) {
>               template = camelContext.createProducerTemplate();
>               StringBuffer body = new StringBuffer("Hello Techops.\n");
>               body.append("Got an exception please handle.\n\nRegards 
> Reportdev.\n\n");
>               body.append(errors);
>               template.sendBodyAndHeaders(emailServerUri, body, 
> emailProperties);
>       }
> applicationContext.xml
> <bean id="logThrowsAdvice" class="com.contextweb.advice.LogEmailThrowsAdvice">
>               <property name="camelContext" ref="camel" />
>               <property name="sendMail" value="true" />
>               <!-- username=reportdev&amp;[EMAIL PROTECTED] -->
>               <property name="emailServerUri"
>                       value="smtp://mail.apache.corp" />
>               <property name="emailProperties">
>                       <map>
>                               <entry key="From">
>                                       <value>"[EMAIL PROTECTED]"</value>
>                               </entry>
>                               <entry key="Subject">
>                                       <value>"Exception in 3rd Party 
> Reporting Email
>                                               Processing"</value>
>                               </entry>
>                               <entry key="To">
>                                       <value>"[EMAIL PROTECTED]"</value>
>                               </entry>
>                       </map>
>               </property>
>               <property name="logFactory" ref="LogFactoryBean" />
>       </bean>
> Workaround is to use URI for "To" and put the username after the ? in the 
> URI.  This will fool the mail relay server into routing the email bypassing 
> it's loop detection logic:
>       <!-- Define the ThrowsAdvice bean -->
>       <bean id="logThrowsAdvice" 
> class="com.contextweb.advice.LogEmailThrowsAdvice">
>               <property name="camelContext" ref="camel" />
>               <property name="sendMail" value="true" />
>               <property name="emailServerUri"
>                       
> value="smtp://mail.contextweb.corp?username=reportdev&amp;[EMAIL PROTECTED]" 
> />
>               <property name="emailProperties">
>                       <map>
>                               <entry key="From">
>                                       <value>"[EMAIL PROTECTED]"</value>
>                               </entry>
>                               <entry key="Subject">
>                                       <value>"Exception in 3rd Party 
> Reporting Email
>                                               Processing"</value>
>                               </entry>
>                       </map>
>               </property>
>               <property name="logFactory" ref="LogFactoryBean" />
>       </bean>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to