Email.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const nodemailer = require('nodemailer')
  2. const config = require('../../config.json')
  3. const path = require('path')
  4. const Logger = require('../../lib/Logger')
  5. const logger = new Logger(path.join(__dirname, '../../logs/Email.log'), 'INFO')
  6. /**
  7. * 尝试用多个邮箱配置发送邮件
  8. * @param {string} email - 收件人邮箱
  9. * @param {string} subject - 邮件主题
  10. * @param {string} content - 邮件内容(支持 HTML)
  11. */
  12. async function sendEmail(email, subject, content) {
  13. return new Promise(async (resolve, reject) => {
  14. const mail = {
  15. to: email,
  16. subject: subject,
  17. html: content
  18. }
  19. if (!Array.isArray(config.email) || config.email.length === 0) {
  20. logger.error('邮件发送失败:未配置可用邮箱账号')
  21. return resolve(false)
  22. }
  23. // 遍历所有邮箱配置
  24. for (let i = 0; i < config.email.length; i++) {
  25. const currentConfig = config.email[i];
  26. const transporter = nodemailer.createTransport({
  27. host: currentConfig.host,
  28. port: currentConfig.port,
  29. auth: {
  30. user: currentConfig.user,
  31. pass: currentConfig.password
  32. }
  33. })
  34. mail.from = currentConfig.from
  35. try {
  36. await transporter.sendMail(mail)
  37. logger.info(`${email}邮件发送成功,使用账号: ${currentConfig.user}`)
  38. return resolve()
  39. } catch (error) {
  40. logger.error(`邮件发送失败 (${currentConfig.user}),错误:`, error.stack)
  41. if (i === config.email.length - 1) {
  42. // 最后一个配置也失败了
  43. logger.error(`邮件发送失败,所有邮箱配置均不可用`)
  44. return resolve(false)
  45. }
  46. // 否则继续下一个配置
  47. }
  48. }
  49. return resolve(false)
  50. })
  51. }
  52. module.exports = sendEmail