重构mail模块, 更换依赖为nodemailer
parent
9701b3c8d8
commit
b207971b6e
|
@ -7,3 +7,6 @@
|
||||||
._*
|
._*
|
||||||
.idea
|
.idea
|
||||||
.vscode
|
.vscode
|
||||||
|
|
||||||
|
package-lock.json
|
||||||
|
node_modules
|
80
index.js
80
index.js
|
@ -4,42 +4,72 @@
|
||||||
* @date 2020/09/18 15:59:31
|
* @date 2020/09/18 15:59:31
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import mailx from 'mailx'
|
import nodemailer from 'nodemailer'
|
||||||
|
|
||||||
export default class Sendmail {
|
const DEFAULT_CONFIG = {
|
||||||
constructor({ host, port, mail, passwd }) {
|
host: 'smtp.example.com',
|
||||||
if (!host || !port || !mail || !passwd) {
|
port: 465,
|
||||||
throw new Error('smtp options [host, port, mail, passwd] is required.')
|
secure: true,
|
||||||
}
|
auth: {
|
||||||
this.smtp = mailx.transport(host, port, mail, passwd)
|
user: 'no-reply@example.com',
|
||||||
|
username: 'no-reply',
|
||||||
|
pass: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Mailer {
|
||||||
|
#smtp = null
|
||||||
|
|
||||||
|
#from = ''
|
||||||
|
#to = ''
|
||||||
|
|
||||||
|
constructor(opts) {
|
||||||
|
this.#smtp = nodemailer.createTransport(opts)
|
||||||
|
this.#from = `${opts.auth.username || 'no named'}"<${opts.auth.user}>"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发件人
|
// 发件人
|
||||||
from(info) {
|
from(email, username) {
|
||||||
this.mail = mailx.message()
|
this.#from = `${username || 'no named'}"<${email}>"`
|
||||||
this.mail.setFrom(info.name, info.mail)
|
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
// 收件人
|
// 收件人
|
||||||
to(info) {
|
to(email, username) {
|
||||||
this.mail.addTo(info.name, info.mail)
|
this.#to = `${username || 'no named'}"<${email}>"`
|
||||||
|
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发送正文
|
// 发送正文
|
||||||
send(mail) {
|
send(
|
||||||
this.mail.setSubject(mail.subject)
|
mail = {
|
||||||
this.mail.setHtml(mail.content)
|
subject: 'example mail',
|
||||||
var defer = Promise.defer()
|
text: 'example mail plain content',
|
||||||
this.smtp.send(this.mail, function(err, res) {
|
html: '<p>example mail html content</p>'
|
||||||
if (err) {
|
}
|
||||||
defer.reject(err)
|
) {
|
||||||
} else {
|
if (!this.#to) {
|
||||||
defer.resolve(res)
|
throw new Error('the email address send to is empty!')
|
||||||
}
|
}
|
||||||
})
|
|
||||||
return defer.promise
|
mail.from = this.#from
|
||||||
|
mail.to = this.#to
|
||||||
|
|
||||||
|
this.#to = ''
|
||||||
|
|
||||||
|
return this.#smtp.sendMail(mail)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const MailModule = {
|
||||||
|
name: 'mail',
|
||||||
|
install(conf = {}) {
|
||||||
|
if (!conf.auth) {
|
||||||
|
throw new Error('mail auth account must not be empty.')
|
||||||
|
}
|
||||||
|
|
||||||
|
let smtp = Object.assign({}, DEFAULT_CONFIG, conf)
|
||||||
|
|
||||||
|
return new Mailer(smtp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
16
package.json
16
package.json
|
@ -1,11 +1,19 @@
|
||||||
{
|
{
|
||||||
"name": "@gm5/mail",
|
"name": "@gm5/mail",
|
||||||
"version": "1.0.0",
|
"version": "2.0.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "邮件收发管理",
|
"description": "邮件收发管理",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"author": "yutent",
|
"author": "yutent",
|
||||||
"keywords": ["fivejs", "controller", "http"],
|
"keywords": [
|
||||||
"repository": "https://github.com/bytedo/gmf.mail.git",
|
"fivejs",
|
||||||
"license": "MIT"
|
"gm5",
|
||||||
|
"mail",
|
||||||
|
"sendmail"
|
||||||
|
],
|
||||||
|
"repository": "https://git.wkit.fun/gm5/mail.git",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"nodemailer": "^6.9.7"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue