重构mail模块, 更换依赖为nodemailer

master
yutent 2023-11-02 10:37:51 +08:00
parent 9701b3c8d8
commit b207971b6e
3 changed files with 70 additions and 29 deletions

3
.gitignore vendored
View File

@ -7,3 +7,6 @@
._*
.idea
.vscode
package-lock.json
node_modules

View File

@ -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)
}
}

View File

@ -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"
}
}