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 Loops II print each element of our series as a single line of space-separated values.

We use the integers  ,  , and   to create the following series: You are given   queries in the form of  ,  , and  . For each query, print the series corresponding to the given  ,  , and   values as a single line of   space-separated integers. Input Format The first line contains an integer,  , denoting the number of queries.  Each line   of the   subsequent lines contains three space-separated integers describing the respective  ,  , and   values for that query. Constraints Output Format For each query, print the corresponding series on a new line. Each series must be printed in order as a single line of   space-separated integers. Sample Input 2 0 2 10 5 3 5 Sample Output 2 6 14 30 62 126 254 510 1022 2046 8 14 26 50 98 Explanation We have two queries: We use  ...

Java Static Initializer Block

Static initialization blocks are executed when the class is loaded, and you can initialize static variables in those blocks. It's time to test your knowledge of  Static initialization blocks . You can read about it  here. You are given a class  Solution  with a  main  method. Complete the given code so that it outputs the area of a parallelogram with breadth   and height  . You should read the variables from the standard input. If   or    , the output should be  "java.lang.Exception: Breadth and height must be positive"  without quotes. Input Format There are two lines of input. The first line contains  : the breadth of the parallelogram. The next line contains  : the height of the parallelogram. Constraints Output Format If both values are greater than zero, then the  main  method must output the area of the  parallelogram . Otherwise, pri...