Mail sending through gmail in Mule Flow

157 Views Asked by At

I am struggling with mail sending flow in mule, Getting below error:

Failed to route event via endpoint: DefaultOutboundEndpoint{endpointUri=smtps://dummy.DevGroup:<password>@smtp.gmail.com, connector=SmtpsConnector

I have below configuration in my xml file (Updated with namespace declarations in the Mule XML):

<mule
    xmlns="http://www.mulesoft.org/schema/mule/core"
    xmlns:twilio="http://www.mulesoft.org/schema/mule/twilio" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:spring="http://www.springframework.org/schema/beans"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:stdio="http://www.mulesoft.org/schema/mule/stdio"
    xmlns:vm="http://www.mulesoft.org/schema/mule/vm"
    xmlns:file="http://www.mulesoft.org/schema/mule/file"
    xmlns:cxf="http://www.mulesoft.org/schema/mule/cxf"
    xmlns:jms="http://www.mulesoft.org/schema/mule/jms"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xmlns:smtp="http://www.mulesoft.org/schema/mule/smtp"
    xmlns:smtps="http://www.mulesoft.org/schema/mule/smtps"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
        http://www.mulesoft.org/schema/mule/stdio http://www.mulesoft.org/schema/mule/stdio/current/mule-stdio.xsd
        http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd
        http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
        http://www.mulesoft.org/schema/mule/cxf http://www.mulesoft.org/schema/mule/cxf/current/mule-cxf.xsd
        http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd
        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
        http://www.mulesoft.org/schema/mule/smtp http://www.mulesoft.org/schema/mule/smtp/3.3/mule-smtp.xsd
        http://www.mulesoft.org/schema/mule/smtps http://www.mulesoft.org/schema/mule/smtps/current/mule-smtps.xsd
        http://www.mulesoft.org/schema/mule/twilio http://www.mulesoft.org/schema/mule/twilio/1.0/mule-twilio.xsd">


     <service name="tool.muleservice.emailServiceintegration">
              <inbound>
                    <inbound-endpoint ref="tool.endpoint.emailNotification"/>
              </inbound>
              <outbound>
                <pass-through-router>
                   <outbound-endpoint ref="tool.smtp.endpoint.emailNotification"/>
                </pass-through-router>                              
              </outbound> 
                     
    </service> 
    
    <smtps:endpoint name="tool.smtp.endpoint.emailNotification"                                                           
                          user="#[message.inboundProperties['userName']]"
                          password="#[message.inboundProperties['password']]"
                          host="smtp.gmail.com" 
                          port="465"    
                          from="dummy.DevGroup%40gmail.com"                           
                          transformer-refs="customEmailTransformer"
                          connector-ref="myTSLSMTPConnnector">
    </smtps:endpoint>

    <smtps:connector name="myTSLSMTPConnnector">
        <smtps:tls-client path="../cacerts" storePassword="changeit" />
        <smtps:tls-trust-store path="../cacerts" storePassword="changeit" />
    </smtps:connector>

I updated the xml file as below content, to use smtp-gmail-connector given here

<service name="tool.muleservice.emailServiceintegration">
    <inbound>
        <inbound-endpoint
            ref="tool.endpoint.emailNotification" />
    </inbound>
    <outbound>
        <pass-through-router>
            <!-- <outbound-endpoint ref="tool.smtp.endpoint.emailNotification"/> -->
            <smtp:outbound-endpoint connector-ref="smtpGmailConnector"
                 subject="test msg"
                address="smtps://#[message.inboundProperties['userName']]:#[message.inboundProperties['password']]@smtp.gmail.com"
                responseTimeout="10000" doc:name="Send notification email" />
        </pass-through-router>
    </outbound>

</service> 
<smtp:gmail-connector name="smtpGmailConnector"
    contentType="text/html" fromAddress="[email protected]"
    replyToAddresses="[email protected]" >
    <smtp:header key="foo" value="bar" />
    <smtp:header key="baz" value="boz" />
</smtp:gmail-connector>

But after this I am getting below error:

 Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [classpath*:/myApp-component-config/component-config.xml]
Offending resource: mule-bootstrap-config.xml; nested exception is org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [classpath*:/myApp-integration-config/tool-mule-bootstrap-config.xml]
Offending resource: URL [vfs:/D:/Software/JBoss/jboss-eap-7.2/standalone/deployments/myApp.war/WEB-INF/lib/tool-intrg.jar/myApp-component-config/component-config.xml]; nested exception is org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [classpath*:/myApp-integration-config/tool-intrg-flows.xml]
Offending resource: URL [vfs:/D:/Software/JBoss/jboss-eap-7.2/standalone/deployments/myApp.war/WEB-INF/lib/tool-intrg.jar/myApp-integration-config/tool-mule-bootstrap-config.xml]; nested exception is org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 91 in XML document from URL [vfs:/D:/Software/JBoss/jboss-eap-7.2/standalone/deployments/myApp.war/WEB-INF/lib/tool-intrg.jar/myApp-integration-config/tool-intrg-flows.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 91; columnNumber: 67; The prefix "doc" for attribute "doc:name" associated with an element type "smtp:outbound-endpoint" is not bound.
    at deployment.myApp.war//org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:70)
    at deployment.myApp.war//org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
    at deployment.myApp.war//org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76)
    at deployment.myApp.war//org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:235)

Any help will be appreciated.

1

There are 1 best solutions below

0
aled On

There are many details missing however on rereading the issue I suspect you are not following the deprecated syntax <service> correctly by trying to use a current example. Since that syntax has been deprecated for 6+ years, I would advice to move to the more current <flow> definitions.

In case you are unable or unwilling to migrate, you need to define an endpoint outside the service and reference it you could try the following steps:

  1. Ensure that the namespaces at the beginning of the file are correct. The error mentions that doc: is not recognized. Maybe the namespaces are outdated.
  2. Ensure that the dependencies in the pom reference your Mule 3.9.x release and not an older version that may not define doc.
  3. Try moving <smtp:outbound-endpoint> to a separate endpoint definition and reference it from the <pass-through-router> as in your original implementation.

Example:

 <service name="tool.muleservice.emailServiceintegration">
              <inbound>
                    <inbound-endpoint ref="tool.endpoint.emailNotification"/>
              </inbound>
              <outbound>
                <pass-through-router>
                   <outbound-endpoint ref="tool.smtp.endpoint.gmailNotification"/>
                </pass-through-router>                              
              </outbound> 
                     
    </service> 
    
    <smtps:endpoint name="tool.smtp.endpoint.gmailNotification"                                                           
                         connector-ref="smtpGmailConnector"
                 subject="test msg"
                address="smtps://#[message.inboundProperties['userName']]:#[message.inboundProperties['password']]@smtp.gmail.com"
                responseTimeout="10000" doc:name="Send notification email" >
    </smtps:endpoint>


<smtp:gmail-connector name="smtpGmailConnector"
    contentType="text/html" fromAddress="[email protected]"
    replyToAddresses="[email protected]" >
    <smtp:header key="foo" value="bar" />
    <smtp:header key="baz" value="boz" />
</smtp:gmail-connector>

Finally if everything else fails you could try removing the doc:name attribute and see what happens.