使用 Node.js 的 nodemailer 模塊發(fā)送郵件(支持 QQ、163 等、支持附件)

個(gè)人博客原文:https://bxm0927.github.io/2017/07/21/node-mail/

nodemailer 簡(jiǎn)介

Nodemailer 是 Node.js 應(yīng)用程序的一個(gè)模塊,可以方便地發(fā)送電子郵件。

該項(xiàng)目于 2010 年開(kāi)始,至今已經(jīng)相當(dāng)穩(wěn)定,這也是如今大多數(shù) Node.js 用戶默認(rèn)情況下發(fā)送郵件的解決方案。

使用

# 初始化 pageage.json 文件
$ npm init

# 安裝依賴
$ npm install nodemailer --save

# 運(yùn)行
node app.js

app.js

const nodemailer = require('nodemailer');

// 開(kāi)啟一個(gè) SMTP 連接池
let transporter = nodemailer.createTransport({
    host: 'smtp.qq.com',
    secureConnection: true, // use SSL
    port: 465,
    secure: true, // secure:true for port 465, secure:false for port 587
    auth: {
        user: '80583600@qq.com',
        pass: 'xxx' // QQ郵箱需要使用授權(quán)碼
    }
});

// 設(shè)置郵件內(nèi)容(誰(shuí)發(fā)送什么給誰(shuí))
let mailOptions = {
    from: '"白小明 ??" <80583600@qq.com>', // 發(fā)件人
    to: 'xx1@qq.com, xx2@qq.com', // 收件人
    subject: 'Hello ?', // 主題
    text: '這是一封來(lái)自 Node.js 的測(cè)試郵件', // plain text body
    html: '<b>這是一封來(lái)自 Node.js 的測(cè)試郵件</b>', // html body
    // 下面是發(fā)送附件,不需要就注釋掉
    attachments: [{
            filename: 'test.md',
            path: './test.md'
        },
        {
            filename: 'content',
            content: '發(fā)送內(nèi)容'
        }
    ]
};

// 使用先前創(chuàng)建的傳輸器的 sendMail 方法傳遞消息對(duì)象
transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        return console.log(error);
    }
    console.log(`Message: ${info.messageId}`);
    console.log(`sent: ${info.response}`);
});

效果預(yù)覽

踩坑細(xì)節(jié)

實(shí)踐的時(shí)候遇到許多問(wèn)題,現(xiàn)在列舉如下,若未詳盡,敬請(qǐng)留言交流。

POP3/SMTP服務(wù)、獲取授權(quán)碼(以QQ為例)

首先需要開(kāi)啟郵箱的 POP3/SMTP 服務(wù)。

QQ郵箱需要使用授權(quán)碼,而不是QQ密碼;163 郵箱直接使用163郵箱密碼就行。

進(jìn)入QQ郵箱,設(shè)置-賬戶-開(kāi)啟服務(wù) POP3/SMTP 服務(wù),并生成授權(quán)碼,現(xiàn)在獲取授權(quán)碼需要驗(yàn)證手機(jī)短信。

支持郵箱

理論上支持所有主流郵箱,但我只測(cè)試了 QQ 和 163,都成功了。若其他郵箱出問(wèn)題請(qǐng)留言交流。

535 錯(cuò)誤

Error: Invalid login: 535 Error: authentication failed

認(rèn)證失敗:

  • 可能是賬號(hào)密碼錯(cuò)誤
  • 鏈接資源池時(shí)加 ssl:secureConnection: true,
  • QQ 的 host 是 smtp.qq.com;163 的 host 是 smtp.163.com

553 錯(cuò)誤

Error: Mail command failed: 553 Mail from must equal authorized user

發(fā)件人和認(rèn)證的郵箱地址不一致

  • auth.user 需要與 from 中的郵箱一致
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容