57、电子邮件系统:从邮件队列到POP与IMAP协议详解

电子邮件系统:从邮件队列到POP与IMAP协议详解

在电子邮件系统中,邮件队列请求和邮件用户代理(MUA)程序是两个重要的方面。下面将详细介绍相关内容。

邮件队列请求

每个电子邮件请求由两个文件表示:控制文件和数据文件。在请求处理期间,还会临时创建一个锁文件。使用 sendamil -qv 命令可以强制进行电子邮件队列处理( q 选项),并详细显示处理的所有步骤( v 选项)。结合这些命令,可以获取大量有关待处理电子邮件请求的信息,这有助于指出 sendmail 配置中可能存在的问题。

邮件用户代理(MUA)

sendmail 在电子邮件系统中起着核心作用,但MUA程序对于用户使用电子邮件也非常重要。这里主要介绍通用的UNIX MUA程序 mail (BSD版本,也称为 Mail ),后来更名为 mailx (BSD版本为 /usr/ucb/mailx ),其System V对应的 mailx 几乎相同。该程序还用作 sendmail 的本地邮件发送程序,用于本地电子邮件的投递。

mail 程序和 .mailrc 文件

mail 是第一个方便、灵活且交互式的工具,用于撰写、发送和接收电子邮件消息,它包含许多邮件子命令。传入的电子邮件存储在每个用户的系统邮箱中,该邮箱位于 /var/spool/mail 目录下,以用户名命名。用户可以通过设置环境变量 MAIL 来指定不同的邮箱文件。当用户阅读邮件时,邮件会被标记并移动到辅助文件 mbox 中存储,该文件通常位于用户的主目录下,也可以通过设置 MBOX 环境变量来更改其位置。

  • 启动 mail :启动 mail 时,它会从系统范围的邮件启动文件 /usr/lib/Mail.rc 读取命令,初始化某些系统范围的变量,然后从个人邮件启动文件 .mailrc (通常位于用户主目录下,可通过设置 MAILRC 环境变量更改)读取个人命令和变量设置。大多数邮件子命令在这些启动文件中都是合法的,这些文件最常见的用途是设置初始显示选项和别名列表。如果启动文件中存在错误,将忽略该文件中剩余的行。

    • 如果在命令行中包含收件人的电子邮件地址作为参数,用户可以直接从命令行调用 mail 发送消息。
    • 如果命令行中没有收件人, mail 将进入命令模式,用户可以在此模式下阅读收到的消息。如果没有收到消息, mail 将打印 No mail for username 并退出。在命令模式下,用户仍然可以使用邮件子命令发送电子邮件消息。
  • 发送电子邮件消息 :当用户撰写电子邮件消息时, mail 处于“输入模式”。如果在 mail 命令中没有指定主题,将提示用户输入主题。输入主题行后, mail 进入“输入模式”以接受用户要发送的消息文本。用户在输入消息时, mail 会将其存储在临时文件中。用户可以在输入行的开头输入适当的波浪号转义命令来查看或修改消息。用户在单独的一行上输入单个点(或EOF字符,通常为 Ctrl - D )表示消息准备好发送, mail 会将消息提交给 sendmail ,以便发送给每个指定的收件人。收件人可以是通过用户名识别的本地用户、 name@domain 形式的电子邮件地址、 [host!…host!]host!username 形式的UUCP地址、用户具有写入权限的文件或别名组。

  • 读取电子邮件消息 :当用户进入命令模式读取电子邮件消息时, mail 会显示前几条消息的标题摘要,然后提示用户输入以下邮件子命令之一。默认提示字符是 & 。消息按编号列出和引用,当前消息在标题摘要中用 > 字符标记,这是需要可选消息列表的邮件子命令的默认消息(如果省略消息编号作为参数)。

  • 邮件子命令 :在命令模式下,默认子命令是 print (如果用户仅按 Return Enter 结束空命令行)。可以使用 ? 子命令查看完整的邮件子命令列表。以下是部分邮件子命令及其含义:
    | 邮件子命令 | 含义 |
    | — | — |
    | ? | 打印命令摘要 |
    | alias alias name group alias name | 为指定的名称声明别名,在使用别名作为收件人时进行替换,在 .mailrc 文件中很有用 |
    | delete [message - list] | 从系统邮箱中删除指定的消息。如果设置了 autoprint 变量,则打印最后删除消息之后的消息 |
    | headers [message] | 打印包含指定消息的标题页, screen 变量设置每页的标题数量 |
    | list | 打印所有可用命令,但不提供解释 |
    | mail recipient… | 向指定的收件人发送消息 |
    | print [message - list] type [message - list] | 打印指定的消息。如果设置了 crt 变量,超过其指定行数的消息将使用 PAGER 变量指定的命令进行分页显示,默认分页命令是 more |
    | reply [message - list] respond [message - list] | 向消息列表中每条消息的作者发送回复。主题行取自第一条消息。如果 record 设置为文件名,则将回复的副本添加到该文件中。如果设置了 replyall 变量, reply/respond 的操作将反转。 reply - sender 命令不受 replyall 变量的影响,仅将每条回复发送给每条消息的发件人 |
    | exit | 退出 mail ,不更改系统邮箱,不将消息保存到 mbox 中 |
    | quit | 退出 mail ,将已读消息存储在 mbox 文件中,未读消息存储在系统邮箱中。除非设置了 keepsave 变量,否则已明确保存到文件中的消息将被删除 |
    | save [message - list] [filename] | 将指定的消息保存到指定的文件中。如果文件不存在,则创建该文件。如果未指定文件名,则使用 MBOX 变量指定的文件,默认是用户主目录下的 mbox 。除非设置了 keepsave 变量,否则 mail 终止时,每条保存的消息将从系统邮箱中删除 |

  • 转发电子邮件消息 :可以使用子命令 -f -m 并以消息编号作为参数,将特定消息转发给其他用户(这些邮件子命令也称为波浪号转义命令)。要自动转发电子邮件消息,可以在用户主目录下的 .forward 文件中添加逗号分隔的额外收件人地址列表。需要注意的是,转发地址必须正确指定且有效,否则转发的电子邮件消息可能会“退回”。

  • 变量 mail 的行为由预定义的变量控制,这些变量可以使用 set unset 命令进行设置和清除。

    • 环境变量 :以下变量的值从shell继承,并自动从环境中读取,不能在 mail 内部更改:
      • HOME :用户的主目录。
      • MAIL :初始要读取的邮箱文件名(代替标准系统邮箱),默认是 /var/spool/mail/username
      • MAILRC :个人启动文件的名称,默认是 $HOME/.mailrc
    • 邮件变量 :这些变量也可以在 .mailrc 文件中初始化,或使用 set 命令进行交互式设置和更改。它们也可以从环境中导入(在这种情况下,其值不能在 mail 内部更改)。 unset 命令用于清除变量, set 命令也可以通过在要清除的变量名前加 no 来清除变量。
