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')
- }
- }
- }
|