AMAZON SES:以HTML格式向用户发送电子邮件

时间:2018-08-06 08:57:13

标签: amazon-web-services amazon-ses

我想将当前的文本电子邮件格式更改为HTML格式,以便我可以用格式正确的方式发送电子邮件,包括标题,字体值等,如下面的屏幕快照所示。 Image showing email body with header font size etc

目前,我具有使用AWS.ses发送电子邮件的文本格式

exports.sendEmail = function(email, token, event, context) {
var  ses = new AWS.SES({
  region: process.env.SES_REGION
});
var eParams = {
    Destination: {
        ToAddresses: [email]
    },
    Message: {
        Body: {
            Text: {
              //template or environment variable
              Data: `Hello ${event.request.userAttributes.given_name},\n\nYour Device Validation Token is ${token}\nSimply copy this token and paste it into the device validation input field.`
            }
        },
        Subject: {
          //template or environment variable
            Data: "CWDS - CARES Device Validation Token"
        }
    },
    //environment variable
    Source: process.env.SOURCE_EMAIL
};

/* eslint-disable no-unused-vars */
ses.sendEmail(eParams, function(err, data){
  if(err) {
    logWrapper.logExceptOnTest("FAILURE SENDING EMAIL - Device Verify OTP");
    logWrapper.logExceptOnTest(event);
    logWrapper.logExceptOnTest(context);
    context.fail(err);
  }
  else {
    logWrapper.logExceptOnTest("Device Verify OTP sent");
    context.succeed(event);
  }
});
/* eslint-enable no-unused-vars */

}

1 个答案:

答案 0 :(得分:5)

这很简单,只需添加Body节点的Html部分,即:

var eParams = {
    Destination: {
        ToAddresses: [email]
    },
    Message: {
        Body: {
            Text: {
                Data: `Hello ${event.request.userAttributes.given_name},\n\nYour Device Validation Token is ${token}\nSimply copy this token and paste it into the device validation input field.`
            },
            Html: {
                Data: `<html><head><title>Your Token</title><style>h1{color:#f00;}</style></head><body><h1>Hello ${event.request.userAttributes.given_name},</h1><div>Your Device Validation Token is ${token}<br/>Simply copy this token and paste it into the device validation input field.</div></body></html>`
            }
        },
        Subject: {
            //template or environment variable
            Data: "CWDS - CARES Device Validation Token"
        }
    },
    //environment variable
    Source: process.env.SOURCE_EMAIL
};

但是... 通常,我通常将电子邮件模板拆分为html和文本文件,并使用把手插入数据项。这是我的一种可行解决方案的摘录:

contact / contact.js

var AWS = require('aws-sdk');
var ses = new AWS.SES();
var fs = require('fs');
var Handlebars = require('handlebars');

module.exports.sendemail = (event, context, callback) =>
   var eventData = JSON.parse(event.body);

   fs.readFile("./contact/emailtemplate.html", function (err, emailHtmlTemplate) {
       if (err) {
           console.log("Unable to load HTML Template");
           throw err;
       }
       fs.readFile("./contact/emailtemplate.txt", function (err, emailTextTemplate) {
            if (err) {
                console.log("Unable to load TEXT Template");
                throw err;
            }

            // Prepare data for template placeholders
            var emailData = {
                "given_name": event.request.userAttributes.given_name,
                "token": token
            };

            // Inject data into templates
            var templateTitle = Handlebars.compile(process.env.EMAIL_TITLE);
            var titleText = templateTitle(emailData);
            console.log(titleText);

            emailData.title = titleText;

            var templateText = Handlebars.compile(emailTextTemplate.toString());
            var bodyText = templateText(emailData);
            console.log(bodyText);

            var templateHtml = Handlebars.compile(emailHtmlTemplate.toString());
            var bodyHtml = templateHtml(emailData);
            console.log(bodyHtml);

            // Prepare SES params

            var params = {
                Destination: {
                    ToAddresses: [
                        process.env.EMAIL_TO
                    ]
                },
                Message: {
                    Body: {
                        Text: {
                            Data: bodyText,
                            Charset: 'UTF-8'
                        },
                        Html: {
                            Data: bodyHtml
                        },
                    },
                    Subject: {
                        Data: titleText,
                        Charset: 'UTF-8'
                    }
                },
                Source: process.env.EMAIL_FROM
            }
            console.log(JSON.stringify(params,null,4));

            // Send Email

            ses.sendEmail(params, function(err,data){
                if(err) {
                    console.log(err,err.stack); // error
                    var response = {
                        statusCode: 500,
                        headers: {
                            "Access-Control-Allow-Origin" : "*",
                            "Access-Control-Allow-Credentials" : true
                        },
                        body: JSON.stringify({"message":"Error: Unable to Send Message"})
                    }
                    callback(null, response);
                }
                else  {
                    console.log(data); // success

                    var response = {
                        statusCode: 200,
                        headers: {
                            "Access-Control-Allow-Origin" : "*",
                            "Access-Control-Allow-Credentials" : true
                        },
                        body: JSON.stringify({"message":"Message Sent"})
                    }
                    callback(null, response);
                }
            });

         }); //end of load text template
    }); //end of load html template
};

contact / emailtemplate.html

<!DOCTYPE html>
<html>
<head>
    <title>Your New Token</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <style>
        h1 { color:#f00; }
    </style>
</head>
<body>
<div class="emailwrapper">
    <div class="main">
        <div class="content">
            <h1>Hi {{given_name}}</h1>
            <div style="padding:20px;">
                <div>your new token is {{token}}.</div>
            </div>
        </div>
    </div>
</div>
</body>
</html>

contact / emailtemplate.txt

Hi {{given_name}}

your new token is {{token}}.