Skip to main content

How to Use AWS SES Template Using Golang


👉 Amazon Simple Email Service Template (Amazon SES) is a highly scalable and cost-effective bulk and transactional email-sending service for businesses and developers. Subscription is quick and is on pay-as-you-go basis. You can read more about Amazon SES here 👏.


Create an AwsSES.go file (Code Explained below)

package main
import (
 "fmt"
 "utilities"

 "github.com/spf13/cast"

 "github.com/aws/aws-sdk-go/aws"
 "github.com/aws/aws-sdk-go/aws/session"
 "github.com/aws/aws-sdk-go/service/ses"
)

const (
 sesRegion = "us-east-1"
)

/*
Create SES Session Function 
*/

func newSESSession() (*session.Session, error) {
 return session.NewSession(&aws.Config{
  Region: aws.String(sesRegion),
 })
}
Create a Template Struct Format

// SESTemplate ... contains template name, subject, htmlpart & text part
type SESTemplate struct {
 TemplateName string `json:"templateName"`
 Subject      string `json:"subject"`
 HTMLBody     string `json:"htmlBody"`
 TextBody     string `json:"textBody"`
}

Set SES Template function
func formatSESTemplate(template SESTemplate) *ses.Template {
 return &ses.Template{
  TemplateName: aws.String(template.TemplateName),
  SubjectPart:  aws.String(template.Subject),
  HtmlPart:     aws.String(template.HTMLBody),
  TextPart:     aws.String(template.TextBody),
 }
}

Create an Email Template

To create a template to send personalized email messages, use the CreateTemplate operation. The template can be used by any account authorized to send messages in the AWS Region to which the template is added.

// CreateSESTemplate ... add new template to AWS SES panel
func CreateSESTemplate(template SESTemplate) error {
 
 sess, err := newSESSession()
 if err != nil {
  fmt.Println("Error ses session creation: ", err)
  return err
 }
 
 sesClient := ses.New(sess)
 createTemplateInput := &ses.CreateTemplateInput{
  Template: formatSESTemplate(template),
 }
 _, err = sesClient.CreateTemplate(createTemplateInput)
 if err != nil {
  fmt.Println("Error create new ses template: ", err)
  return err
 }

 return nil
}

Get an Email Template

To view the content for an existing email template including the subject line, HTML body, and plain text, use the GetTemplate operation. Only TemplateName is required.

// GetSESTemplateByName ... get template by using template name
func GetSESTemplateByName(templateName string) (map[string]string, error) {
 sess, err := newSESSession()
 if err != nil {
  fmt.Println("Error ses session creation: ", err)
  return nil, err
 }

 sesClient := ses.New(sess)
 templateOutput, err := sesClient.GetTemplate(&ses.GetTemplateInput{TemplateName: aws.String(templateName)})
 if err != nil {
  fmt.Println("Error get ses template: ", err)
  return nil, err
 }
 
 template = map[string]string{
  "templateName": cast.ToString(templateOutput.Template.TemplateName),
  "subject":      cast.ToString(templateOutput.Template.SubjectPart),
  "htmlBody":     cast.ToString(templateOutput.Template.HtmlPart),
  "textBody":     cast.ToString(templateOutput.Template.TextPart),
 }
 return template, nil
} 

List All Email Templates

To retrieve a list of all email templates that are associated with your AWS account in the current AWS Region, use the ListTemplates operation.

// GetAllSESTemplate ... get all ses templates Current Page
func GetAllSESTemplate(page string) (interface{}, error) {
 sess, err := newSESSession()
 
 if err != nil {
  fmt.Println("Error ses session creation: : ", err)
  return nil, err
 }

 sesClient := ses.New(sess)
 /*
  Pagination Limit Set 10
 */
 var itemsFrom int64
 itemsFrom = (cast.ToInt64(page) * 10) - 9
 listTemplatesInput := ses.ListTemplatesInput{
  MaxItems: &itemsFrom,
 }

 listTemplatesOutput, err := sesClient.ListTemplates(&listTemplatesInput)
 if err != nil {
  fmt.Println("Error list ses templates: ", err)
  return nil, err
 }
 return listTemplatesOutput.TemplatesMetadata, nil
}

Update an Email Template

To change the content for a specific email template including the subject line, HTML body, and plain text, use the UpdateTemplate operation.

