{"id":1003,"date":"2024-08-27T16:45:32","date_gmt":"2024-08-27T16:45:32","guid":{"rendered":"https:\/\/blog.ngocha.biz\/?p=1003"},"modified":"2024-08-27T16:45:32","modified_gmt":"2024-08-27T16:45:32","slug":"setup-jenkins-email-notification","status":"publish","type":"post","link":"https:\/\/blog.ngocha.biz\/?p=1003","title":{"rendered":"How to Setup Jenkins Email Notification (Detailed Guide)"},"content":{"rendered":"<p>In this blog, you will learn about setting up Jenkins Email notification.<\/p><p>Email notification for Jenkins build status is an important part each pipeline. It allows developers and relevant teams to get instance feedback on their pipeline job.<\/p><h2 id=\"smtp-credentials-prerequisite\">SMTP Credentials (Prerequisite)<\/h2><p>You need to have valid SMTP credentials to setup the email notification.<\/p><p>If you are setting it up for your organisation, you can get the SMTP details from the network team.<\/p><p>If you are using AWS you can make use of <a href=\"https:\/\/devopscube.com\/setup-aws-ses\/\">AWS SES to create SMTP credentials.<\/a><\/p><h2 id=\"setup-jenkins-email-notification\">Setup Jenkins Email Notification<\/h2><p>Follow the steps below to set up the Jenkins Email notification.<\/p><h3 id=\"step-1-create-credentials-of-smtp-username-and-password\">Step 1: Create Credentials of SMTP Username and Password<\/h3><p>The first step is to create a Jenkins credential with SMTP username and password.<\/p><p>Go to <strong>Manage Jenkins<\/strong> -&gt; <strong>Credentials<\/strong> and create a global credential.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-42-9.png\" class=\"kg-image\" alt=\"creating jenkins credentials\" loading=\"lazy\" width=\"979\" height=\"622\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-42-9.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-42-9.png 979w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>Select the credentials kind as Username with password and specify your SMTP username and password.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-43-9.png\" class=\"kg-image\" alt=\"creating Jenkins credential with SMTP username and password\" loading=\"lazy\" width=\"1073\" height=\"679\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-43-9.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-43-9.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-43-9.png 1073w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>Then, press the <strong>Create<\/strong> button to create the credential.<\/p><h3 id=\"step-2-configure-smtp-server-on-jenkins\">Step 2: Configure SMTP Server on Jenkins<\/h3><p>The next step is to configure the SMTP server on Jenkins. For that, go to<\/p><p><strong>Manage Jenkins -&gt;<\/strong> <strong>System<\/strong> scroll down to the <strong>Jenkins Location<\/strong> section and enter your from address, which is your SMTP server&#8217;s name.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-44-9.png\" class=\"kg-image\" alt=\"enter smtp from address under jenkins location section\" loading=\"lazy\" width=\"539\" height=\"289\"><\/figure><p>You have to specify the from address in the following format<\/p><pre><code>example@&lt;smtp-server-name&gt;<\/code><\/pre><p>For example, my SMTP server&#8217;s name is <strong>devopsprojects.dev<\/strong>, and I have given it as <strong>jenkins@devopsproject.dev<\/strong>.<\/p><p>Now, scroll down to the <strong>Extended E-mail Notification <\/strong>section and specify your SMTP server address, port, select SSL and select the credentials you created in the previous step.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-45-9.png\" class=\"kg-image\" alt=\"configuring smtp server on jenkins\" loading=\"lazy\" width=\"865\" height=\"553\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-45-9.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-45-9.png 865w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>Make sure you have given your SMTP server&#8217;s address and click the <strong>Save<\/strong> button to save the configurations.<\/p><h3 id=\"step-3-test-jenkins-email-notification-on-a-pipeline-job\">Step 3: Test Jenkins Email Notification on a Pipeline Job<\/h3><p>Once the SMTP server is configured, you can add email notification on each job.<\/p><p>An example <a href=\"https:\/\/devopscube.com\/jenkins-pipeline-as-code\/\">Jenkins pipeline code<\/a> for email notification is given below (highlighted code).<strong>The post block is responsible<\/strong> for sending email notifications.<\/p><pre><code>pipeline {\n    agent {\n        label 'kubeagent'\n    }\n\n    stages {\n        stage('Code Checkout') {\n            steps {\n                sh \"echo 'Checkout Completed'\"\n            }\n        }\n        stage('Build') {\n            steps {\n                sh \"echo 'Build Completed'\"\n            }\n        }\n    }\n    post {\n        always {\n            mail to: 'aswin@crunchops.com',\n                 subject: \"Jenkins Build Notification: ${currentBuild.fullDisplayName}\",\n                 body: \"\"\"\\\n                 Build Status: ${currentBuild.currentResult}\n                 Project: ${env.JOB_NAME}\n                 Build Number: ${env.BUILD_NUMBER}\n                 Build URL: ${env.BUILD_URL}\n                 \"\"\"\n        }\n    }\n}\n<\/code><\/pre><p>The<strong> label &#8216;kubeagent&#8217;<\/strong> on the agent block is the label of my agent make sure to replace it with your agent label.<\/p><p>Also, make sure to update the email ID before starting the build.<\/p><p>Now, Create a new pipeline using the above pipeline code.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-49-9.png\" class=\"kg-image\" alt=\"creating a new pipeline job\" loading=\"lazy\" width=\"359\" height=\"389\"><\/figure><p>Give a name to the job and select the type as Pipeline<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-50-11.png\" class=\"kg-image\" alt=\"creating a new pipeline job\" loading=\"lazy\" width=\"990\" height=\"658\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-50-11.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-50-11.png 990w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>On the next page, go to Advanced Project Options and paste the above pipeline code inside the script block<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-57-6.png\" class=\"kg-image\" alt=\"creating a new pipeline job\" loading=\"lazy\" width=\"1116\" height=\"645\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-57-6.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-57-6.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-57-6.png 1116w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>Once the Job is created click the Build now button to start the build<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-53-4.png\" class=\"kg-image\" alt=\"triggering the pipeline\" loading=\"lazy\" width=\"352\" height=\"427\"><\/figure><p>You can see the build is successful<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-48-7.png\" class=\"kg-image\" alt=\"output of a successful build\" loading=\"lazy\" width=\"1169\" height=\"612\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-48-7.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-48-7.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-48-7.png 1169w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>And you will receive an email notification on the specified email as shown below<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-58-7.png\" class=\"kg-image\" alt=\"email notification for build success\" loading=\"lazy\" width=\"541\" height=\"324\"><\/figure><p>Now, let&#8217;s see what happens if the build gets failed.<\/p><p>I have added the following stage in the pipeline to fail the build.<\/p><pre><code>stage('Test') {\n    steps {\n        sh \"exit 1\"\n    }\n}<\/code><\/pre><p>You will receive the below mail for failed build<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-59-8.png\" class=\"kg-image\" alt=\"email notification for failed build\" loading=\"lazy\" width=\"540\" height=\"342\"><\/figure><p>If you are using freestyle job, you can configure the email notification in the post build actions as shown below.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-61-4.png\" class=\"kg-image\" alt=\"email notification in Jenkins freestyle job\" loading=\"lazy\" width=\"600\" height=\"446\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-61-4.png 600w\"><\/figure><h2 id=\"email-notification-using-shared-library\">Email Notification Using Shared Library<\/h2><p>Follow that steps given below to setup email notification using <a href=\"https:\/\/devopscube.com\/jenkins-shared-library-tutorial\/\">Jenkins shared library<\/a>.<\/p><h3 id=\"step-1-configure-jenkins-shared-library\">Step 1: Configure Jenkins Shared Library<\/h3><p>We will be using the shared library in the pipeline, you can find the script in the following GitHub repository.<\/p><pre><code>https:\/\/github.com\/techiescamp\/jenkins-shared-library<\/code><\/pre><p>If you already have a shared library, you can make use of the <a href=\"https:\/\/github.com\/techiescamp\/jenkins-shared-library\/blob\/master\/vars\/emailNotification.groovy?ref=devopscube.com\">EmailNotification Function<\/a> and the related <a href=\"https:\/\/github.com\/techiescamp\/jenkins-shared-library\/blob\/master\/resources\/org\/dcube\/notification\/notify.tpl?ref=devopscube.com\">HTML template<\/a> from the resources folder.<\/p><p>If you want to use our shared library repo, follow the below steps to configure it.<\/p><p>Go to <strong>Manage Jenkins &#8211;&gt; System<\/strong> and scroll down to the <strong>Global Trusted Pipeline Libraries<\/strong> section and configure shared library as shown below<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-46-9.png\" class=\"kg-image\" alt=\"configuring shared library on jenkins\" loading=\"lazy\" width=\"1024\" height=\"456\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-46-9.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-46-9.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-46-9.png 1024w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-47-9.png\" class=\"kg-image\" alt=\"configuring shared library on jenkins\" loading=\"lazy\" width=\"1311\" height=\"754\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-47-9.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-47-9.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-47-9.png 1311w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><h3 id=\"step-2-test-jenkins-email-notification-with-shared-library\">Step 2: Test Jenkins Email Notification with Shared Library<\/h3><p>An example pipeline code for email notification is given below<\/p><pre><code>@Library('jenkins-shared-library@master') _\npipeline {\n    agent {\n        label 'kubeagent'\n    }\n\n    stages {\n        stage('Git Checkout') {\n            steps {\n                sh \"echo 'Checkout Completed'\"\n            }\n        }\n        stage('Build') {\n            steps {\n                sh \"echo 'Build Completed'\"\n            }\n        }\n    }\n    post {\n        always {\n            script {\n                emailNotification(\"aswin@crunchops.com\")\n            }\n        }\n    }\n}<\/code><\/pre><p>Make sure to update the Email ID before starting the build.<\/p><p>The groovy script for email notification and its template is placed inside the following directory<\/p><pre><code>\u251c\u2500\u2500 resources\n\u2502       \u2514\u2500\u2500 notify.tpl\n\u251c\u2500\u2500 src\n\u2514\u2500\u2500 vars\n      \u2514\u2500\u2500 emailNotification.groovy<\/code><\/pre><p>The groovy script uses the <strong>notify.tpl<\/strong> template in the resource folder, you can get the directory structure and code used in this lesson from <a href=\"https:\/\/github.com\/techiescamp\/jenkins-shared-library.git?ref=blog.techiescamp.com\" rel=\"noreferrer noopener\">Github<\/a>.<\/p><p>Create a pipeline with above pipeline code, and once the build is completed, you will receive an email notification on the specified email as shown below<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-54-11.png\" class=\"kg-image\" alt=\"email notification got from a successful build\" loading=\"lazy\" width=\"1600\" height=\"725\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-54-11.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-54-11.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-54-11.png 1600w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>And, this is the notification you will get for a failed build.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-56-9.png\" class=\"kg-image\" alt=\"email notification got from a failed build\" loading=\"lazy\" width=\"2000\" height=\"1114\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-56-9.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-56-9.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1600\/2025\/03\/image-56-9.png 1600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-56-9.png 2044w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>You can see that the URL for the build, the branch, and the build details are given directly in the email notification itself.<\/p><h2 id=\"troubleshooting-jenkins-email-notification\">Troubleshooting Jenkins Email Notification<\/h2><p>The following are the common reasons why your Email notification is not sent properly after every build.<\/p>\n<!--kg-card-begin: html-->\n<ol class=\"wp-block-list is-style-cnvs-list-styled\">\n<li>Check the SMTP configuration you did on the <strong>Email notification setup step 2<\/strong>. Check if the from address (System Admin e-mail address), SMTP server address, and port are correct.<\/li>\n\n\n<li>Check if the SMTP server credentials stored in the Jenkins credentials are correct, and make sure you are using the correct credentials in the SMTP configuration.<\/li>\n\n\n<li>Make sure you have defined the <strong>Post Build Action block<\/strong> in the pipeline correctly.<\/li>\n\n\n<li>Check if the correct<strong> recipient Email<\/strong> is given in the pipeline.<\/li>\n\n\n<li><!--kg-card-begin: html--><span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\">The SMTP port you are using may be blocked in the&nbsp;<strong>security group<\/strong>&nbsp;of the Jenkins server.<\/span><!--kg-card-end: html--> Make sure to allow the port required to connect with the SMTP server, in our case it\u2019s <strong>port 465<\/strong>.<\/li>\n\n\n<li>You may receive your Email, but it&#8217;s in spam. Check if your SMTP server is configured with <strong>DKIM (Domain Keys Identified Mail)<\/strong> and <strong>SPF (Sender Policy Framework)<\/strong>.<\/li>\n<\/ol>\n<!--kg-card-end: html-->\n<h2 id=\"conclusion\">Conclusion<\/h2><p>In this blog, you have learned about setting up Jenkins Email notifications and tested it on a pipeline job.<\/p><p>Also, you have learned about setting up Jenkins shared library and using it to send Email notifications.<\/p>\n<hr><p><strong>Ngu\u1ed3n:<\/strong> <a href=\"https:\/\/devopscube.com\/setup-jenkins-email-notification\/\" target=\"_blank\" rel=\"noopener noreferrer\">How to Setup Jenkins Email Notification (Detailed Guide) \u2014 DevOpsCube<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Source: https:\/\/devopscube.com\/setup-jenkins-email-notification\/<\/p>\n","protected":false},"author":1,"featured_media":1004,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1003","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops"],"_links":{"self":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts\/1003","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1003"}],"version-history":[{"count":0,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts\/1003\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/media\/1004"}],"wp:attachment":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1003"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1003"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}