| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | import nodemailer from 'nodemailer'import { get } from 'lodash-es'import path from 'node:path'import { config } from '@vue-email/compiler'export default {  vueEmail: null,  transport: null,  templates: {},  init() {    if (get(WIKI.config, 'mail.host', '').length > 2) {      let conf = {        host: WIKI.config.mail.host,        port: WIKI.config.mail.port,        name: WIKI.config.mail.name,        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)      this.vueEmail = config(path.join(WIKI.SERVERPATH, 'templates/mail'), {        verbose: false,        options: {          baseUrl: WIKI.config.mail.defaultBaseURL        }      })    } 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 Error('ERR_MAIL_NOT_CONFIGURED')    }    return this.transport.sendMail({      headers: {        'x-mailer': 'Wiki.js'      },      from: `"${WIKI.config.mail.senderName}" <${WIKI.config.mail.senderEmail}>`,      to: opts.to,      subject: opts.subject,      text: opts.text,      html: await this.loadTemplate(opts.template, opts.data)    })  },  async loadTemplate(key, opts = {}) {    try {      return this.vueEmail.render(`${key}.vue`, {        props: opts      })    } catch (err) {      WIKI.logger.warn(err)      throw new Error('ERR_MAIL_RENDER_FAILED')    }  }}
 |