POP和IMAP协议

构建分布式电子邮件基础设施有多种方法,其中基于互联网的协议中,最著名和最常用的是邮局协议(POP)和互联网消息访问协议(IMAP)。POP是较旧且更知名的协议,IMAP提供了POP的超集,并为某些额外的电子邮件处理提供了良好的支持。

远程邮箱访问模式

有三种基本的远程邮箱访问模式:离线、在线和断开连接,这些模式在RFC - 1733中有描述。
- 离线模式 :电子邮件被发送到邮件服务器,PC或MAC用户定期调用邮件客户端程序,连接到邮件服务器并将所有待处理的电子邮件下载到自己的机器上。此后,所有电子邮件处理都在客户端机器上进行。离线访问模式是一种存储转发服务,旨在根据需要将电子邮件从邮件服务器(传入电子邮件的接收点)传输到单个目标机器。一旦传输完成,电子邮件消息将从邮件服务器中删除。
- 在线模式 :电子邮件同样发送到邮件服务器,但邮件客户端不会一次性复制所有邮件并从服务器删除。这是一种交互式的客户端 - 服务器模型,客户端可以向服务器请求指定电子邮件消息的标题、正文,设置电子邮件搜索的某些条件,或设置某些电子邮件消息标志(如“已删除”或“已回复”)。电子邮件消息将保留在邮件服务器上,直到用户明确删除它们。用户可以直接将消息保存到客户端机器上,或保存到服务器上,也可以选择其中一种方式。

