Compare commits

..

No commits in common. "master" and "v1" have entirely different histories.
master ... v1

4 changed files with 33 additions and 107 deletions

3
.gitignore vendored
View File

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

View File

@ -1,45 +1,12 @@
![module info](https://nodei.co/npm/@gm5/controller.png?downloads=true&downloadRank=true&stars=true)
![downloads](https://img.shields.io/npm/dt/@gm5/mail.svg) # @gm5/controller
![version](https://img.shields.io/npm/v/@gm5/mail.svg)
# @gm5/mail > 控制器基类。
> 一个简单的邮件发送模块, 可用于发送系统邮件, 如注册验证等。
## 安装 ## 安装
```bash ```bash
npm i @gm5/mail npm install @gm5/controller
``` ```
## 使用
```js
import { createApp } from '@gm5/code'
import { MailModule } from '@gm5/mail'
var app = createApp()
app.install(MailModule, {
auth: {
user: 'example@example.com',
username: 'example',
pass: '123456'
}
})
.run()
// in controller
this.context.$$mail
.to('tom@xx.com', 'tom')
.send({
subject: 'hello',
text: 'how are you?',
html: '<p>how are you?</p>'
})
```

View File

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