// UpdateSESTemplate ... update an existing template to AWS SES panel
func UpdateSESTemplate(template SESTemplate) error {
 sess, err := newSESSession()
 if err != nil {
  fmt.Println("Error ses session creation: ", err)
  return err
 }
 sesClient := ses.New(sess)
 updateTemplateInput := &ses.UpdateTemplateInput{
  Template: formatSESTemplate(template),
 }
 _, err = sesClient.UpdateTemplate(updateTemplateInput)
 if err != nil {
  fmt.Println("Error update an existing template: ", err)
  return err
 }
 return nil
}

Delete an Email Template

To remove a specific email template, use the DeleteTemplate operation. All you need is the TemplateName.
// DeleteSESTemplateByName ... delete template by using template name
func DeleteSESTemplateByName(templateName string) error {
 sess, err := newSESSession()
 if err != nil {
  fmt.Println("Error ses session creation: ", err)
  return err
 }
 sesClient := ses.New(sess)
 _, err = sesClient.DeleteTemplate(&ses.DeleteTemplateInput{TemplateName: aws.String(templateName)})
 if err != nil {
  fmt.Println("Error delete an existing template: ", err)
  return err
 }

 return nil
}

(Note that by default anything written to Console will be logged as CloudWatch Logs events.)




Comments

  1. Awesome post. You Post is very informative. Thanks for Sharing.
    AWS Training in Noida

    ReplyDelete
  2. Thanks for sharing,hope it will be helpful for too many people that are searching for this topic
    AWS Training
    AWS Online Training
    Amazon Web Services Online Training

    ReplyDelete
  3. This idea is mind blowing. I think everyone should know such information like you have described on this post. Thank you for sharing this explanation. Thank you for your post. This is excellent information. It is amazing and wonderful to visit your site..
    oracle training in chennai

    oracle training institute in chennai

    oracle training in bangalore

    oracle training in hyderabad

    oracle training

    oracle online training

    hadoop training in chennai

    hadoop training in bangalore

    ReplyDelete
  4. Hey, you did a great job describing the whole process of creating those templates, but I think it is worth to mention that today you have tools like https://sovy.app which actually makes it a lot easier to deal with Amazon SES email templates ;)

    ReplyDelete

Post a Comment

Popular posts from this blog

Java Currency Formatter Solution

Given a  double-precision  number,  , denoting an amount of money, use the  NumberFormat  class'  getCurrencyInstance  method to convert   into the US, Indian, Chinese, and French currency formats. Then print the formatted values as follows: US: formattedPayment India: formattedPayment China: formattedPayment France: formattedPayment where   is   formatted according to the appropriate  Locale 's currency. Note:  India does not have a built-in Locale, so you must  construct one  where the language is  en  (i.e., English). Input Format A single double-precision number denoting  . Constraints Output Format On the first line, print  US: u  where   is   formatted for US currency.  On the second line, print  India: i  where   is   formatted for Indian currency.  On the third line...

Java Stdin and Stdout II Code

In this challenge, you must read an  integer , a  double , and a  String  from stdin, then print the values according to the instructions in the  Output Format  section below. To make the problem a little easier, a portion of the code is provided for you in the editor. Note:  We recommend completing  Java Stdin and Stdout I  before attempting this challenge. Input Format There are three lines of input: The first line contains an  integer . The second line contains a  double . The third line contains a  String . Output Format There are three lines of output: On the first line, print  String:  followed by the unaltered  String  read from stdin. On the second line, print  Double:  followed by the unaltered  double  read from stdin. On the third line, print  Int:  followed by the unaltered  integer  read from stdin. To make the pr...

How to Unirest HTTP API Requests Call in Java

Unirest is a set of lightweight HTTP libraries available in multiple languages, built and maintained by Mashape, who also maintain the open-source API Gateway Kong. Do yourself a favor, and start making HTTP requests like this: Creating Function : /** * Unirest API call return jsonResponse handle * Function Name: ApiCallFunction * @param vEmail, Url * @return status */ public static String ApiCallFunction(String vEmail, String Url) { try{ HttpResponse<JsonNode> jsonResponse = Unirest.post(Url) .field("vEmail",vEmail) .asJson(); JSONObject output= jsonResponse.getBody().getObject(); String status= output.getString("status"); return status; }catch(UnirestException e){ return "error"; } } Type Of   Response Handle : // Response to String Sting bookResponse = Unirest.get(Url).asString(); //Respo...