thinkjs 傳送郵件

yaimeet發表於2019-08-22

專案中傳送郵件是很常用的功能,今天記錄一下thinkjs中傳送郵件的實現。

安裝依賴

npm install think-email -save

think-email 是基於 nodemailer 實現的thinkjs中的擴充包,可以在thinkjs中方便快速的使用。

配置傳送郵件資訊

配置檔案 src/config/config.環境變數.js or src/comon/config/config.環境變數.js 中新增如下程式碼:

之所以寫在環境變數檔案中,是因為涉及到私密資訊

module.exports = {
  workers: 0,
  // ......
  email: {
    transport: {
      service: '126',
      auth: {
        user: 'xxx@126.com', # 你的郵箱賬號
        pass: '******' # 你的郵箱賬號密碼
      }
    }
  }
};

新增email.js控制器

module.exports = class extends Base {
  /**
   * 初始化傳送郵件引數
   * @returns
   */
  initTransport() {
    const emailConfig = this.config('email');
    return emailConfig.transport;
  }

  /**
   * 傳送郵件驗證碼
   * @param to 發給誰
   * @param subject 標題
   * @param html 內容
   * @returns {Promise<void>}
   */
  async sendEmailCode(to, subject, html) {
    const transport = this.initTransport();
    await this.sendEmail(transport, {
      from: transport.auth.user,
      to,
      subject,
      html
    });
  }
};

使用

在需要傳送郵件驗證碼的地方,呼叫 emai.js 控制器的 sendEmailCode 方法即可。

如果是單模組專案,使用如下:

const emailCtrl = this.controller('email');
await emailCtrl.sendEmailCode(email, '郵箱標題', '郵箱內容');

如果說是多模組,只需要在上面程式碼中的第一行呼叫 controller 時加第二個引數 模組名 即可,詳情可參考官方文件。

注意事項

配置檔案中配置的郵箱,和 發件人,要保持一致,不然會報錯。

參考連結

本作品採用《CC 協議》,轉載必須註明作者和本文連結
如有不對之處,還請不吝指出,非常感謝。

相關文章