如何在 Exim4 中启用流水线?

如何在 Exim4 中启用流水线?

我正在使用 Exim 4 服务器向一些客户发送电子邮件,虽然我不是 Linux 专家,但它运行良好。

一位客户使用 AppRiver,我们被告知需要启用流水线功能,这样他们就不会将我们的电子邮件视为垃圾邮件。我花了几个小时在 Google 上搜索如何启用此功能,但我不知道该怎么做。据我所知,默认情况下它是启用的。

有人可以帮忙吗?

答案1

首先,“管道”一词在 SMTP 中具有两层含义。

  1. PIPELINING 命令 = smtp 客户端连接并一次性发送 EHLO、MAIL FROM、RCPT TO 和 DATA 命令(exim 将此称为命令同步)
  2. 管道消息 = 一个 smtp 客户端每次连接并发送多条消息。

听起来他们正在谈论 #2。根据http://www.exim.org/exim-html-current/doc/html/spec_html/ch41.html#SECTmulmessam关于通过 TLS 连接流水线传输到主机:

Exim 通过为每条消息启动一个全新的传递过程,将套接字从一个进程传递到下一个进程,从而通过同一个 TCP/IP 连接发送多条消息。这种实现方式与 TLS 的使用不太相符,因为与 TLS 连接相关的状态信息相当多,而不仅仅是套接字标识。将所有状态信息传递给新进程是不可行的。因此,Exim 在将套接字传递给新进程之前会关闭现有的 TLS 会话。然后,新进程可能会尝试启动新的 TLS 会话,如果成功,则可能会尝试重新进行身份验证(如果 AUTH 正在使用),然后再发送下一条消息。

这意味着与你期望的不一样:

connect->starttls->msg1->msg2->...msgX->quit

Exim 这样做:

connect->starttls->msg1->end_session->starttls->msg2->end_session...->quit

以上内容来自记忆,我不记得“end_session”是否包括断开连接。但我曾经在 IRC 中帮助一个人排除过这种行为的故障,他发现上面的段落意味着如果使用 STARTTLS 加密会话,它就不会以描述的第一种方式进行流水线传输。所以不幸的是,我唯一的评论是,如果你强制这个特定的主机不使用 TLS,它应该按照他们想要的方式开始流水线传输,但我觉得这不是一个好的答案,因为我相信所有的电子邮件传输都应该加密。

相关内容