|
|
|
const Bluebird = require('bluebird');
|
|
|
|
const sendmail = Bluebird.promisify(require('sendmail')());
|
|
|
|
const { DM } = require('waliyun');
|
|
|
|
const nodemailer = require('nodemailer');
|
|
|
|
|
|
|
|
let doSendEmail;
|
|
|
|
|
|
|
|
if (syzoj.config.email.method === "sendmail") {
|
|
|
|
doSendEmail = async function send_sendmail(to, subject, body) {
|
|
|
|
await sendmail({
|
|
|
|
from: `${syzoj.config.title} <${syzoj.config.email.options.address}>`,
|
|
|
|
to: to,
|
|
|
|
type: 'text/html',
|
|
|
|
subject: subject,
|
|
|
|
html: body
|
|
|
|
});
|
|
|
|
}
|
|
|
|
} else if (syzoj.config.email.method === "aliyundm") {
|
|
|
|
const dm = DM({
|
|
|
|
AccessKeyId: syzoj.config.email.options.AccessKeyId,
|
|
|
|
AccessKeySecret: syzoj.config.email.options.AccessKeySecret
|
|
|
|
});
|
|
|
|
doSendEmail = async function send_aliyundm(to, subject, body) {
|
|
|
|
const result = await dm.singleSendMail({
|
|
|
|
AccountName: syzoj.config.email.options.AccountName,
|
|
|
|
AddressType: 1,
|
|
|
|
ReplyToAddress: false,
|
|
|
|
ToAddress: to,
|
|
|
|
FromAlias: syzoj.config.title,
|
|
|
|
Subject: subject,
|
|
|
|
HtmlBody: body
|
|
|
|
});
|
|
|
|
if (result.Code != null) {
|
|
|
|
throw new Error("阿里云 API 错误:" + JSON.stringify(result));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (syzoj.config.email.method === "smtp") {
|
|
|
|
const smtpConfig = {
|
|
|
|
host: syzoj.config.email.options.host,
|
|
|
|
port: syzoj.config.email.options.port || 465,
|
|
|
|
secure: (syzoj.config.email.options.port === 465 || !syzoj.config.email.options.port) ? true : false,
|
|
|
|
auth: {
|
|
|
|
user: syzoj.config.email.options.username,
|
|
|
|
pass: syzoj.config.email.options.password,
|
|
|
|
},
|
|
|
|
tls: {
|
|
|
|
rejectUnauthorized: !syzoj.config.email.options.allowUnauthorizedTls,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
const transporter = Bluebird.promisifyAll(nodemailer.createTransport(smtpConfig));
|
|
|
|
|
|
|
|
doSendEmail = async function send_smtp(to, subject, body) {
|
|
|
|
await transporter.sendMailAsync({
|
|
|
|
from: `"${syzoj.config.title}" <${syzoj.config.email.options.username}>`,
|
|
|
|
to: to,
|
|
|
|
subject: subject,
|
|
|
|
html: body
|
|
|
|
});
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
doSendEmail = async () => {
|
|
|
|
throw new Error("邮件发送配置不正确。");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
module.exports.send = doSendEmail;
|