https://github.com/lzwme/node-exchange-mailer
基于 node-ews 封装的 EWS 邮件发送 API 方法。
https://github.com/lzwme/node-exchange-mailer
ews ews-api exchange mailer nodemailer send sendmail
Last synced: about 1 year ago
JSON representation
基于 node-ews 封装的 EWS 邮件发送 API 方法。
- Host: GitHub
- URL: https://github.com/lzwme/node-exchange-mailer
- Owner: lzwme
- License: mit
- Created: 2021-01-15T08:55:33.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-07-30T07:19:48.000Z (almost 2 years ago)
- Last Synced: 2025-04-23T22:08:49.012Z (about 1 year ago)
- Topics: ews, ews-api, exchange, mailer, nodemailer, send, sendmail
- Language: TypeScript
- Homepage: https://lzw.me/a/nodejs-stmp-exchange-email-send.html
- Size: 48.8 KB
- Stars: 4
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://lzw.me)
[][npm-url]
# node-exchange-mailer
[![NPM version][npm-badge]][npm-url]
[![node version][node-badge]][node-url]
[![npm download][download-badge]][download-url]
[![GitHub issues][issues-badge]][issues-url]
[![GitHub forks][forks-badge]][forks-url]
[![GitHub stars][stars-badge]][stars-url]
[![minzipped size][bundlephobia-badge]][bundlephobia-url]
使用 nodejs 发送基于 EWS(Microsoft Exchange Web Serveice) 邮件服务的邮件。
基于 `node-ews` 封装的 EWS 邮件发送 API 方法。
## 安装
```bash
# use npm
npm add @lzwme/node-exchange-mailer
# or use yarn
yarn add @lzwme/node-exchange-mailer
```
## 使用示例
### 1. 示例一:使用账号和密码发送邮件
```js
const { sendMailByEws } = require('@lzwme/node-exchange-mailer');
const options = {
subject: '[ews]邮件主题测试',
html: 'HTML 格式内容,优先级高于 text',
/** TEXT 文本格式邮件正文内容(优先级低于 html 参数) */
text: 'text',
/** 收件人列表 */
to: 'xa@lzw.me',
/** 抄送人列表 */
cc: 'xb@lzw.me, xc@lzw.me',
/** 密送人列表 */
bcc: 'xd@lzw.me, xe@lzw.me',
// text: '纯文本格式内容',
ewsConfig: {
username: 'myuser@lzw.me',
password: 'mypassword',
host: 'https://ews.lzw.me',
},
};
sendMailByEws(options).then((result) => console.log(result));
```
### 2. 示例二:使用 `ntlm` 授权模式发送邮件,避免明文密码被直接泄漏
根据明文密码生成 `ntlm` 认证模式所需的密钥:
```js
const { genNtlmHashedPwd } = require('@lzwme/node-exchange-mailer');
const password = 'mypassword'; // process.argv.slice(2)[0];
const { nt_password, lm_password } = genNtlmHashedPwd(password, true);
// => password: mypassword
// => nt_password: a991ae45aa987a1a48c8bdc1209ff0e7
// => lm_password: 74ac99ca40ded420dc1a73e6cea67ec5
```
配置 `nt_password` 和 `lm_password` 字段,基于 ntlm 认证模式发送邮件:
```js
const { sendMailByEws } = require('@lzwme/node-exchange-mailer');
const options = {
subject: '[ews]邮件 ntlm 测试',
to: 'xa@lzw.me',
html: 'HTML 格式内容,优先级高于 text',
ewsConfig: {
host: 'https://ews.lzw.me',
username: 'myuser@lzw.me',
/** 密码加密后的秘钥(NTLMAuth.nt_password)。为字符串时,应为 hex 编码结果 */
nt_password: 'a991ae45aa987a1a48c8bdc1209ff0e7',
/** 密码加密后的秘钥(NTLMAuth.lm_password)。为字符串时,应为 hex 编码结果 */
lm_password: '74ac99ca40ded420dc1a73e6cea67ec5',
},
};
sendMailByEws(options).then((result) => console.log(result));
```
### 示例三:发送带附件的邮件
```js
const { sendMailByEws } = require('@lzwme/node-exchange-mailer');
const path = require('path');
const options = {
subject: '[ews]邮件附件测试',
html: [
`HTML 格式内容,包含附件: https://lzw.me`,
`
`,
].join('
'),
to: 'xa@lzw.me',
ewsConfig: {
host: 'https://ews.lzw.me',
username: 'myuser@lzw.me',
nt_password: 'a991ae45aa987a1a48c8bdc1209ff0e7',
lm_password: '74ac99ca40ded420dc1a73e6cea67ec5',
},
soapHeader: {
't:RequestServerVersion': {
attributes: {
Version: 'Exchange2013_SP1', // Exchange2007<_SP1>, Exchange2010<_SP1>, , Exchange2013<_SP1>
},
},
},
/**
* 附件列表
* {@link https://github.com/CumberlandGroup/node-ews/issues/40 | 发送附件参考 }
*/
attachments: [
{
/** 附件名称 */
Name: 'lzw.me.txt',
/** 附件类型(如文本: text/plain) */
ContentType: 'text/plain',
/** 附件内容(请使用 base64 编码) */
Content: 'ZmlsZSBhdHRhY2htZW50LiAtIHRlc3QgYnkgaHR0cHM6Ly9sencubWU=',
IsInline: false,
},
{
/** 附件名称 */
Name: 'lzwme.png',
/** 附件类型(如文本: text/plain) */
ContentType: 'image/png',
/** 附件内容(使用 base64 编码) */
Content: readFileSync(path.resolve(__dirname, './lzwme-144x144.png'), {
encoding: 'base64',
}),
IsContactPhoto: false,
IsInline: true,
ContentId: 'png01',
},
],
};
sendMailByEws(options).then((result) => console.log(result));
```
### 示例四:发送 smtp 协议的邮件
本仓库基于 `nodemailer` 简单封装了一个 smtp 协议发送邮件的方法。用法如下:
安装 `nodemailer` 依赖:
```bash
yarn add nodemailer
```
发送 smtp 协议的邮件示例:
```js
const { sendMailBySmtp } = require('@lzwme/node-exchange-mailer');
const path = require('path');
const options = {
subject: '[smtp]Subject for test',
/** HTML 格式邮件正文内容 */
html: [
`email content for test: https://lzw.me`,
`
`,
].join('
'),
/** TEXT 文本格式邮件正文内容 */
text: '',
to: 'l@lzw.me',
/** 附件列表 */
attachments: [
{
filename: 'lzwme.png',
cid: 'png01',
path: path.resolve(__dirname, 'lzwme-144x144.png'),
},
{
filename: 'lzwme.txt',
content: '邮件内容,test by lzw.me',
},
],
};
const smtpConfig = {
// service: 'qq',
host: 'smtp.qq.com', // QQ: smtp.qq.com; 网易: smtp.163.com
port: 465, // 端口号。QQ邮箱 465,网易邮箱 25
secure: true,
auth: {
user: 'xxx@qq.com', // 邮箱账号
pass: 'xxxxxx', // 邮箱的授权码
},
};
sendMailBySmtp(options, smtpConfig).then((result) => console.log(result));
```
## 扩展参考
- [使用 node.js 发送基于 STMP 与 MS Exchange 邮件的方法](https://lzw.me/a/nodejs-stmp-exchange-email-send.html)
- [EWS reference for Exchange](https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/ews-reference-for-exchange)
- [createitem-operation-email-message](https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/createitem-operation-email-message)
## License
`@lzwme/node-exchange-mailer` is released under the MIT license.
该插件由[志文工作室](https://lzw.me)开发和维护。
[stars-badge]: https://img.shields.io/github/stars/lzwme/node-exchange-mailer.svg
[stars-url]: https://github.com/lzwme/node-exchange-mailer/stargazers
[forks-badge]: https://img.shields.io/github/forks/lzwme/node-exchange-mailer.svg
[forks-url]: https://github.com/lzwme/node-exchange-mailer/network
[issues-badge]: https://img.shields.io/github/issues/lzwme/node-exchange-mailer.svg
[issues-url]: https://github.com/lzwme/node-exchange-mailer/issues
[npm-badge]: https://img.shields.io/npm/v/@lzwme/node-exchange-mailer.svg?style=flat-square
[npm-url]: https://npmjs.org/package/@lzwme/node-exchange-mailer
[node-badge]: https://img.shields.io/badge/node.js-%3E=_10.0.0-green.svg?style=flat-square
[node-url]: https://nodejs.org/download/
[download-badge]: https://img.shields.io/npm/dm/@lzwme/node-exchange-mailer.svg?style=flat-square
[download-url]: https://npmjs.org/package/@lzwme/node-exchange-mailer
[bundlephobia-url]: https://bundlephobia.com/result?p=@lzwme/node-exchange-mailer@latest
[bundlephobia-badge]: https://badgen.net/bundlephobia/minzip/@lzwme/node-exchange-mailer@latest