mirror of https://github.com/wekan/wekan
The Open Source kanban (built with Meteor). Keep variable/table/field names camelCase. For translations, only add Pull Request changes to wekan/i18n/en.i18n.json , other translations are done at https://transifex.com/wekan/wekan only.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.7 KiB
78 lines
2.7 KiB
//var nodemailer = require('nodemailer');
|
|
|
|
// buffer each user's email text in a queue, then flush them in single email
|
|
Meteor.startup(() => {
|
|
Notifications.subscribe('email', (user, title, description, params) => {
|
|
// add quote to make titles easier to read in email text
|
|
const quoteParams = _.clone(params);
|
|
['card', 'list', 'oldList', 'board', 'comment'].forEach(key => {
|
|
if (quoteParams[key]) quoteParams[key] = `"${params[key]}"`;
|
|
});
|
|
['timeValue', 'timeOldValue'].forEach(key => {
|
|
quoteParams[key] = quoteParams[key] ? `${params[key]}` : '';
|
|
});
|
|
|
|
const lan = user.getLanguage();
|
|
const subject = TAPi18n.__(title, params, lan); // the original function has a fault, i believe the title should be used according to original author
|
|
const existing = user.getEmailBuffer().length > 0;
|
|
const htmlEnabled =
|
|
Meteor.settings.public &&
|
|
Meteor.settings.public.RICHER_CARD_COMMENT_EDITOR !== false;
|
|
const text = `${existing ? `\n${subject}\n` : ''}${
|
|
params.user
|
|
} ${TAPi18n.__(description, quoteParams, lan)}\n${params.url}`;
|
|
|
|
user.addEmailBuffer(htmlEnabled ? text.replace(/\n/g, '<br/>') : text);
|
|
|
|
// unlike setTimeout(func, delay, args),
|
|
// Meteor.setTimeout(func, delay) does not accept args :-(
|
|
// so we pass userId with closure
|
|
const userId = user._id;
|
|
Meteor.setTimeout(() => {
|
|
const user = Users.findOne(userId);
|
|
|
|
// for each user, in the timed period, only the first call will get the cached content,
|
|
// other calls will get nothing
|
|
const texts = user.getEmailBuffer();
|
|
if (texts.length === 0) return;
|
|
|
|
// merge the cached content into single email and flush
|
|
const html = texts.join('<br/>\n\n');
|
|
user.clearEmailBuffer();
|
|
try {
|
|
/*
|
|
if (process.env.MAIL_SERVICE !== '') {
|
|
let transporter = nodemailer.createTransport({
|
|
service: process.env.MAIL_SERVICE,
|
|
auth: {
|
|
user: process.env.MAIL_SERVICE_USER,
|
|
pass: process.env.MAIL_SERVICE_PASSWORD
|
|
},
|
|
})
|
|
let info = transporter.sendMail({
|
|
to: user.emails[0].address.toLowerCase(),
|
|
from: Accounts.emailTemplates.from,
|
|
subject,
|
|
html,
|
|
})
|
|
} else {
|
|
Email.send({
|
|
to: user.emails[0].address.toLowerCase(),
|
|
from: Accounts.emailTemplates.from,
|
|
subject,
|
|
html,
|
|
});
|
|
}
|
|
*/
|
|
Email.send({
|
|
to: user.emails[0].address.toLowerCase(),
|
|
from: Accounts.emailTemplates.from,
|
|
subject,
|
|
html,
|
|
});
|
|
} catch (e) {
|
|
return;
|
|
}
|
|
}, process.env.EMAIL_NOTIFICATION_TIMEOUT || 30000);
|
|
});
|
|
});
|
|
|