EMAIL SENDING USING EVENTS IN HYBRIS.
Most of the times we send email to the customers or user on registration.
Emails sending is the one of the major topic in hybris. One of the longest process in Hybris .
Let us consider a new customer is registered in your store and you wanted to send him a custom welcome email. In this example we are concentrating only on email sending.
Step 1: Creating a new customer at the same triggering the email service

In step one we have just created a customer and calling our email service method.
Step 2: Now Inside the Service implementation publish the event.

So that your event is get a call. In this example we are using CustomEmailEvent.
Step 3:Create a bean in respected spring.xml file
In this Example We are using core-spring.xml which is standard for services

Step 4: CustomEmailEvent is must extend with event listener class
Ex: CustomEmailEventListener extends AbstractAccelaratorSiteEventListener< CustomEmailEvent >

After extending the AbstractAccelaratorSiteEventListener class we have to implement the couple of method as shown in above image.onSiteEvent will create the process for email.Here we are using customEmailSendingProcess.
Step 5: Create an EventListener in respected spring.xml file

Step 6: Create a XMl file by Using same naming convention which as given in event listener.

Inside the xml the above content should be there and highlighted content is the bean to assign this process to one email template.
Step 7: Creating beans for customEmailSendingProcess in spring.xml

Note: While creating beans we must add DefinationResource for id it is mandatory.
In above image we can see CustomEmailTemplate is the template for this email process. We can use any naming convention but Starting letters must be capital
Step :8 Create the Email Context
In this example we CustomerEmailContent with is from out of the box.

If want we create our own Email Context We can create simple class and extends with AbstractEmailContext<>.
Step : 9 Preparing vm templates

Email-customEmailBody

Step :10 Preparing the Impex
#email-content.impex
$contentCatalog=<catalog name>
$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Online])[default=$contentCatalog:Online]
$wideContent=CMSImageComponent,BannerComponent
# Import modulegen config properties into impex macros
UPDATE GenericItem[processor=de.hybris.platform.commerceservices.impex.impl.ConfigPropertyImportProcessor];pk[unique=true]
$jarResourceCms=$config-jarResourceCmsValue
$emailPackageName=$config-emailContextPackageName
# Email velocity templates
INSERT_UPDATE RendererTemplate;code[unique=true];contextClass;rendererType(code)[default=’velocity’]
;Custom_Email_Subject;$emailPackageName.CustomerEmailContext
;Custom_Email_Body;$emailPackageName.CustomerEmailContext
# Email page Template
INSERT_UPDATE EmailPageTemplate;$contentCV[unique=true];uid[unique=true];name;active;frontendTemplateName;subject(code);htmlTemplate(code);restrictedPageTypes(code)
;;CustomEmailTemplate;Custom Email Template;true;CustomEmail;Custom_Email_Subject;Custom_Email_Body;EmailPage
# Email Pages
INSERT_UPDATE EmailPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);defaultPage;approvalStatus(code)[default=’approved’]
;;CustomEmail;Custom Email;CustomEmailTemplate;true
#email-content_en.impex
$contentCatalog=<catalog name>
$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Online])[default=$contentCatalog:Online]
# Import config properties into impex macros for modulegen
UPDATE GenericItem[processor=de.hybris.platform.commerceservices.impex.impl.ConfigPropertyImportProcessor];pk[unique=true]
$emailResource=$config-emailResourceValue
# Language
$lang=en
# CMS components and Email velocity templates
INSERT_UPDATE RendererTemplate;code[unique=true];description[lang=$lang];templateScript[lang=$lang,translator=de.hybris.platform.commerceservices.impex.impl.FileLoaderValueTranslator]
;Custom_Email_Subject;Owners PreLogin Subject;$emailResource/email-customEmailSubject.vm
;Custom_Email_Body;Owners PreLogin Body;$emailResource/email-customEmailBody.vm
# Email Pages
INSERT_UPDATE EmailPage;$contentCV[unique=true];uid[unique=true];fromEmail[lang=$lang];fromName[lang=$lang]
;;CustomEmail;”customerservices@hybris.com”;”Customer Services Team”
Step 11: Import the above impex by using hac
After getting the import was successful .hit your api from post or browser
You will get following information in your cmd

If you can see the above message was successfully the email will be generated.
Step 12: If you have smtp you can use it or we can use fake smtp
In this example we are using fake smtp.
