import { readFileSync } from 'fs-extra'
-import { isArray, merge } from 'lodash'
+import { merge } from 'lodash'
import { createTransport, Transporter } from 'nodemailer'
import { join } from 'path'
-import { EmailPayload } from '@shared/models'
+import { arrayify, root } from '@shared/core-utils'
+import { EmailPayload, UserRegistrationState } from '@shared/models'
import { SendEmailDefaultOptions } from '../../shared/models/server/emailer.model'
-import { isTestInstance } from '../helpers/core-utils'
-import { root } from '@shared/core-utils'
+import { isTestOrDevInstance } from '../helpers/core-utils'
import { bunyanLogger, logger } from '../helpers/logger'
import { CONFIG, isEmailEnabled } from '../initializers/config'
import { WEBSERVER } from '../initializers/constants'
-import { MUser } from '../types/models'
+import { MRegistration, MUser } from '../types/models'
import { JobQueue } from './job-queue'
const Email = require('email-templates')
this.initialized = true
if (!isEmailEnabled()) {
- if (!isTestInstance()) {
+ if (!isTestOrDevInstance()) {
logger.error('Cannot use SMTP server because of lack of configuration. PeerTube will not be able to send mails!')
}
subject: 'Reset your account password',
locals: {
username,
- resetPasswordUrl
+ resetPasswordUrl,
+
+ hideNotificationPreferencesLink: true
}
}
- return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ return JobQueue.Instance.createJobAsync({ type: 'email', payload: emailPayload })
}
addPasswordCreateEmailJob (username: string, to: string, createPasswordUrl: string) {
subject: 'Create your account password',
locals: {
username,
- createPasswordUrl
+ createPasswordUrl,
+
+ hideNotificationPreferencesLink: true
}
}
- return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ return JobQueue.Instance.createJobAsync({ type: 'email', payload: emailPayload })
}
- addVerifyEmailJob (username: string, to: string, verifyEmailUrl: string) {
+ addVerifyEmailJob (options: {
+ username: string
+ isRegistrationRequest: boolean
+ to: string
+ verifyEmailUrl: string
+ }) {
+ const { username, isRegistrationRequest, to, verifyEmailUrl } = options
+
const emailPayload: EmailPayload = {
template: 'verify-email',
to: [ to ],
subject: `Verify your email on ${CONFIG.INSTANCE.NAME}`,
locals: {
username,
- verifyEmailUrl
+ verifyEmailUrl,
+ isRegistrationRequest,
+
+ hideNotificationPreferencesLink: true
}
}
- return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ return JobQueue.Instance.createJobAsync({ type: 'email', payload: emailPayload })
}
addUserBlockJob (user: MUser, blocked: boolean, reason?: string) {
text: `Your account ${user.username} on ${CONFIG.INSTANCE.NAME} has been ${blockedWord}${reasonString}.`
}
- return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ return JobQueue.Instance.createJobAsync({ type: 'email', payload: emailPayload })
}
addContactFormJob (fromEmail: string, fromName: string, subject: string, body: string) {
body,
// There are not notification preferences for the contact form
- hideNotificationPreferences: true
+ hideNotificationPreferencesLink: true
}
}
- return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload })
+ return JobQueue.Instance.createJobAsync({ type: 'email', payload: emailPayload })
+ }
+
+ addUserRegistrationRequestProcessedJob (registration: MRegistration) {
+ let template: string
+ let subject: string
+ if (registration.state === UserRegistrationState.ACCEPTED) {
+ template = 'user-registration-request-accepted'
+ subject = `Your registration request for ${registration.username} has been accepted`
+ } else {
+ template = 'user-registration-request-rejected'
+ subject = `Your registration request for ${registration.username} has been rejected`
+ }
+
+ const to = registration.email
+ const emailPayload: EmailPayload = {
+ to: [ to ],
+ template,
+ subject,
+ locals: {
+ username: registration.username,
+ moderationResponse: registration.moderationResponse,
+ loginLink: WEBSERVER.URL + '/login'
+ }
+ }
+
+ return JobQueue.Instance.createJobAsync({ type: 'email', payload: emailPayload })
}
async sendMail (options: EmailPayload) {
if (!isEmailEnabled()) {
- throw new Error('Cannot send mail because SMTP is not configured.')
+ logger.info('Cannot send mail because SMTP is not configured.')
+ return
}
const fromDisplayName = options.from
htmlToText: {
selectors: [
{ selector: 'img', format: 'skip' },
- { selector: 'a', options: { ignoreHref: true } }
+ { selector: 'a', options: { hideLinkHrefIfSameAsText: true } }
]
},
message: {
subjectPrefix: CONFIG.EMAIL.SUBJECT.PREFIX
})
- const toEmails = isArray(options.to)
- ? options.to
- : [ options.to ]
+ const toEmails = arrayify(options.to)
for (const to of toEmails) {
const baseOptions: SendEmailDefaultOptions = {
}
}
- // overriden/new variables given for a specific template in the payload
+ // overridden/new variables given for a specific template in the payload
const sendOptions = merge(baseOptions, options)
await email.send(sendOptions)