电子邮件如何从 SMTP 传输到 IMAP?
Posted
技术标签:
【中文标题】电子邮件如何从 SMTP 传输到 IMAP?【英文标题】:How does e-mail go from SMTP to IMAP? 【发布时间】:2015-09-15 01:31:21 【问题描述】:我正在编写 IMAP 服务器,但遇到一个问题:电子邮件来自哪里?
我一直认为事件的基本过程是这样的:
-
发件人客户端使用 SMTP 协议向 SMTP 服务器(主机 A)发送电子邮件;
SMTP 服务器(主机 A)查找电子邮件的目的地,并使用 SMTP 协议与 SMTP 服务器(主机 B)通信;
SMTP 服务器(主机 B)然后接受电子邮件,
并与 IMAP 服务器(主机 B)通信以神奇地 (?) 将电子邮件发送到该服务器;
接收者客户端使用 IMAP 协议向 IMAP 服务器(主机 B)请求新的电子邮件。
这让我想知道:电子邮件是如何从接受 SMTP 服务器到达服务 IMAP 服务器的?他们有一个协议吗?他们只是将其放入目录中吗?
我自己尝试寻找答案...
我已经看到/var/mail
目录的用法 - 每个用户一个文件 - 这似乎并不适合大型用户群。当两个进程同时从中读取/写入时,它不会也导致问题吗?
我还看到 Postfix main.cf
文件可能包含 mailbox_transport = lmtp:unix:/var/imap/socket/lmtp
,这看起来像是用于使用 unix 套接字与 IMAP 服务器通信的 LMTP 协议。这表明 IMAP 服务器也“说”LMTP?
还有其他方法正在使用吗?还是其他协议?
【问题讨论】:
这是由 MDA(消息传递代理)根据 RFC 5598 完成的。 通常,它存储在数据库或文件系统中。对于 Unix 系统,这通常是 /home/user/mail 或(旧的)/var/mail。对于像 Exchange 这样的东西,它将是一个专有数据库。 @stark 但是电子邮件是如何从 SMTP 服务器发送到 MDA 的?它是如何从 MDA 到 IMAP 服务器的? 在 unix 上,MTA 执行一个 MTA 并在标准输入上给它消息,有关详细信息,请参阅 procmail 手册页。在其他操作系统(它们确实存在)上,有时在 unix 上,MDA 是与 SMTP 服务器相同的软件包的一部分。 【参考方案1】:从 MTA (SMTP) 服务器和 IMAP 服务器传输的最常用方法:
SMTP 和 IMAP 是同一服务器或同一供应商的服务器的服务器 - 可以使用任何专有(秘密/未记录)协议/方法 [AFAIK 这不是常见的 linux/unix 解决方案]
LMTP 协议(对 SMTP 稍作修改) - 现代推荐
MTA 执行 IMAP 服务器提供的自定义程序,并且(通常)将消息馈送到程序的标准输入中
MTA 将消息放入每个用户 Maildir(例如 ~/.maildir/),IMAP 使用相同的(共享)邮件目录
MTA 将传入消息放入标准 unix 每个用户邮箱文件 (/var/mail/username) 中,IMAP 服务器使用该文件作为收件箱文件夹
棘手的部分是让 MTA 在 SMTP 会话中拒绝不存在的虚拟 IMAP 用户(没有每个电子邮件帐户操作系统帐户的电子邮件帐户)以回复 RCPT TO:
。 MTA 必须知道有效的虚拟邮箱。
【讨论】:
以上是关于电子邮件如何从 SMTP 传输到 IMAP?的主要内容,如果未能解决你的问题,请参考以下文章