Skip to Content
Technical Articles
Author's profile photo Nitinkumar Gupta

Easy to Generate & Maintain Email (ABAP + HTML templates) – easyHtmlEmail

Hello All,


Today, I’ll try to demonstrate quite easy way to generate and send email using ABAP.

(It’s my first blog post, please point out the scope of improvements I may need. Thank you)

From start of my ABAP journey, I always felt bad about the way e-mails are generated & managed by ABAP. Recently I got chance to implement a project which also involved generating emails from scratch. I wanted customer facing e-mail to have modern look. Even plain text email using text-element/message class takes lots of efforts and makes the code lengthy, so it was a nightmare to me generate good looking modern email.

While searching web, I found the article demonstrating consumption of HTML template in ABAP: So I utilized this to generate modern e-mails for new project with really less ABAP code.

Since many of us may face similar issue, I wrote really small class zcl_easy_email on top of FM WWW_HTML_MERGER to make the email generation easy in ABAP for others .

Here’s my small contribution to Community:

Github Repository : easyHtmlEmail 

Repo contains report zeasy_email_demo demonstrates the consumption of zcl_easy_email to generate email.


Steps to generate Email with HTML templates:

  • Build HTML templates for email & upload it in SAP system in SMW0.

Template must contain Placeholders for dynamic values (highlighted in yellow are placeholders)

HTML%20template%20-%20Master HTML%20template%20-%20Child

HTML template – Master

HTML template – Child

PS: I am not so good in HTML & CSS , HTML templates used in demo are take from BBBootstrap public templates

I am using a Master & child template to generate a email with reusability in mind. Templates upload in SMW0:


Template uploaded in SMW0


  • Create instance of zcl_easy_email and pass in the template names


    title = 'mail subject '
      p_template       = 'ZTESTEMAIL'
      p_mastertemplate = 'ZTESTEMAILMASTER'

  • Pass in Placeholder & dynamic value pairs
    placeholder_name = '!VBELN!'
    replacement_type = 'R'
    single_value     = ' 23412 '
    placeholder_name = '!PRICE!'
    replacement_type = 'R'
    single_value     = ' 1234.90’

data : multi_line TYPE 
       line TYPE soli.

 line = 'LINE 1 : LINE1 </br>'.
 APPEND LINE to multi_line.
  line = 'LINE 2 : LINE2 </br>'.
 APPEND LINE to multi_line.

    placeholder_name = '!LOG!'
    replacement_type = ' '
    multi_line       =  multi_line
  • Build email , add recipients, send the mail
go_EASY_EMAIL->add_email( email = p_email ).
go_EASY_EMAIL->build_body( ).
go_EASY_EMAIL->send_mail( 'X' ).
  • Email visible in SOST: place holders replaced with required values.

Generated E-mail visible in SOST


  • WWW_HTML_MERGER uses soli_tab to process data, so 255 character is the limit for each line in html template.
  • SAP stores these HTML templates as RAW in INDX table, so we need to take care of character encoding while building the templates. In our system (BASIS 701) HTML template was stored in ISO-8859-2 encoding (code page 1401), so while building template encoding was selected asISO-8859-2 in text editor. Incorrect encoding will lead to character conversion issue.


Additional Info: SAP has provide something similar to this in S/4 suite, refer: E-Mail Templates in S/4 HANA

Please correct me if mistaken at some point, also suggest improvement points

Feel free to clone the repo in sandbox system using abapgit.

I hope the this blog post will be helpful. If you have questions/suggestions/issues about this, please feel free to leave them in the comments section.


If you know some good solution for emails, please mention it in comments below. ( lets keep all  email solutions on single page 😜 )



Added attachment functionality

Ability to handle error & custom action by exporting instance of cl_bsc from method build_mail()


Assigned Tags

      You must be Logged on to comment or reply to a post.
      Author's profile photo Jim Spath
      Jim Spath


      Good explanation of the solution. I know there are multiple ways to generate email using ABAP, so I hope yours is useful to someone.

      My only question, having managed various email generation schemes, is how to recognize and respond to error conditions. That might include malformed addresses (bad QA somewhere), or forwarders being offline or unresponsive, or just the plain old "552: mailbox full."

      go_EASY_EMAIL->send_mail( 'X' ).


      How could return codes be managed after that call?


      Author's profile photo Nitinkumar Gupta
      Nitinkumar Gupta
      Blog Post Author

      Hello Jim,

      I haven't exposed any such error handling points, will add this point  soon.

      Thanks a lot for the improvement point. 🙂 


      1. method send_mail  internally calls a custom FM Z_TEMP_SEND_MAIL to actually build & send mail. One can always opt to make adapt Z_TEMP_SEND_MAIL or replace the Call to Z_TEMP_SEND_MAIL it with something better they already have.
      2. One can opt to use the zcl_easy_email just to build & retrieve mail body using method get_body, and do the rest as normal.


      Author's profile photo Nitinkumar Gupta
      Nitinkumar Gupta
      Blog Post Author

      Hello Jim,

      Would you mind sharing your preferred ways of generating E-mail. It would be great to know the experts way.

      Author's profile photo Michael Keller
      Michael Keller

      There are many different, beautiful solutions for the subject of "Sending E-Mail". I really like your work 🙂 Great that you provide a GitHub repository! Hope to see more great work from you in the future!

      Author's profile photo Nitinkumar Gupta
      Nitinkumar Gupta
      Blog Post Author

      Thanks Michael for kind words, means a lot 😊.

      Also it would be great If you could share some of your favorite solutions for "Sending E-Mail".

      I won't let your Hope down 😊.

      Author's profile photo Marcel Gäbe
      Marcel Gäbe

      I think this is a good other solution to create a nice html e-mail. The variables in the HTML document will be filled by a CDS View.



      Author's profile photo Nitinkumar Gupta
      Nitinkumar Gupta
      Blog Post Author

      Hello Marcel,

      Obviously that's a much better solution introduced by SAP, Hence I have mentioned it in additional info. But I think  it's introduced only for S4 and later systems.

      We don't have such option at least  until NW 7.50 ( That's how much I could verify), So my post is mainly for older system which do not have e-mail templates in SE80 and specific classes.


      Author's profile photo Halla Halla
      Halla Halla

      Hi, i'am facing a problem with the charset , the HTML template is not displayed properly , do you have any suggestions for a solution . 

      Note that i tried to change the charset to ISO-8859-2  but some problem still exist . 

      Author's profile photo Nitinkumar Gupta
      Nitinkumar Gupta
      Blog Post Author

      Hi Halla,

      Could you please share some more info & screenshots of problem?



      Author's profile photo David Ledesma Moraga
      David Ledesma Moraga

      Thank you for this solution Nitinkumar Gupta. I found it quite smooth and easy to implement; it works great!

      Also thank you for the GitHub repository 🙂




      Author's profile photo Gunnar Mar Gunnarsson
      Gunnar Mar Gunnarsson

      Nice alternative to the Standard SAP Email templates when working on a older system.

      Ran into a slight problem with special characters but that was fixed by changing the character set of the html template to ISO 8859-1