2

我正在编写 IMAP 服务器,但遇到一个问题:电子邮件来自哪里?

我一直认为事件的基本过程是这样的:

  1. 发件人客户端使用 SMTP 协议向 SMTP 服务器(主机 A)发送电子邮件;
  2. SMTP 服务器(主机 A)查找电子邮件的目的地,并使用 SMTP 协议与 SMTP 服务器(主机 B)通信;
  3. SMTP 服务器(主机 B)然后接受电子邮件,并与 IMAP 服务器(主机 B)通信以神奇地(?)将电子邮件发送到该服务器;
  4. 接收者客户端使用 IMAP 协议向 IMAP 服务器(主机 B)请求新的电子邮件。

这让我想知道:电子邮件是如何从接受 SMTP 服务器到达服务 IMAP 服务器的?他们有一个协议吗?他们只是将其放入目录中吗?

我自己试图找到答案...

我已经看到/var/mail目录的用法 - 每个用户一个文件 - 这似乎并不适合大型用户群。当两个进程同时从中读取/写入时,它不会也引起问题吗?

我还看到 Postfixmain.cf文件可能包含mailbox_transport = lmtp:unix:/var/imap/socket/lmtp,它看起来像是用于使用 unix 套接字与 IMAP 服务器通信的 LMTP 协议。这将表明 IMAP 服务器也“说”LMTP?

是否使用了其他方法?还是其他协议?

4

1 回答 1

2

从 MTA (SMTP) 服务器和 IMAP 服务器传输的最常用方法:

  1. SMTP 和 IMAP 是同一服务器或同一供应商的服务器 - 可以使用任何专有(秘密/未记录的)协议/方法
    [AFAIK 它不是常见的 linux/unix 解决方案]

  2. LMTP 协议(​​对 SMTP 稍作修改)——现代推荐

  3. MTA 执行 IMAP 服务器提供的自定义程序,并且(通常)将消息馈送到程序的标准输入中

  4. MTA 将消息放入每个用户的Maildir(例如 ~/.maildir/),IMAP 使用相同的(共享)maildir

  5. MTA 将传入的消息放入每个用户邮箱文件(/var/mail/username)的标准 unix 中,并且 IMAP 服务器使用该文件作为收件箱文件夹

棘手的部分是让 MTA 拒绝不存在的虚拟 IMAP 用户(没有每个电子邮件帐户操作系统帐户的电子邮件帐户)以RCPT TO:在 SMTP 会话中回复。MTA 必须知道有效的虚拟邮箱。

于 2015-06-28T17:20:25.080 回答