AEM provides OOTB email templates to send emails for workflow notification, completion, etc.
But those templates are plain text and cannot provide rich UI and limited to few dynamic properties.
Example - OOTB workflow notification email template contains plain text and other variables like an event, workitem, user, host properties, etc.
More info about Email Templates for Workflow Notification at https://helpx.adobe.com/experience-manager/6-3/sites/administering/using/notification.html#ConfiguringtheWorkflowEmailNotificationService
Add Below dependencies in POM. or check dependencies using dependency finder at http://localhost:4504/system/console/depfinder
Create a utility class, In this class inject MessageGatewayService service using Reference annotation and Create a map with all the dynamic properties.
e.g.
@Reference
private MessageGatewayService messageGatewayService;
final Map<String, String> parameters = new HashMap<String, String>();
parameters.put("title", "Demo Email");
Create org.apache.commons.mail.HtmlEmail class object with template and map parameters.
HtmlEmail email = mailTemplate.getEmail(StrLookup.mapLookup(parameters), HtmlEmail.class);
Find the below Servlet Example for complete code -
https://github.com/arunpatidar02/aem63app-repo/blob/master/java/email/HTMLEmailServlet.java
All the variable values can be replaced with properties set in the code e.g. ${title}
Example template available at
https://github.com/arunpatidar02/aem63app-repo/blob/master/java/email/html5-template.txt
https://helpx.adobe.com/experience-manager/6-3/sites/administering/using/notification.html#configmail
That’s it. Find the sample email trigger by https://github.com/arunpatidar02/aem63app-repo/blob/master/java/email/HTMLEmailServlet.java servlet.
But those templates are plain text and cannot provide rich UI and limited to few dynamic properties.
Example - OOTB workflow notification email template contains plain text and other variables like an event, workitem, user, host properties, etc.
More info about Email Templates for Workflow Notification at https://helpx.adobe.com/experience-manager/6-3/sites/administering/using/notification.html#ConfiguringtheWorkflowEmailNotificationService
Custom Email
Custom Email Service/Servlet/Process Step:
You can create a utility/Servlet/workflow Process, whichever trigger the email and use com.day.cq.mailer.MessageGatewayService to send template based email.Add Below dependencies in POM. or check dependencies using dependency finder at http://localhost:4504/system/console/depfinder
Pom dependencies |
e.g.
@Reference
private MessageGatewayService messageGatewayService;
final Map<String, String> parameters = new HashMap<String, String>();
parameters.put("title", "Demo Email");
Create org.apache.commons.mail.HtmlEmail class object with template and map parameters.
HtmlEmail email = mailTemplate.getEmail(StrLookup.mapLookup(parameters), HtmlEmail.class);
Find the below Servlet Example for complete code -
https://github.com/arunpatidar02/aem63app-repo/blob/master/java/email/HTMLEmailServlet.java
Custom Email template.txt
You can create a custom HTML5 template like an HTML page and save it as .txt in CRX repository wherever you want.All the variable values can be replaced with properties set in the code e.g. ${title}
Example template available at
https://github.com/arunpatidar02/aem63app-repo/blob/master/java/email/html5-template.txt
OSGi Config to Send an email:
For AEM to be able to send emails, the Day CQ Mail Service needs to be properly configured. Please check athttps://helpx.adobe.com/experience-manager/6-3/sites/administering/using/notification.html#configmail
That’s it. Find the sample email trigger by https://github.com/arunpatidar02/aem63app-repo/blob/master/java/email/HTMLEmailServlet.java servlet.
hi, following your code i am getting this exception "org.apache.commons.mail.EmailException: Invalid message supplied"
ReplyDeleteat mailTemplate.getEmail(StrLookup.mapLookup(parameters), HtmlEmail.class);
Any suggestions?
Thanks.
IDK wtf is wrong with aem but if I add a breakline (first line in blank) for my email template it now works
DeleteYes it is working Thank you.
DeleteI confirm what ravi said, code throwing error there.
ReplyDeletegetting the same thing Invalid message supplied
ReplyDeleteHi Arun
ReplyDeleteI used your code same configuration applied in my code also
# Configuration created by Apache Sling JCR Installer
smtp.password="1@et57@123"
debug.email=B"true"
smtp.port=I"465"
smtp.user="et575507@gmail.com"
smtp.ssl=B"true"
smtp.starttls=B"false"
from.address="et575507@gmail.com"
smtp.host="smtp.gmail.com"
When hit my servlet its triggering beloow exception
org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:465
I am using 6.5 version
For Gmail account not able to set Less secure app access
Delete' ON'