smtp-protocol中文文档|smtp-protocol js中文教程|解析

npm npmdoc 2年前 (2021-12-18) 501次浏览

smtp-protocol中文文档|smtp-protocol js中文教程|解析

安装命令:npm i smtp-protocol

smtp-protocol

编写 smtp 客户端和服务器

该模块本身不中继任何消息或执行磁盘 I/O。

构建状态

例子

服务器

var smtp = require('smtp-protocol');
 
var server = smtp.createServer(function (req) {
    req.on('to', function (to, ack) {
        var domain = to.split('@')[1] || 'localhost';
        if (domain === 'localhost') ack.accept()
        else ack.reject()
    });
    
    req.on('message', function (stream, ack) {
        console.log('from: ' + req.from);
        console.log('to: ' + req.to);
        
        stream.pipe(process.stdout, { end : false });
        ack.accept();
    });
});
 
server.listen(9025);

用法:

$ node example/server.js 

别处:

$ nc localhost 9025
250 beep
helo
250 
mail from:<beep@localhost>
250 
rcpt to:<boop@localhost>
250 
data
354 
Beep boop.
I am a computer.
.
250 
quit
221 Bye!

同时:

from: beep@localhost
to: boop@localhost
Beep boop.
I am a computer.

客户

var smtp = require('smtp-protocol');
var fs = require('fs');
 
smtp.connect('localhost', 9025, function (mail) {
    mail.helo('example.com');
    mail.from('substack@example.com');
    mail.to('root@example.com');
    mail.data();
    fs.createReadStream('/etc/issue').pipe(mail.message());
    mail.quit();
});

输出:

$ node example/client.js
[ 'beep ESMTP Postfix (Ubuntu)' ]
{ helo: 250,
  from: 250,
  to: 250,
  data: 354,
  message: 250,
  quit: 221 }

服务器方法

var smtp = require(‘smtp-protocol’)

smtp.createServer(opts, cb)

返回一个新的,net.Server这样你就可以.listen()在一个端口上。

可选:

  • opts.domain – 在 hello 消息中使用的域
  • opts.tls – 在开始时监听 TLS 而不是使用 STARTTLS 升级
  • opts.key, opts.cert, opts.pfx– 配置 tls

cb(req)触发新连接。请参阅下面的“请求”部分。

服务器请求

事件

每一个可以举办的活动

ack.accept()
如果没有注册侦听器,
除了“消息”之外的每个可确认事件都将隐式调用

如果有任何可确认事件的侦听器,则只有一个侦听器必须调用ack.accept()ack.reject()

‘命令’, cmd, r

每个 smtp 命令都会触发此事件。cmd具有命令名称 as
cmd.namecmd.dataas 命令数据。

如果要覆盖命令的默认行为,请调用
r.preventDefault(),然后调用r.write(code, data)以写入响应以及
r.next()何时应处理下一个命令。

‘问候’,cmd,确认

发射时HELOEHLOLHLO接收到的命令。

用 读取命令的名称cmd.greeting使用 读取可选的主机名参数cmd.hostname

‘来自’,来自,确认

的时发射MAIL FROM:被接收的命令。

from 是作为字符串的发件人的电子邮件地址。

‘到’,到,确认

的时发射RCPT TO:被接收的命令。

to 是作为字符串的收件人的电子邮件地址。

“消息”,流,确认

的时发射DATA被接收的命令。

如果消息请求被接受,消息正文将通过 流式传输
stream

ack.accept()当没有侦听器时,此事件没有隐式

“收到”,确认

DATA命令完成后的正文时发出。

‘重启’

RSET命令重置连接时发出

‘退出’

QUIT命令关闭连接时发出

‘tls’

当客户端将连接升级到 TLS 时发出。

特性

请求来自

发件人的电子邮件地址作为字符串。

请求来自Ext

如果作为字符串发送,则扩展发件人数据。

要求

作为字符串的收件人电子邮件地址数组。

