Compare commits
No commits in common. "master" and "v1" have entirely different histories.
|
@ -7,6 +7,3 @@
|
||||||
._*
|
._*
|
||||||
.idea
|
.idea
|
||||||
.vscode
|
.vscode
|
||||||
|
|
||||||
package-lock.json
|
|
||||||
node_modules
|
|
41
Readme.md
41
Readme.md
|
@ -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>'
|
|
||||||
})
|
|
||||||
|
|
||||||
```
|
|
76
index.js
76
index.js
|
@ -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',
|
|
||||||
username: 'no-reply',
|
|
||||||
pass: ''
|
|
||||||
}
|
}
|
||||||
}
|
this.smtp = mailx.transport(host, port, mail, passwd)
|
||||||
|
|
||||||
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)
|
||||||
|
} else {
|
||||||
|
defer.resolve(res)
|
||||||
}
|
}
|
||||||
) {
|
})
|
||||||
if (!this.#to) {
|
return defer.promise
|
||||||
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,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"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue