Как отправить электронное письмо с помощью AWS в проекте Node

#node.js

#node.js

Вопрос:

Мое приложение Angular отправляет некоторые данные на сервер узла (app.js через POST-запрос тело запроса затем возвращается в ответе.

Сейчас я пытаюсь отправить электронное письмо, содержащее эти данные, отправленные в теле запроса.

В настоящее время я могу прочитать HTML-файл, чтобы заполнить текст письма, а затем отправить электронное письмо, но мне нужно заменить этот HTML-файл данными, отправленными в моем req.body .

Вот что у меня есть до сих пор вapp.js:

 const express = require('express')
const app = express()
const bodyParser = require('body-parser')

app.post('/postData', bodyParser.json(), (req, res) => {
    res.json(req.body)
    readFile();
    sendEmail();
})

app.listen(3000, () => console.log('Example app listening on port 3000!'))


var AWS = require('aws-sdk');
const fs = require('fs');
var params;

var htmlFileName = '/Users/myName/Desktop/test.html'
AWS.config.loadFromPath('config-aig.json');
const fromEmail = 'myName';
const toEmail = 'myName'
const subject = 'Test Email'   Date()

function sendEmail() {

    // Create the promise and SES service object
    var sendPromise = new AWS.SES({ apiVersion: '2010-12-01'}).sendEmail(params).promise();

    sendPromise.then(
        function (data) {
            console.log('send email success');
        }).catch(
            function (err) {
                console.error('error --> ', err, err.stack);
            });
}


function readFile(callback) {
    return new Promise(
        function (resolve, reject) {
            fs.readFile(htmlFileName, 'utf8',
                function read(err, data) {
                    if (err) {
                        return reject(err)
                    }
                    else {
                        console.log('file read success');
                        return resolve(data);
                    }
                })
        }
    )
}

readFile()
    .then((res) => {
        // Create sendEmail params 
        params = {
            Destination: { /* required */
                ToAddresses: [
                    toEmail,
                ]
            },
            Message: { /* required */
                Body: { /* required */
                    Html: {
                        Charset: "UTF-8",
                        Data: res
                    }
                },
                Subject: {
                    Charset: 'UTF-8',
                    Data: subject
                }
            },
            Source: fromEmail, /* required */
        }
        sendEmail();
    })
    .catch((err) => {
        console.log('File Read Error : ', err)
    }
    )
  

Может кто-нибудь, пожалуйста, показать мне, как я могу заменить свое htmlFileName на req.body?

Ответ №1:

Я использую ejs для оформления своего электронного письма, вот код, который я часто использую для отправки электронной почты!

Если у вас есть вопросы, я был бы рад ответить

 const ejs = require('ejs');
const AWS = require('aws-sdk');
const mailcomposer = require('mailcomposer');

const config_aws = {
    accessKeyId: '',
    secretAccessKey: '',
    region: 'eu-west-1',
    expeditor: '',
    limitExpeditor: 50
};

AWS.config.update(config_aws);

const ses = new AWS.SES();

async function sendAnEmail(
    expeditor,
    subject,
    destinator,
    body,
    destinator_name = null,
    bcc = null,
    callback
) {
    ejs.renderFile(
        `${__dirname}/templates/template.ejs`,
        {
            destinator,
            destinator_name,
            subject,
            body
        },
        (err, html) => {
            if (err) return console.error(err);
            const sesEmailProps = {
                Source: config_aws.expeditor,
                Destination: {
                    ToAddresses: [`${destinator}`]
                },
                Message: {
                    Body: {
                        Html: {
                            Charset: 'UTF-8',
                            Data: html
                        },
                        Text: {
                            Charset: 'UTF-8',
                            Data: html ? html.replace(/<(?:.|n)*?>/gm, '') : ''
                        }
                    },
                    Subject: {
                        Charset: 'UTF-8',
                        Data: subject
                    }
                }
            };
            if (bcc) {
                sesEmailProps.Destination = {
                    ToAddresses: [`${destinator}`],
                    BccAddresses: bcc // ARRAY LIMIT OF 49
                };
            }
            ses.sendEmail(sesEmailProps, (error, data) => {
                if (error) console.error(error);
                callback(error, data);
            });
        }
    );
}  

Комментарии:

1. Спасибо за ваш ответ, но не могли бы вы показать мне, как я буду использовать my req.body в качестве тела электронного письма?