Skip to main content
Level 2
Oct 16, 2015 2:27 AM UTC
Solved

Sending Email By AEM

Hi,

I have a requirement for sending a Mail from AEM using email templates. I have to hit a aem servlet from external server with required parameters and then construct the email and using aem mail templates and cq mail service shoot the mail. Could anyone please help me with it.

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
narayanank84409
narayanank84409Accepted solution
Level 4
Oct 16, 2015 2:27 AM UTC

Try to use HtmlEmail.class .

I hope this code will help you.

    MessageGateway<HtmlEmail> messageGateway = messageGatewayService.getGateway(HtmlEmail.class);
                HtmlEmail email = new HtmlEmail();
                email = mailTemplate.getEmail(StrLookup.mapLookup(emailProperties), HtmlEmail.class);
                List<InternetAddress> emailRecipients = new ArrayList<InternetAddress>();
                emailRecipients.add(new InternetAddress(request.getParameter("email")));
                email.setTo(emailRecipients);
                messageGateway.send(email);

13 replies

narayanank84409
Level 4
Oct 16, 2015 2:27 AM UTC

tushark60575350 wrote...

What is the "emailProperties" , is it a MAP containing all the params. Also I have used HtmlEmail.class, still it gives the same error

 

 

Yes, it's my map parameters.

I got values from Front end.

Translate
Level 2
Oct 16, 2015 2:27 AM UTC

What is the "emailProperties" , is it a MAP containing all the params. Also I have used HtmlEmail.class, still it gives the same error

Translate
Level 2
Oct 16, 2015 2:27 AM UTC

I am using this URL for the package

https://github.com/Adobe-Consulting-Services/acs-aem-commons

Translate
Level 2
Oct 16, 2015 2:27 AM UTC

No I didn't take this package, in my package it had all the java code for sending email

Translate
narayanank84409
narayanank84409Accepted solution
Level 4
Oct 16, 2015 2:27 AM UTC

Try to use HtmlEmail.class .

I hope this code will help you.

    MessageGateway<HtmlEmail> messageGateway = messageGatewayService.getGateway(HtmlEmail.class);
                HtmlEmail email = new HtmlEmail();
                email = mailTemplate.getEmail(StrLookup.mapLookup(emailProperties), HtmlEmail.class);
                List<InternetAddress> emailRecipients = new ArrayList<InternetAddress>();
                emailRecipients.add(new InternetAddress(request.getParameter("email")));
                email.setTo(emailRecipients);
                messageGateway.send(email);

Translate
Level 8
Oct 16, 2015 2:27 AM UTC

Did you install the ACS Commons package from here

Translate
Level 2
Oct 16, 2015 2:27 AM UTC

Yes I am following that, as it matched my requirement of sending a mail using a template.

Translate
smacdonald2008
Level 10
Oct 16, 2015 2:27 AM UTC
Level 2
Oct 16, 2015 2:27 AM UTC

In that i am having issue in the line

Email email = mailTemplate.getEmail(StrLookup.mapLookup(emailParams), emailClass);

 

I am getting

 

27.07.2015 18:56:08.227 *ERROR* [127.0.0.1 [1438003568172] GET /bin/servlet/mailservlet HTTP/1.1] org.apache.sling.engine.impl.SlingRequestProcessorImpl service: Uncaught Throwable
java.lang.LinkageError: loader constraint violation: when resolving method "com.day.cq.commons.mail.MailTemplate.getEmail(Lorg/apache/commons/lang/text/StrLookup;Ljava/lang/Class;)Lorg/apache/commons/mail/Email;" the class loader (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) of the current class, com/aircanada/aem/email/impl/EmailServiceImpl, and the class loader (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) for resolved class, com/day/cq/commons/mail/MailTemplate, have different Class objects for the type s/lang/text/StrLookup;Ljava/lang/Class;)Lorg/apache/commons/mail/Email; used in the signature
    at com.aircanada.aem.email.impl.EmailServiceImpl.getEmail(EmailServiceImpl.java:152)
    at com.aircanada.aem.email.impl.EmailServiceImpl.sendEmail(EmailServiceImpl.java:109)
    at com.aircanada.aem.email.impl.EmailServiceImpl.sendEmail(EmailServiceImpl.java:86)
    at com.aircanada.aem.email.EmailSevlet.doGet(EmailSevlet.java:66)
    error

Please help me with that.

Thanks,

Tushar

Translate
smacdonald2008
Level 10
Oct 16, 2015 2:27 AM UTC

Create a custom sling servlet to handle the HTTP POST/GET operation. For information on creating sling servlets for AEM - see: 

https://helpx.adobe.com/experience-manager/using/custom-sling-servlets.html

See this older community thread for details on email/templates: 

Sending email with CQ

Translate