请求到Ext

如果作为字符串发送,则为扩展收件人数据的数组。

请求问候

问候命令。其中一个'helo''ehlo''lhlo'

请求主机名

问候语中指定的主机名。

请求套接字

底层 tcp 套接字。如果您需要使用 验证远程主机的地址,这很方便req.socket.remoteAddress

服务器确认

许多请求事件都有一个尾随ack参数。

如果有任何可确认事件的侦听器,则只有一个侦听器必须调用ack.accept()ack.reject()

请查阅此方便的 SMTP 代码列表,
了解在确认响应中使用哪些代码。

ack.accept(代码=250,消息)

接受命令。执行来自命令的内部阶段状态修改。

ack.reject(代码,消息)

拒绝命令。来自命令的任何暂存状态修改都将被丢弃。

客户方法

对于所有client方法,cb(err, code, lines)随服务器响应触发。

var stream = smtp.connect(host=’localhost’, port=25, options={}, cb)

创建新的 SMTP 客户端连接。

host, port,optionscb由它们在参数数组中的类型检测,因此它们可以按任何顺序排列。cb(client)当连接准备好时触发。

您可以通过提供匹配的字符串参数来使用 unix 套接字/^[.\/]/

或者提供您自己的流opts.stream(流必须已经连接)。

要使用 TLS 建立连接,请设置opts.tlstrue(为了获得更多控制,您还可以指定传递到 的选项tls.connect。)您还可以随时通过调用 将连接升级到 TLS client.startTLS()

默认情况下,与未授权服务器的连接将关闭,错误将作为'error'流对象上的事件发出,但您可以通过执行以下操作来提供自己的授权逻辑:

stream.on('secure', function (ack) {
    if (...) ack.accept()
    else ack.reject()
})

client.helo(主机名,cb)

hostname字符串向服务器打招呼

cb(err, code, lines) 与服务器响应一起触发。

client.from(addr, ext=undefined, cb)

将发件人设置为addr带有可选扩展数据的电子邮件地址ext

cb(err, code, lines) 与服务器响应一起触发。

client.to(addr, ext=undefined, cb)

将收件人设置为addr带有可选扩展数据的电子邮件地址ext

cb(err, code, lines) 与服务器响应一起触发。

客户端数据(CB)

告诉服务器我们将要传输数据。

cb(err, code, lines) 与服务器响应一起触发。

var stream = client.message(cb)

返回一个可写的流以在消息正文中将数据发送到服务器。例如,你可以这样做:

fs.createReadStream('foo.txt').pipe(client.message());

cb(err, code, lines) 与服务器响应一起触发。

client.quit(cb)

要求服务器切断连接。

cb(err, code, lines) 与服务器响应一起触发。

客户端重置(CB)

要求服务器重置连接。

cb(err, code, lines) 与服务器响应一起触发。

client.startTLS(opts={}, cb)

opts通过传递到
将当前连接升级到 TLS
tls.connect(opts)

如果opts.servername未给出,则其值将从 HELO/EHLO 主机名值中获取,否则 TLS 库将抱怨证书名称如何不匹配。

您可能还希望传入opts.ca此处以满足 TLS 机制。

客户端验证(用户名,CB)

为 发送 VRFY username

cb(err, code, lines) 与服务器响应一起触发。

client.login(用户名、密码、authType、cb)

使用给定的用户名和密码登录。authType可以是PLAIN,LOGIN和 之一CRAM-MD5

cb(err, code, lines) 与服务器响应一起触发。

客户事件

“问候”,代码,行

当流初始化时触发。这应该是服务器发送的第一条消息。

‘tls’, clearTextStream

当连接升级到 TLS 时,将触发此事件。

安装

npm做:

npm install smtp-protocol

执照

麻省理工学院

项目贡献人员列表:


极客公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:smtp-protocol中文文档|smtp-protocol js中文教程|解析
喜欢 (0)
.excerpt .focus {display:none}