这两种模式反映了不同的需求和使用风格,不太容易混合使用。离线模式适用于始终使用单个客户端机器的用户,但不适合从不同客户端机器在不同时间访问收件箱或已保存的邮件文件夹,因为离线下载和删除邮件的访问方式容易使电子邮件分散在不同的客户端计算机上。另一方面,离线访问的主要优点是通过拨号连接实现时,可最大限度地减少服务器资源和连接时间的使用。

邮局协议(POP)

POP是邮件客户端(主要是PC和Macintosh工作站)与适当的邮件服务器(通常是UNIX系统)通信时使用的“语言”,主要支持离线电子邮件处理。尽管离线访问的局限性引发了人们对在在线模式下使用POP的兴趣,但POP缺乏高质量在线(或断开连接)操作所需的一些功能。不过,POP也提供了一种“伪在线”操作模式,客户端程序可以将电子邮件留在邮件服务器上,但这种模式的使用通常依赖于远程文件系统协议的广泛可用性。

  • popper 守护进程 popper 是POP服务器的一种实现,运行在各种UNIX系统上,用于管理Macintosh和PC客户端的电子邮件。该程序最初由加利福尼亚大学伯克利分校开发。启动该程序的命令格式为: /usr/etc/popper [ -d ] [ -t tracefile ]

    • -d 选项将套接字设置为调试模式并开启调试,所有调试信息使用 syslog 保存。
    • -t tracefile 选项开启调试并将跟踪信息保存到 tracefile 中。
    • POP程序可通过匿名FTP从 ftp.cc.berkeley.edu 获取,在 pub 目录下有两个文件:一个是用于PC的压缩tar文件 popper.tar.Z ,另一个是Macintosh的BinHex格式的StuffIt存档文件 MacPOP.sit.hqx
  • POP事务 :当 inetd 在端口110(POP3的官方端口号为110,POP2为109)收到服务请求时,会启动 popper 程序,因此“POP服务器”这个术语比“POP守护进程”更合适。 popper 服务器初始化并验证对等客户端的IP地址是否有效,否则会记录相应的警告消息。服务器进入授权状态,在此期间,客户端必须通过在服务器主机上提供有效的UNIX UID和密码来正确识别自己,此状态下不允许进行其他交换(除了退出请求)。如果身份验证失败,将记录警告消息并结束会话。一旦用户身份得到确认, popper 会更改自己的用户和组ID以匹配用户的ID,并进入事务状态,同时会创建用户邮件投递文件夹(通常在 /usr/spool/mail )的临时副本,用于后续的所有事务,包括检索邮件、删除邮件、恢复已删除邮件等大部分POP命令。伯克利软件扩展还允许用户使用 sendmail 程序提交电子邮件消息(包裹)(此扩展在与服务器一起分发的HyperMail客户端中受支持)。当客户端退出时, popper 进入最终更新状态,在此期间终止网络连接,并使用(可能已修改的)临时邮件投递文件夹更新用户的邮件投递文件夹。

    • 日志记录 popper 使用 syslog 记录其活动,默认情况下,除调试信息以 debug 优先级记录外,所有消息都以 notice 优先级记录。默认的日志文件是 /usr/spool/mqueue/POPlog /usr/spool/mqueue/syslog ,可以根据需要更改。
    • 调试 :在 inetd.conf 文件中调用 popper 时指定 -d 参数,它将记录调试信息。使用此选项时要小心,因为它会在 syslog 文件中生成大量输出。或者,可以使用 -t tracefile 选项将调试信息使用 fprintf 保存到 tracefile 文件中,而不是使用 syslog
    • 检查POP服务器是否运行 :可以使用 telnet 命令连接到端口110(或109)来检查POP服务器 popper 是否在UNIX系统上运行。例如,在BSD UNIX主机上:
