前段時間有個很普通的項目須要發郵件的功能,並且是剛開始學nodejs,因此只是搜索了下用什麼好的庫能實現,就找到了nodemailer了。這篇文章主要是記錄一下使用的過程和經驗。
這裏就先上配置javascript
nodejs: v6.9.4html
npm: 3.10.10java
nodemailer: ^4.1.0node
const params = { host: 'smtp.163.com', // 設置服務 port: 465, // 端口 sercure: true, // 是否使用TLS,true,端口爲465,不然其餘或者568 auth: { user: config.user, // 郵箱和密碼 pass: config.emailPwd } } // 郵件信息 const mailOptions = { from: config.user, // 發送郵箱 to: config.emailTo, // 接受郵箱 subject: config.title, // 標題 html: config.html // 內容 } // 發送郵件 const transporter = nodemailer.createTransport(params) transporter.sendMail(mailOptions, (error, info) => { if (error) { return console.log(error); } console.log('Message %s sent: %s', info.messageId, info.response); // success // ... })
按照這個格式,發送成功是沒什麼問題的。不過在密碼這裏要注意,不是郵箱的登陸密碼。npm
163郵箱的話,要開啓POP3/SMTP服務,在設置 --> POP3/SMTP/IMAP頁面,設置。開通後會有個受權碼的,配置裏的密碼,就是用這個受權碼api
qq郵箱的話,一樣也要開啓這個服務,設置 --> 帳戶 --> POP3服務,點擊開啓,就會有個受權碼,若是忘了記錄,在開啓服務下面有個「生成受權碼」的,能夠獲取到的。安全
這樣qq和163就能開啓了服務器
若是是Gmail的話,這個就有點麻煩了,在nodemailer官網也有說到:app
Gmail either works well or it does not work at all. It is probably easier to switch to an alternative service instead of fixing issues with Gmail. If Gmail does not work for you then don't use it.less
我這裏用本身的谷歌郵箱試了下,在上面的配置修改一下
const params = { service: 'Gmail', // 注意,host修改成service port: 465, // 端口 sercure: true, // 是否使用TLS,true,端口爲465,不然其餘或者568 auth: { user: config.user, // 郵箱和密碼 pass: config.emailPwd } }
若是這樣不行的話,打開這個連接,開啓谷歌容許不夠安全應用
若是還不行的話,就要配置谷歌的XOAuth2了
就算使用了這種方法,也未必可能成功
在這裏建立一個憑據,選擇OAuth客戶端ID,應用類型選擇「網頁應用」,而後填寫名稱,重定向URI要記得填寫,我填寫的是這個"https://developers.google.com/oauthplayground"
而後記錄下id和密鑰
填寫以前的id和密鑰
而後就是step1,選擇api
到step2,點擊'Exchange authorization code for tokens'按鈕,生成token,這樣就完成了。
回到nodejs,重寫下配置
const params = { service: 'Gmail', auth: { type: 'OAuth2', user: config.user, clientId: config.clientId, clientSecret: config.clientSecret, refreshToken: config.refreshToken, accessToken: config.accessToken } }
我這裏測試是成功的(本地服務器),若是還不成功的話,這個你只能在搜搜有什麼解決方法了。
這裏列出我本身用過的功能,nodemailer
看官方介紹,貌似是不少功能的
// 在配置發送信息的時候 const mailOptions = { from: config.user, // 發送郵箱 to: config.emailTo + ', ' + config.emailTo2 // 用', '分隔 }
const mailOptions = { .... html: config.html // 這裏能夠是html字符串 }
能夠同時發送多個
const mailOptions = { ... attachments: [{ filename: 'test.txt', content: 'hello world!' },{ filename: 'test.txt', content: 'hello world!', contentType: 'text/plain' }] }
若是直接在圖片上寫上圖片地址,在 qq 和谷歌郵箱都是無法直接顯示的。qq 郵箱有一個查看圖片的按鈕,點擊後才能顯示。
若是使用附件的形式,是能夠直接顯示圖片的。
// 僞代碼 var img = require("fs").readFileSync('./images/1.jpeg') attachments: [ { filename: '1.jpeg', content: img, cid: '00000001' } ] html: `<img src='cid:00000001' />`
官方給出的配置
剛使用nodemailer
踩了很多坑,弄了我一天,Gmail
不怎麼穩定,後面主管就叫換成qq
了,聽說qq
企業郵箱發送郵件的次數比較多。這篇文章就是記錄下使用nodemailer
的一些經驗。