本节提供了 LMTP 对话样例,并带有在该对话中看到的解释。中继上的 LMTP 客户机使用标准的 LMTP 协议与后端存储上的 LMTP 服务器联系。但是,该协议以特定方式使用。例如:
---> LHLO <--- 250 OK |
对 LHLO 邮件没有采取任何操作。回复始终是 250 OK。
---> MAIL FROM: address size=messageSizeInBytes <--- 250 OK |
对创始人地址没有进行任何检查或转换。size= 参数给出了要传送的邮件的大小(以字节为单位)。此邮件的大小与协议中显示的大小完全相同。邮件的大小可以不必完全相同,但是实际邮件的大小不能超过此大小。LMTP 服务器将按此大小分配内存缓冲区以接收邮件。
---> RCPT TO: uid+folder@domain xquota=size,number xdflg=xxx <--- 250 OK |
在收到收件人地址时不对其进行任何检查,但是将生成一个收件人列表以便以后使用。请注意,对于主域中的 uids,地址的 @domain 部分将被忽略,并且 +folder 部分是可选的。这与 MTA 中的邮件存储通道所使用的地址格式相同。
xquota= 参数给出了用户的邮件配额,它包括邮件的最大总大小和最大数目。MTA 提供了在对用户执行 LDAP 查找以进行地址转换时检索到的信息。此信息用于使邮件存储中的配额信息与目录保持同步。获取配额信息不会导致其他性能受到打击。
xdflg= 参数指定了一个数字,该数字可以解释为位字段。这些位将控制传送邮件的方式。例如,值为 2(如果设置)的位将保证邮件的传送,即使用户超出配额。(请注意,xdflg 是内部参数并且其中的位如有更改或添加,恕不另行通知。我们不支持使用此扩展的其他客户机与我方服务器结合使用,也不支持将我方客户机与某些其他服务器和此参数结合使用。)
此交互式操作可能重复许多次,每个收件人一次。
--->DATA ---> <the message text> --->. |
然后 LMTP 客户机发送整个邮件(充满点的),类似于 SMTP 执行的操作。完成邮件传送后,每行上将带有一个点 (.)。如果超过邮件大小,则 LMTP 服务器将发送:
<--- 500 message too big
并结束连接。
假设正确接收了邮件,则 LMTP 服务器将向 LMTP 客户机发送回每个收件人(在 RCPT TO: 行中给定的)的状态。例如,如果成功传送了邮件,则响应为:
<--- 250 2.5.0 address OK
其中 address 与在 RCPT TO: 行中显示的完全相同。
对话可以使用另一个 MAIL FROM: 行重复,或使用以下交互式操作结束:
---> quit <--- 221 OK |
表 15–1 显示了每个收件人的可能的状态代码。此三列表在第一列中显示了短代码,在第二列中显示了其等效的长代码,在第三列中显示了状态文本。2.x.x 状态代码是成功代码,4.x.x 代码是可重试错误,5.x.x 代码是不可重试错误。
表 15–1 收件人的 LMTP 状态代码
短代码 |
长代码 |
状态文本 |
---|---|---|
250 |
2.5.0 |
确定 |
420 |
4.2.0 |
邮箱被锁定 |
422 |
4.2.2 |
超出配额 |
420 |
4.2.0 |
邮箱格式错误 |
420 |
4.2.0 |
邮箱不受支持 |
430 |
4.3.0 |
IMAP IOERROR |
522 |
5.2.2 |
超出永久配额 |
523 |
5.2.3 |
邮件太大 |
511 |
5.1.1 |
邮箱不存在 |
560 |
5.6.0 |
邮件包含空字符 |
560 |
5.6.0 |
邮件包含 nl |
560 |
5.6.0 |
邮件标题错误 |
560 |
5.6.0 |
邮件无空白行 |
否则,将存在对邮箱、本机系统(因此为 UNIX)和文件的传送选项的更改。这些规则的目标是要生成地址,这些地址将导致邮件通过相应的 LMTP 通道被发送到后端服务器。生成的地址是以下格式的源路由地址:
@sourceroute:localpart@domain |