%> telnet bsdhost 110
Trying…
Connected to bsdhost.domain.edu.
Escape character is ' ^]'.
+OK UCB Pop server (version 1.6) at bsdhost starting.
%> quit
Connection closed by foreign host.

在Solaris平台上:

%> telnet sunhost 110
Trying…
Connected to sunhost.
Escape character is ' ^]'.
+OK sunhost Solstice (tm) Internet Mail Server (tm) POP3 2.0 at Sun, 3 Jan 1999 19:19:41 −0500 (EST)
%> quit
+OK BYE
Connection closed by foreign host.
- **局限性**:`popper`会将用户的整个邮件投递文件夹复制到临时目录`/tmp`中,然后对该副本进行操作。如果邮件投递文件夹特别大,或者`/tmp`中可用空间不足,则守护进程将拒绝继续并终止连接。如果预计会有巨大的电子邮件消息,需要牢记这一点。

下面是POP事务的流程图:

graph TD;
    A[收到服务请求] --> B[初始化并验证IP地址];
    B --> C{IP地址有效?};
    C -- 是 --> D[进入授权状态];
    C -- 否 --> E[记录警告消息,结束会话];
    D --> F{身份验证成功?};
    F -- 是 --> G[进入事务状态,创建临时邮件副本];
    F -- 否 --> E;
    G --> H[执行事务操作];
    H --> I[客户端退出];
    I --> J[进入最终更新状态];
    J --> K[更新用户邮件投递文件夹,终止连接];

以上介绍了电子邮件系统中邮件队列请求、MUA程序以及POP协议的相关内容,下一部分将继续介绍互联网消息访问协议(IMAP)以及POP与IMAP的比较。

电子邮件系统:从邮件队列到POP与IMAP协议详解

互联网消息访问协议(IMAP)

IMAP是邮件客户端(主要是PC和Macintosh工作站)与合适的邮件服务器(通常是UNIX系统)进行交互式通信时使用的“语言”,用于访问存储在邮件服务器上的电子邮件或公告板消息。IMAP在设计上具备POP的功能,并支持在线和断开连接模式的远程邮箱访问,其版本4在RFC 1730中定义。虽然IMAP也能进行离线邮件处理,但其主要功能体现在在线和断开连接模式的操作上,它允许用户像操作本地邮箱一样操作远程邮箱。根据邮件客户端对IMAP的实现和邮件服务器的管理方式,用户可以选择将邮件保存到客户端机器或邮件服务器上。

与POP相比,IMAP的实现更为复杂,但它具有以下优势:
1. 完全兼容互联网消息标准 :例如MIME。
2. 支持多设备访问和管理邮件 :允许从多台计算机访问和管理邮件。
3. 无需依赖低效的文件访问协议 :提供更高效的访问方式。
4. 支持多种访问模式 :包括在线、离线和断开连接模式。
5. 支持并发访问共享邮箱 :方便多个用户处理共同收件箱中的邮件。
6. 客户端无需了解服务器文件存储格式 :降低了客户端的复杂性。
7. 具备丰富的操作功能 :包括创建、删除和重命名邮箱,检查新邮件,永久删除邮件,设置和清除标志,MIME解析(客户端无需进行),搜索以及选择性获取邮件属性、文本和部分内容以提高效率。

