[ 
https://issues.apache.org/activemq/browse/CAMEL-1028?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=46851#action_46851
 ] 

Claus Ibsen commented on CAMEL-1028:
------------------------------------

David I think this one is fixed in Camel 1.5.

Can you try with 1.5-SNAPSHOT? 

> 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