1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- const nodemailer = require('nodemailer')
- const _ = require('lodash')
- const fs = require('fs-extra')
- const path = require('path')
- /* global WIKI */
- module.exports = {
- transport: null,
- templates: {},
- init() {
- if (_.get(WIKI.config, 'mail.host', '').length > 2) {
- let conf = {
- host: WIKI.config.mail.host,
- port: WIKI.config.mail.port,
- secure: WIKI.config.mail.secure,
- tls: {
- rejectUnauthorized: !(WIKI.config.mail.verifySSL === false)
- }
- }
- if (_.get(WIKI.config, 'mail.user', '').length > 1) {
- conf = {
- ...conf,
- auth: {
- user: WIKI.config.mail.user,
- pass: WIKI.config.mail.pass
- }
- }
- }
- if (_.get(WIKI.config, 'mail.useDKIM', false)) {
- conf = {
- ...conf,
- dkim: {
- domainName: WIKI.config.mail.dkimDomainName,
- keySelector: WIKI.config.mail.dkimKeySelector,
- privateKey: WIKI.config.mail.dkimPrivateKey
- }
- }
- }
- this.transport = nodemailer.createTransport(conf)
- } else {
- WIKI.logger.warn('Mail is not setup! Please set the configuration in the administration area!')
- this.transport = null
- }
- return this
- },
- async send(opts) {
- if (!this.transport) {
- WIKI.logger.warn('Cannot send email because mail is not setup in the administration area!')
- throw new WIKI.Error.MailNotConfigured()
- }
- await this.loadTemplate(opts.template)
- return this.transport.sendMail({
- headers: {
- 'x-mailer': 'Wiki.js'
- },
- from: `"${WIKI.config.mail.senderName}" <${WIKI.config.mail.senderEmail}>`,
- to: opts.to,
- subject: `${opts.subject} - ${WIKI.config.title}`,
- text: opts.text,
- html: _.get(this.templates, opts.template)({
- logo: (WIKI.config.logoUrl.startsWith('http') ? '' : WIKI.config.host) + WIKI.config.logoUrl,
- siteTitle: WIKI.config.title,
- copyright: WIKI.config.company.length > 0 ? WIKI.config.company : 'Powered by Wiki.js',
- ...opts.data
- })
- })
- },
- async loadTemplate(key) {
- if (_.has(this.templates, key)) { return }
- const keyKebab = _.kebabCase(key)
- try {
- const rawTmpl = await fs.readFile(path.join(WIKI.SERVERPATH, `templates/${keyKebab}.html`), 'utf8')
- _.set(this.templates, key, _.template(rawTmpl))
- } catch (err) {
- WIKI.logger.warn(err)
- throw new WIKI.Error.MailTemplateFailed()
- }
- }
- }
|