具体来说,IMAP允许:
- 操作持久消息状态标志 :如“已读”“已删除”“已回复”以及用户自定义标志。
- 存储和获取邮件 :可以将收件文件夹中的邮件追加到存档文件夹,反之亦然。
- 并发更新和访问共享邮箱 :当多个用户处理共同收件箱中的邮件时,邮箱状态的更改会传播到所有并发活动的客户端。
- 处理非电子邮件数据 :如网络新闻或文档,方便统一访问不同类型的信息。
- 支持离线访问模式 :减少连接时间和服务器资源使用,适用于通过昂贵拨号连接访问邮件服务器且不需要多平台访问邮箱的情况。
- 优化在线性能 :尤其在低速链接下表现出色。

IMAP最初于1986年在斯坦福大学开发,但直到近十年后才受到广泛关注。如今,越来越多的软件产品开始实现IMAP,但它仍然不如早期发布且功能较少的POP协议知名。此外,还有一个与IMAP配套的协议,即互联网消息支持协议(IMSP),用于用户配置管理,它允许像IMAP访问邮箱一样进行与位置无关(多平台)的个人配置数据(如地址簿、书签列表等)访问。

比较POP与IMAP

IMAP和POP的基本特性反映了在线和离线访问模式的特点,它们的差异决定了两个协议之间的主要区别。以下是两种访问模式的总结差异:
| 访问模式 | 特点 | 优点 |
| — | — | — |
| 离线 | 按需将邮件检索到单个客户端机器 | 最小化连接时间和服务器资源使用 |
| 在线 | 从多个客户端交互式访问多个邮箱 | 可在不同时间使用不同计算机,支持“无数据”客户端机器,平台独立访问多个邮箱,支持并发访问共享邮箱 |

POP和IMAP的简要比较如下:
| 比较项 | POP | IMAP |
| — | — | — |
| 共同特点 | 支持离线操作;邮件发送到共享活动邮件服务器;新邮件可从多种客户端平台类型访问;新邮件可从网络任何位置访问;协议开放;实现免费可用(包括源代码);有适用于PC、MAC和UNIX的客户端;有商业实现;面向互联网,无需SMTP网关;仅处理访问,依赖SMTP发送邮件;支持持久消息ID(用于断开连接操作) | 支持离线操作;邮件发送到共享活动邮件服务器;新邮件可从多种客户端平台类型访问;新邮件可从网络任何位置访问;协议开放;实现免费可用(包括源代码);有适用于PC、MAC和UNIX的客户端;有商业实现;面向互联网,无需SMTP网关;仅处理访问,依赖SMTP发送邮件;支持持久消息ID(用于断开连接操作) |
| 优势 | 协议简单,易于实现;当前可用的客户端软件更多 | 操作持久消息状态标志;存储和获取邮件;可访问和管理多个邮箱;支持并发更新和访问共享邮箱;适用于访问非电子邮件数据;可使用离线模式以减少连接时间和磁盘使用;有配套的用户配置管理协议(IMSP);具备优化在线性能的机制,尤其在低速链接下 |

综上所述,IMAP在三个方面优于POP:对用户收件箱的操作功能更丰富,能够管理除收件箱之外的邮件文件夹,以及具备优化在线性能的原语,特别是在处理大型MIME消息时。由于有免费的IMAP开发库,IMAP相对于POP的额外复杂性不应成为使用的重大障碍。因此,可以合理地得出结论,POP相对于IMAP的唯一优势是目前可用的POP软件更多,但这种情况正在迅速改变,IMAP相对于POP的功能优势非常显著。

下面是IMAP操作流程的流程图:

graph TD;
    A[客户端连接服务器] --> B[身份验证];
    B --> C{验证成功?};
    C -- 是 --> D[选择邮箱];
    C -- 否 --> E[结束连接];
    D --> F[执行操作(如搜索、获取邮件等)];
    F --> G{是否有新操作?};
    G -- 是 --> F;
    G -- 否 --> H[关闭邮箱];
    H --> I[断开连接];

通过对POP和IMAP的详细介绍和比较,我们可以根据不同的需求和使用场景选择合适的电子邮件访问协议,以提高电子邮件的使用效率和体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值