While spinning up a nodejs app on an Ubuntu 22.04.4 machine, I’m facing this issue:
back-app-1 | [1] 2024-04-25T09:20:57.938Z error Error: Cannot find module '@aws-sdk/client-ses'
back-app-1 | [1] Require stack:
back-app-1 | [1] - /usr/src/app/app/services/send-mail.js
back-app-1 | [1] - /usr/src/app/app/api/authentication/authentication.controller.js
back-app-1 | [1] - /usr/src/app/app/api/authentication/authentication.routes.js
back-app-1 | [1] - /usr/src/app/app/api/router.js
back-app-1 | [1] - /usr/src/app/app/express.js
back-app-1 | [1] - /usr/src/app/app/server.js
back-app-1 | [1] - /usr/src/app/bin/www
back-app-1 | [1] at Module._resolveFilename (node:internal/modules/cjs/loader:1140:15)
back-app-1 | [1] at Module._load (node:internal/modules/cjs/loader:981:27)
back-app-1 | [1] at Module.require (node:internal/modules/cjs/loader:1231:19)
back-app-1 | [1] at require (node:internal/modules/helpers:177:18)
back-app-1 | [1] at Object.<anonymous> (/usr/src/app/app/services/send-mail.js:2:13)
back-app-1 | [1] at Module._compile (node:internal/modules/cjs/loader:1364:14)
back-app-1 | [1] at Module._extensions..js (node:internal/modules/cjs/loader:1422:10)
back-app-1 | [1] at Module.load (node:internal/modules/cjs/loader:1203:32)
back-app-1 | [1] at Module._load (node:internal/modules/cjs/loader:1019:12)
back-app-1 | [1] at Module.require (node:internal/modules/cjs/loader:1231:19)
back-app-1 | [1] at require (node:internal/modules/helpers:177:18)
back-app-1 | [1] at Object.<anonymous> (/usr/src/app/app/api/authentication/authentication.controller.js:7:22)
back-app-1 | [1] at Module._compile (node:internal/modules/cjs/loader:1364:14)
back-app-1 | [1] at Module._extensions..js (node:internal/modules/cjs/loader:1422:10)
back-app-1 | [1] at Module.load (node:internal/modules/cjs/loader:1203:32)
back-app-1 | [1] at Module._load (node:internal/modules/cjs/loader:1019:12)
back-app-1 | [1] at Module.require (node:internal/modules/cjs/loader:1231:19)
back-app-1 | [1] at require (node:internal/modules/helpers:177:18)
back-app-1 | [1] at Object.<anonymous> (/usr/src/app/app/api/authentication/authentication.routes.js:4:20)
back-app-1 | [1] at Module._compile (node:internal/modules/cjs/loader:1364:14)
back-app-1 | [1] at Module._extensions..js (node:internal/modules/cjs/loader:1422:10)
back-app-1 | [1] at Module.load (node:internal/modules/cjs/loader:1203:32)
And this is the header of the file where it is used:
const nodemailer = require('nodemailer');
const aws = require("@aws-sdk/client-ses");
const { defaultProvider } = require("@aws-sdk/credential-provider-node");
const SEND_MAIL = Symbol('SEND_MAIL');
const ses = new aws.SES({
apiVersion: "2010-12-01",
region: "eu-west-3",
defaultProvider,
});
Relevant package.json
part:
"dependencies": {
"@aws-sdk/client-ses": "^3.451.0",
"@aws-sdk/credential-provider-node": "^3.451.0",
...
}
The app is dockerized: packages are installed inside the container using npm ci
.
Is there anything I can do to fix this?
More:
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SES.html
https://nodemailer.com/transports/ses/
node: v20.5.1
npm: 10.5.2
1
You can directly install aws-sdk by running command npm i aws-sdk and then you can configure SES.
Suggestion:- you can directly use aws-sdk to send mail without using smtp as the provides several api for sending mail.
I am using aws-sdk APIs to send mail not SMTP. Here is the code which works for me.
var AWS = require("aws-sdk");
AWS.config.update({ region: "your-aws-region" });
var sendPromise = new AWS.SES({ apiVersion: "2010-12-01" })
.sendTemplatedEmail(params)
.promise();
In your case you can install aws-sdk and the you can easily configure ses.
const nodemailer = require('nodemailer');
const aws = require("aws-sdk");
const { defaultProvider } = require("@aws-sdk/credential-provider-
node");
const SEND_MAIL = Symbol('SEND_MAIL');
const ses = new aws.SES({
apiVersion: "2010-12-01",
region: "eu-west-3",
defaultProvider,
});