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