nest-modules / mailer Goto Github PK
View Code? Open in Web Editor NEW๐จ A mailer module for Nest framework (node.js)
Home Page: https://nest-modules.github.io/mailer/
License: MIT License
๐จ A mailer module for Nest framework (node.js)
Home Page: https://nest-modules.github.io/mailer/
License: MIT License
Tried to send email just without any template engine like in your example:
this.mailerProvider.sendMail({
to: '[email protected]', // sender address
from: '[email protected]', // list of receivers
subject: 'Testing Nest MailerModule โ', // Subject line
text: 'welcome', // plaintext body
html: '<b>welcome</b>' // HTML body content
})
I got the following:
UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type undefined.
The error came from this function(mailer.provider.ts:63):
private getTemplatePath(templateDir: string, templateName?: string, extension?: string) {
return path.join(process.cwd(), templateDir || './public/templates', templateName) + extension;
}
There is no default value for the templateName variable and in this case the path got undefined argument, which caused the above error.
I was set a dummy empty template file path to sendMail's argument and it's solved the issue, but in this case I must have to put a file path and create an empty file.
Not sure if this is something I am doing wrong, but I observed when I try to use path.resolve to resolve the template directory path. the following error is thrown
UnhandledPromiseRejectionWarning: Error: ENOENT: no such file or directory, open '/home/user/Files/project/home/user/project/src/app/welcome/index.pug'
Implementation example:
.....
import { resolve } from 'path';
@module({
....
imports: [
MailerModule.forRoot({
...,
templateDir: resolve('views/email-templates/')
})
]
})
The reason why I am trying to use path.resolve is that I am planning to bundle the package with webpack and the paths will change.
im just curious if i possible to add logging and debugging? Similar implementation on this link,
Debugging
from .env file / bash.
export EMAIL_TRANSPORT="smtps://username:[email protected]/?pool=true"
export EMAIL_FROM="<email_sender_here>"
current code;
@Module({
imports: [
MailerModule.forRoot({
transport: EMAIL_TRANSPORT,
defaults: { from: EMAIL_FROM },
template: {
dir,
adapter: new HandlebarsAdapter(),
options: { strict: true },
},
}),
],
})
export class EmailsModule {}
Im thinking that maybe that possible if we create a "transport" and replace "EMAIL_TRANSPORT",
Suggested implementation
import * as nodemailer form 'nodemailer';
let customTransporter = nodemailer.createTransport(options[, defaults]);
@Module({
imports: [
MailerModule.forRoot({
transporter: customTransporter, // to override the transport
defaults: { from: EMAIL_FROM },
template: {
dir,
adapter: new HandlebarsAdapter(),
options: { strict: true },
},
}),
],
})
i think not possible to have custom transport, due to this
transporter implementation
unless i have to extend the mailService, create a setter method to "override" the transporter property.
But i dont know how to do it :(
Do you have any suggestions or alternative implementations?
it's possible to import .ts
file or .json
, Nest is pure TypeScript framework, I suggest you to change docs to use it as .ts
or .json
config file instead of .js
.
I believe the latest version, have somewhat didn't included the sendMail configuration in the send-mail-options-interface.ts
Is it possible to get the configuration from a Configuration Service instead of the .json file?
with nodemailer:
return nodemailer.createTransport(
ses({
accessKeyId: 'xxxx',
secretAccessKey: 'xxxx',
region: 'eu-west-1'
})
)
.sendMail(mailOptions, function (err: Error, info: any) {
if (err) {
//return reject('Error send email, please contact administrator to best support.');
throw err;
}
console.log('mail sent');
return resolve('Email send successfully to your email');
});
Hey,
Have you remove the mailerconfig.ts support for temporarily or permanently? It was a good and easy to use configuration till this release.
Thanks
tano
I am proposing to add a new functionality that makes the css inline because most email providers only support inline css.
I am trying to use static files served by nest app in my email hbs template.
Here is my appModule.ts:
import { join } from 'path';
import { HttpExceptionFilter } from '@shared/filters/http-exception.filter';
import { NestFactory } from '@nestjs/core';
import { NestExpressApplication } from '@nestjs/platform-express';
import { AppModule } from './app.module';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
const host = AppModule.isDev ? `${AppModule.host}:${AppModule.port}` : AppModule.host;
[...]
app
.enableCors()
.useGlobalFilters(new HttpExceptionFilter())
.setBaseViewsDir(join(__dirname, '...', 'views'))
.useStaticAssets(join(__dirname, '..', 'public'), { prefix: '/assets/' })
.setViewEngine('hbs');
await app.listen(AppModule.port);
}
bootstrap();
I load mailer that way:
MailerModule.forRootAsync({
useFactory: () => ({
transport: {
host: 'localhost',
port: 1025,
secure: false,
ignoreTLS: true,
},
defaults: {
from: 'my-team" <[email protected]>',
},
template: {
dir: __dirname + '/mails',
adapter: new HandlebarsAdapter(),
options: {
strict: true,
},
},
}),
}),
I would like to load files from served static files.
Thanks
Hello I am new at Nest.js and I am wondering am I missing some configuration to send e-mail ?
"dependencies": {
"@nest-modules/mailer": "^1.1.2",
"@nestjs/common": "6.0.5",
"@nestjs/core": "6.0.5",
"@nestjs/mongoose": "5.0.0",
"@nestjs/passport": "^1.1.0",
"@nestjs/platform-express": "^6.0.5",
"class-transformer": "0.1.9",
"class-validator": "0.8.5",
"fastify-formbody": "2.0.0",
"jsonwebtoken": "^8.3.0",
"mongoose": "^5.4.18",
"passport": "^0.4.0",
"passport-http-bearer": "^1.0.1",
"passport-jwt": "^4.0.0",
"passport-ldapauth": "^2.1.2",
"reflect-metadata": "0.1.12",
"rxjs": "6.0.0",
"rxjs-compat": "6.0.0",
"typescript": "2.6.2"
}
My app module:
@module({
imports: [SectionModule, ProjectsModule, TestrailModule, CypressModule, MailerModule.forRoot({
transport: 'smtps://bootspring1:[email protected]',
template: {
adapter: new PugAdapter(), // or new PugAdapter()
options: {
strict: true,
},
},
})],
})My example mail service
import { Injectable } from '@nestjs/common';
import {MailerService} from '@nest-modules/mailer';@Injectable()
export class ExampleService {
constructor(private readonly mailerService: MailerService) {}public example3(): void { this .mailerService .sendMail({ to: '[email protected]', from: '[email protected]', subject: 'Testing Nest Mailermodule with template โ', text: 'Text', }) .then(() => {}) .catch(() => {}); }
}
I want to send mail from my email adress [email protected] to someone..
Can please someone help?
Node.js 10.16.0
@nest-modules/mailer 1.1.3
nestjs 6.5.2
When sending an email using handlebars I get the following error:
[Nest] 26182 - 2019-07-29 3:41 PM [ExceptionsHandler] ENOENT: no such file or directory, open '/var/www/html/backend-api/dist/common/templates/emails/resetPassword.hbs' +1411ms
[0] Error: ENOENT: no such file or directory, open '/var/www/html/backend-api/dist/common/templates/emails/resetPassword.hbs'
[0] at Object.openSync (fs.js:443:3)
[0] at Object.readFileSync (fs.js:343:35)
[0] at HandlebarsAdapter.compile (/var/www/html/backend-api/node_modules/@nest-modules/mailer/dist/adapters/handlebars.adapter.js:19:37)
[0] at MailerService.transporter.use (/var/www/html/backend-api/node_modules/@nest-modules/mailer/dist/mailer.service.js:44:40)
[0] at processPlugins (/var/www/html/backend-api/node_modules/nodemailer/lib/mailer/index.js:279:13)
[0] at err (/var/www/html/backend-api/node_modules/nodemailer/lib/mailer/index.js:283:17)
[0] at Mail._convertDataImages (/var/www/html/backend-api/node_modules/nodemailer/lib/mailer/index.js:387:20)
[0] at Mail._defaultPlugins.compile.args (/var/www/html/backend-api/node_modules/nodemailer/lib/mailer/index.js:31:41)
[0] at processPlugins (/var/www/html/backend-api/node_modules/nodemailer/lib/mailer/index.js:279:13)
[0] at Mail._processPlugins (/var/www/html/backend-api/node_modules/nodemailer/lib/mailer/index.js:287:9)
Mailer config
MailerModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
transport: `smtps://${configService.get(
'MAILER_EMAIL',
)}:${configService.get('MAILER_PASSWORD')}@${configService.get(
'MAILER_HOST',
)}`,
defaults: {
from: '"nest-modules" <[email protected]>',
},
template: {
dir: path.join(__dirname, 'common/templates/emails'),
adapter: new HandlebarsAdapter(),
options: {
strict: true,
},
},
}),
inject: [ConfigService],
})
Hi.
Mailer works perfectly when I start the app locally with the below command.
"start": "ts-node -r tsconfig-paths/register src/main.ts",
But the mail is not sent out if I start the app with the below command.
"prestart:prod": "rimraf dist && npm run build",
"start:prod": "node dist/main.js",
Could you let me know there is any solution for it?
package.json
{
"name": "a",
"version": "0.0.1",
"description": "",
"author": "",
"license": "MIT",
"scripts": {
"build": "rimraf dist && tsc -p tsconfig.build.json",
"format": "prettier --write \"src/**/*.ts\"",
"start": "ts-node -r tsconfig-paths/register src/main.ts",
"start:dev": "concurrently --handle-input \"wait-on dist/main.js && nodemon\" \"tsc -w -p tsconfig.build.json\" ",
"start:debug": "nodemon --config nodemon-debug.json",
"prestart:prod": "rimraf dist && npm run build",
"start:prod": "node dist/main.js",
"lint": "tslint -p tsconfig.json -c tslint.json",
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
},
"dependencies": {
"@nest-modules/mailer": "^1.1.3",
"@nestjs/common": "^6.0.0",
"@nestjs/core": "^6.0.0",
"@nestjs/platform-express": "^6.0.0",
"@types/json2csv": "^4.5.0",
"dotenv": "^8.0.0",
"json2csv": "^4.5.1",
"moment": "^2.24.0",
"nest-schedule": "^0.6.0",
"nodemailer": "^6.3.0",
"reflect-metadata": "^0.1.12",
"rimraf": "^2.6.2",
"rxjs": "^6.3.3"
},
"devDependencies": {
"@nestjs/testing": "^6.0.0",
"@types/express": "^4.16.0",
"@types/jest": "^23.3.13",
"@types/node": "^10.12.18",
"@types/supertest": "^2.0.7",
"concurrently": "^4.1.0",
"jest": "^24.9.0",
"nodemon": "^1.19.1",
"prettier": "^1.15.3",
"supertest": "^3.4.1",
"ts-jest": "^24.0.2",
"ts-node": "8.1.0",
"tsconfig-paths": "3.8.0",
"tslint": "5.16.0",
"typescript": "3.4.3",
"wait-on": "^3.2.0"
},
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"testRegex": ".spec.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"coverageDirectory": "../coverage",
"testEnvironment": "node"
}
}
@Module({
imports: [
HttpModule,
MailerModule.forRoot({
transport: {
secureConnection: false,
host: 'smtp.office365.com',
port: '587',
auth: { user: '[email protected]', pass: 'password' },
tls: { ciphers: 'SSLv3' },
},
template: {
dir: __dirname + '/templates',
adapter: new HandlebarsAdapter(), // or new PugAdapter()
options: {
strict: true,
},
},
}),
],
controllers: [
AppController,
],
providers: [
AppService,
],
})
It would be nice to have something like
template: {
dir: __dirname + '/templates',
adapter: new HandlebarsAdapter(),
options: {
strict: true,
partialDir: __dirname + '/partials',
},
},
Hey. I'd be happy to add support for EJS templates. Would you be interested in such PR if I'd sent it?
can't find a way to register handlebars-intl for the adapter and can't find any documentation.
I try to follow the instruction here, but not successfully.
Hi Guys, can we get a working implementation demo.
Hello people,
I don't know if this was because i update the mailer module, but the following error is happening when try to run or execute the production build.
If I disable the noImplicitAny flag in tsconfig.json, everything works fine.
My tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es2017",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true,
"noImplicitAny": true,
"noImplicitReturns": false,
"noUnusedParameters": false,
"paths": {
"@atividades/*": [ "./src/academico/atividades/*", ],
"@documentos/*": [ "./src/academico/documentos/*"],
"@config/*": [ "./src/config/*"],
"@utils": [ "./src/utils"]
}
},
"exclude": ["node_modules", "dist"]
}
I note that mailer module don't have a .d.ts file, this can be the reason of the error ?
Shouldnt CC & BCC be standard options when sending an email?
Error: Argument of type '{ to: string; replyTo: string; from: string; subject: string; template: string; context: { message: string; }; }' is not assignable to parameter of type 'ISendMailOptions'.
Object literal may only specify known properties, and 'replyTo' does not exist in type 'ISendMailOptions';
i found problem here ('/mailer/dist/interfaces/send-mail-options.interface.d.ts'):
import { SendMailOptions } from 'nodemailer';
export interface ISendMailOptions extends SendMailOptions {
to?: string;
from?: string;
subject?: string;
text?: string;
html?: string;
template?: string;
context?: {
[name: string]: any;
};
}
The sendMailOptions interface does not exist.
Possible solution: It seems to me that you need to add @types/nodemailer in the package.json of your module
The README gives the following example for template.options:
template: {
dir: __dirname + '/templates',
adapter: new HandlebarsAdapter(), // or new PugAdapter()
options: {
debug: true,
doctype: 'html',
},
},
There appear to be several issues with this:
MailerOptions
declares options
as { [name: string]: string; }
, meaning that any booleans including the debug
in the example or the real-world strict
become type errorsoptions
is passed to handlebars.compile
, which according to this documentation does not appear to accept either debug
or doctype
options but the example is showing usage of handlebars.Might be excellent to have a working demo, especially if it could be with a contact form and any front-end framework (e.g. Angular). A good starting point could be this project, where Angular, Nest and Nx workspace are already set up, just making a simple contact form with the mailer module would be missing.
Make pug
& handlebars
as optional dependencies, i don't want to keep both if i use only one.
Hi,
I set up Nest Mailer with handlebars, i followed the documentation.
But i get this error: Error: "route" not defined in [object Object] - 8:31
Here my template setup:
template: { dir: './src/views/', adapter: new HandlebarsAdapter(), options: { strict: true, }, }
Hope you can help, i stuck on this.
Is it possible to add in Readme working example with asyn ConfigService without any metacode?
Hi, are you planning to publish the module in npm?
It could be nice to add a support for html templating with handlebars or something.
I think it s current to use a tool such Email fundation to generate an email template that will render correctly an almost all mail client.
Creating a pug template with td tr... by hand is a pain.
Hi guys,
When I run my project in production environment I have this issue:
node dist/server/src/main.js
C:\Users\kevin\Documents\GitHub\backhoe\server\mailerconfig.ts:1
(function (exports, require, module, __filename, __dirname) { export = {
^^^^^^
SyntaxError: Unexpected token export
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:616:28)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
Is there another way to declare the config using a file?
Thanks!
I have multiple mailgun transports (to send from several domains) and I couldn't realize how to make MailerModule to produce several transports.
I saw description of dynamic modules on docs.nestjs, but as far as i can see - this doesn't apply to MailerModule.
Hello, is there any way to add attachments without hard coding?
NPM audit points to a high vulnerability when using the newest version available on NPM (1.3.9):
โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ High โ Insufficient Entropy โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Package โ cryptiles โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Patched in โ >=4.1.2 โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Dependency of โ @nest-modules/mailer โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Path โ @nest-modules/mailer > css-inliner > less > request > hawk > โ
โ โ cryptiles โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ More info โ https://npmjs.com/advisories/1464 โ
โโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Error in foo.service.spect.ts
Thanks for your work, but I encountered issue:
TypeError: Converting circular structure to JSON
at JSON.stringify (<anonymous>)
at ModuleTokenFactory.getDynamicMetadataToken (C:\www\project\node_modules\@nestjs\core\injector\module-token-factory.js:16:45)
at ModuleTokenFactory.create (C:\www\project\node_modules\@nestjs\core\injector\module-token-factory.js:10:27)
at NestContainer.addModule (C:\www\project\node_modules\@nestjs\core\injector\container.js:41:47)
at DependenciesScanner.storeModule (C:\www\project\node_modules\@nestjs\core\scanner.js:31:24)
at DependenciesScanner.scanForModules (C:\www\project\node_modules\@nestjs\core\scanner.js:21:14)
at importedModules.map.innerModule (C:\www\project\node_modules\@nestjs\core\scanner.js:24:18)
at Array.map (<anonymous>)
at DependenciesScanner.scanForModules (C:\www\project\node_modules\@nestjs\core\scanner.js:23:25)
at DependenciesScanner.scan (C:\www\project\node_modules\@nestjs\core\scanner.js:16:14)
Steps for reproducing:
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { MailerModule } from '@nest-modules/mailer';
@Module({
imports: [
MailerModule.forRoot(),
],
controllers: [AppController],
components: [],
})
export class AppModule {}
import * as mandrillTransport from 'nodemailer-mandrill-transport';
export = {
transport: mandrillTransport({
auth: {
api_key: 'key'
}
}),
defaults: {
from:'"nest-mailer" <[email protected]>',
},
templateDir: './src/common/email-templates'
}
How I can resolve it? Thanks for help.
Hi,
Is there any plan for adding Preview capability to this module? https://www.npmjs.com/package/email-templates
Thanks
We have decided to rename the module, for permission problems in npm, we regret the percanses
Nodemailer allows you to pass an array in the TO and CC field is it possible to get this behaviour in NestJs Mailer
import { SendMailOptions } from "nodemailer";
export interface ISendMailOptions extends SendMailOptions {
to?: string[]; // <--
cc?: string[]; // <--
from?: string;
replyTo?: string;
subject?: string;
text?: string;
html?: string;
template?: string;
context?: {
[name: string]: any;
};
attachments?: {
filename: string;
contents?: any;
path?: string;
contentType?: string;
cid: string;
}[];
}
Hello people,
Some security vulnerabilities was reported by npm audit on the mailer module
High Insufficient Entropy
Package cryptiles
Patched in >=4.1.2
Dependency of @nest-modules/mailer
Path @nest-modules/mailer > css-inliner > less > request > hawk > cryptiles
More info https://npmjs.com/advisories/1464
Moderate Prototype Pollution
Package hoek
Patched in > 4.2.0 < 5.0.0 || >= 5.0.3
Dependency of @nest-modules/mailer
Path @nest-modules/mailer > css-inliner > less > request > hawk > boom > hoek
More info https://npmjs.com/advisories/566
Moderate Prototype Pollution
Package hoek
Patched in > 4.2.0 < 5.0.0 || >= 5.0.3
Dependency of @nest-modules/mailer
Path @nest-modules/mailer > css-inliner > less > request > hawk > cryptiles > boom > hoek
More info https://npmjs.com/advisories/566
Moderate Prototype Pollution
Package hoek
Patched in > 4.2.0 < 5.0.0 || >= 5.0.3
Dependency of @nest-modules/mailer
Path @nest-modules/mailer > css-inliner > less > request > hawk > hoek
More info https://npmjs.com/advisories/566
Moderate Prototype Pollution
Package hoek
Patched in > 4.2.0 < 5.0.0 || >= 5.0.3
Dependency of @nest-modules/mailer
Path @nest-modules/mailer > css-inliner > less > request > hawk > sntp > hoek
More info https://npmjs.com/advisories/566
I have a simple unauthenticated transport on a linux server that I want to use. All I need to do change the port and secure options on the transport but I am not sure where to do it. I tried to change them in the defaults section but that did not work. I would like to do it in the MailerModule section of the app.module.ts if possible and not have to dig into the NodeMailer stuff.
Thanks in advance.
I want to use nodemailer.createTransport()
so I can implement nodemailer-mailgun-transport
in the transport
field inside MailerModule
but I can't seem to be able to go forward because the current release won't support it. However, I noticed that release 1.2.0 should have the changes required for me to implement this.
Is there a reason that release is not yet on the respective package managers? Is there another way I can get these changes to make this work?
Thanks!
Can we send custom headers with current version ?
For add custom senders like mandrill, etc...
Hello, trying to update the package to use with NestJS V6
Version: "@nest-modules/mailer": "^1.1.2"
Here is my config
imports: [
MailerModule.forRoot(
{
transport: `smtps://${process.env.MAIL_USER}:${process.env.MAIL_PASS}@${process.env.MAIL_HOST}`,
defaults:
{
from: `"System Administrator" <${process.env.MAIL_FROM}>`,
}
}
)
],
Here is where the error is occuring
return this.mailerService.sendMail(
{
to: user.email,
subject,
text,
}
);
Here is the error I am receiving from the TS compiler:
src/user/user.service.ts:51:17 - error TS2345: Argument of type '{ to: string; subject: string; text: string; }' is not assignable to parameter of type 'ISendMailOptions'.
Object literal may only specify known properties, and 'to' does not exist in type 'ISendMailOptions'.
51 to: user.email,
~~~~~~~~~~~~~~
at createTSError (C:\Users\USERNAME\Development\xhauler\server\node_modules\ts-node\src\index.ts:226:12)
at getOutput (C:\Users\USERNAME\Development\xhauler\server\node_modules\ts-node\src\index.ts:335:40)
at Object.compile (C:\Users\USERNAME\Development\xhauler\server\node_modules\ts-node\src\index.ts:368:11)
at Module.m._compile (C:\Users\USERNAME\Development\xhauler\server\node_modules\ts-node\src\index.ts:414:43)
at Module._extensions..js (internal/modules/cjs/loader.js:699:10)
at Object.require.extensions.(anonymous function) [as .ts] (C:\Users\USERNAME\Development\xhauler\server\node_modules\ts-node\src\index.ts:417:12)
at Module.load (internal/modules/cjs/loader.js:598:32)
at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
at Function.Module._load (internal/modules/cjs/loader.js:529:3)
at Module.require (internal/modules/cjs/loader.js:636:17)
Example was working earlier with Nest 5.4 and V1.0.3
Am I missing a step in the migration process?
Regards
I am proposing the idea of importing other files into template.
{{ @import 'style.css' }}
{{ @import 'header.hbs' }}
...
{{ @import 'footer.hbs' }}
css
files into the templateHey!
I'm wondering if you are available to send a mail by an smtp server with a different e-mail address then what is really sent from. Generally speaking, I know it's prohibited in order not to be able to send phishing or any other destructive emails, but it would be very useful for sending out contact forms:
Let's say you have your transport declared as this:
smtps://[email protected]:[email protected]
If a user sends an e-mail through contact form, it would be really good if the smtp server could send an email to itself but with in the user's name and e-mail address like:
from: "User Someone" <[email protected]>
instead of:
from: "me" <[email protected]>
I know that this - in theory - should be achievable as I've done it by PHP mailer plugin, but of course, in php environment.
Any guesses if it's possible?
I declare Mailer module in my AppModule:
MailerModule.forRoot({
transport: `smtps://${configService.get('MAIL_USER')}:${configService.get('MAIL_PASSWORD')}@${configService.get('MAIL_SMTP_HOST')}`,
defaults: {
from: '"test" <[email protected]>',
},
template: {
dir: __dirname + '/templates',
adapter: new HandlebarsAdapter(), // or new PugAdapter()
options: {
strict: true,
},
},
}),
Then in UserService:
constructor(private readonly mailerService: MailerService) {}
I have a problem with circular dependency but when I try to fix throw error:
Nest can't resolve dependencies of the UserService (?). Please make sure that the argument MailerService at index [0] is available in the UserModule context.
Any help?
I managed to deal with applying attachments to the mail with the help of the nodemailer documentation but it would be really nice for newcomers to actually know about it from the nest-modules/mailer documentation.
The iSendMailOptions should be extended with something similiar to this:
export interface ISendMailOptions extends SendMailOptions {
to?: string;
from?: string;
subject?: string;
text?: string;
html?: string;
template?: string;
context?: {
[name: string]: any;
};
attachments?: {
filename: string,
content?: Stream,
path?: string,
contentType: string
}
}
And there could be a documentation for it like in the nodemailer documentation. Other than that, love this package!
This patch release change is actually a bug/breaking change.
Mail.Options
includes from?: string | Address;
, to?: string | Address | Array<string | Address>;
, etc... but this change locks the options down so that only strings are accepted.
Before this patch release I had code with from: { name: 'My Site', address: this.confirmEmail },
which after upgrading now instead emits a TypeScript error of Type '{ name: string; address: string; }' is not assignable to type 'string'.
The currently published npm package was release 4 months ago. There were a few changes in the last month that have not been pushed out to npm.
cat node_modules/@nest-modules/mailer/package.json | grep version
"version": "0.4.1",
cat node_modules/@nest-modules/mailer/dist/interfaces/mailer-options.interface.d.ts
import { ModuleMetadata, Type } from '@nestjs/common/interfaces';
export interface MailerModuleOptions {
transport?: any;
defaults?: any;
templateDir?: string;
templateOptions?: TemplateEngineOptions;
}
export interface TemplateEngineOptions {
engine?: string;
engineAdapter?: Function;
precompiledTemplates?: {
[templateName: string]: (context: any) => any;
};
}
export interface MailerOptionsFactory {
createMailerOptions(): Promise<MailerModuleOptions> | MailerModuleOptions;
}
export interface MailerModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
useExisting?: Type<MailerOptionsFactory>;
useClass?: Type<MailerOptionsFactory>;
useFactory?: (...args: any[]) => Promise<MailerModuleOptions> | MailerModuleOptions;
inject?: any[];
}
export declare type RenderCallback = (err?: any, body?: string) => any;
Note that the engineConfig
type is missing from TemplateEngineOptions
Have you plan to upgrade dependencies to Nestjs 6 ?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.