# 31.6.邮件用户代理

MUA（邮件用户代理）是用于发送和接收电子邮件的应用程序。随着电子邮件的“演变”变得越来越复杂，MUA 正在变得越来越强大，提供给用户更多的功能和灵活性。FreeBSD Ports 的 `mail` 类别包含了许多 MUA，包括像 Evolution 或 Balsa 这样的图形邮件客户端，以及像 mutt 或 alpine 这样的基于控制台的客户端。

## 31.6.1. mail

[mail(1)](https://man.freebsd.org/cgi/man.cgi?query=mail\&sektion=1\&format=html) 是 FreeBSD 默认安装的 MUA。它是一个基于控制台的 MUA，提供发送和接收文本电子邮件所需的基本功能。它提供有限的附件支持，并且只能访问本地邮箱。

尽管 [mail(1)](https://man.freebsd.org/cgi/man.cgi?query=mail\&sektion=1\&format=html) 本身不支持与 POP 或 IMAP 服务器的交互，但可以使用像 fetchmail 或 getmail 这样的应用程序将这些邮箱下载到本地的 `mbox` 中。

要发送和接收邮件，运行 [mail(1)](https://man.freebsd.org/cgi/man.cgi?query=mail\&sektion=1\&format=html)：

```sh
% mail
```

[mail(1)](https://man.freebsd.org/cgi/man.cgi?query=mail\&sektion=1\&format=html) 会自动读取用户在 **/var/mail** 中的邮箱。如果邮箱为空，程序会退出并显示一条消息，表示未找到邮件。如果有邮件，则会启动应用程序界面，并显示一条消息列表。

邮件会自动编号，如下所示：

```sh
Mail version 8.1 6/6/93.  Type ? for help.
"/var/mail/username": 3 messages 3 new
>N  1 root@localhost        Mon Mar  8 14:05  14/510   "test"
 N  2 root@localhost        Mon Mar  8 14:05  14/509   "user account"
 N  3 root@localhost        Mon Mar  8 14:05  14/509   "sample"
```

现在，可以通过输入 t 后跟邮件编号来阅读邮件。

以下示例读取第一封电子邮件：

```sh
& t 1
Message 1:
From root@localhost  Mon Mar  8 14:05:52 2004
X-Original-To: username@localhost
Delivered-To: username@localhost
To: username@localhost
Subject: test
Date: Mon,  8 Mar 2004 14:05:52 +0200 (SAST)
From: root@localhost (Charlie Root)

This is a test message, please reply if you receive it.
```

如上所示，消息将显示完整的头信息。

要再次显示邮件列表，按 h 键。

如果需要回复邮件，可以按 R 或 r 键 [mail(1)](https://man.freebsd.org/cgi/man.cgi?query=mail\&sektion=1\&format=html)。R 会让 [mail(1)](https://man.freebsd.org/cgi/man.cgi?query=mail\&sektion=1\&format=html) 只回复发件人，而 r 会回复所有其他收件人。这些命令后可以加上邮件编号来回复特定的邮件。输入回复内容后，邮件的结尾应该是单独的一行“.”。

以下是一个示例：

```sh
& R 1
To: root@localhost
Subject: Re: test

Thank you, I did get your email.
.
EOT
```

要发送新邮件，按 m，然后输入收件人电子邮件地址。可以通过逗号分隔多个收件人地址。然后输入邮件的主题，接着是邮件内容。邮件的结尾应通过输入单独的一行“.” 来标记。

```sh
& mail root@localhost
Subject: I mastered mail

Now I can send and receive email using mail ... :)
.
EOT
```

在使用 [mail(1)](https://man.freebsd.org/cgi/man.cgi?query=mail\&sektion=1\&format=html) 时，按 ? 可以随时显示帮助。有关如何使用 [mail(1)](https://man.freebsd.org/cgi/man.cgi?query=mail\&sektion=1\&format=html) 的更多帮助，请参阅 [mail(1)](https://man.freebsd.org/cgi/man.cgi?query=mail\&sektion=1\&format=html)。

> **注意**
>
> [mail(1)](https://man.freebsd.org/cgi/man.cgi?query=mail\&sektion=1\&format=html) 设计时并未考虑处理附件，因此处理附件时表现不佳。更新的 MUA 在处理附件方面更加智能。

## 31.6.2. Mutt

Mutt 是一款强大的 MUA，具有许多功能，包括：

* 消息线程功能。
* PGP 支持，用于数字签名和电子邮件加密。
* MIME 支持。
* Maildir 支持。
* 高度可定制。

有关 Mutt 的更多信息，请参阅 [http://www.mutt.org](http://www.mutt.org/)。

> **技巧**
>
> 值得一提的是 Mutt 的一个分支 NeoMutt，它增加了更多功能。有关更多信息，请参阅 [NeoMutt 网站](https://neomutt.org/about.html)。如果选择使用 NeoMutt，请将以下命令示例中的 `mutt` 替换为 `neomutt`。

可以通过安装 Port [mail/mutt](https://cgit.freebsd.org/ports/tree/mail/mutt/) 来安装 Mutt。Port 安装完成后，可以通过执行以下命令启动 Mutt：

```sh
% mutt
```

Mutt 会自动读取并显示 **/var/mail** 中的用户邮箱内容。如果没有找到邮件，Mutt 将等待用户命令。以下示例显示了 Mutt 显示消息列表的情况：

![Mutt 邮件客户端显示消息列表](https://docs.freebsd.org/images/books/handbook/mail/mutt1.png)

要阅读电子邮件，使用光标键选择邮件并按回车键。以下是 Mutt 显示电子邮件的示例：

![Mutt 邮件客户端显示电子邮件](https://docs.freebsd.org/images/books/handbook/mail/mutt2.png)

与 [mail(1)](https://man.freebsd.org/cgi/man.cgi?query=mail\&sektion=1\&format=html) 类似，Mutt 也可以选择只回复发件人，或者回复所有收件人。要只回复发件人，按 r 键。要向原始发件人以及所有收件人发送群体回复，按 g 键。

> **注意**
>
> 默认情况下，Mutt 使用 [vi(1)](https://man.freebsd.org/cgi/man.cgi?query=vi\&sektion=1\&format=html) 编辑器来创建和回复电子邮件。每个用户可以通过在其主目录中创建或编辑 **.muttrc** 文件，并设置 `editor` 变量，或者设置 `EDITOR` 环境变量，来定制此行为。有关 Mutt 配置的更多信息，请参阅 <http://www.mutt.org/>。

要撰写新邮件，按 m 键。在给定有效的主题后，Mutt 将启动 [vi(1)](https://man.freebsd.org/cgi/man.cgi?query=vi\&sektion=1\&format=html) 编辑器以便撰写电子邮件。邮件内容完成后，保存并退出 `vi`。Mutt 会继续显示邮件的摘要屏幕，准备发送邮件。要发送邮件，按 y 键。以下是摘要屏幕的示例：

![Mutt 邮件客户端显示摘要屏幕](https://docs.freebsd.org/images/books/handbook/mail/mutt3.png)

Mutt 提供了广泛的帮助功能，可以通过按 ? 键从大多数菜单中访问。适当的地方还会显示键盘快捷键。

## 31.6.3. alpine

alpine 面向的是初学者用户，但也包括一些高级功能。

> **警告**
>
> alpine 过去曾发现若干远程漏洞，这些漏洞允许远程攻击者通过发送特制的电子邮件，执行任意代码，从而以本地系统用户身份运行。尽管已修复了*已知*的问题，但 alpine 的代码编写风格不安全，FreeBSD 安全官员认为可能仍存在其他未被发现的漏洞。用户自行承担安装 alpine 的风险。

可以通过 Port [mail/alpine](https://cgit.freebsd.org/ports/tree/mail/alpine/) 安装当前版本的 alpine。安装完成后，可以通过以下命令启动 alpine：

```sh
% alpine
```

首次运行 alpine 时，它会显示一页问候信息，并简要介绍软件，还会请求用户发送一封匿名电子邮件，帮助开发团队判断有多少用户在使用该客户端。按 Enter 发送此匿名信息，或者按 E 退出问候页面而不发送任何信息。以下是问候页面的示例：

![alpine 邮件客户端显示问候页面](https://docs.freebsd.org/images/books/handbook/mail/pine1.png)

接着，显示主菜单，用户可以使用光标键进行导航。主菜单提供了快捷方式，用于撰写新邮件、浏览邮件目录以及管理地址簿条目。在主菜单下方，会显示与当前任务相关的键盘快捷方式。

alpine 默认打开的目录是 **inbox**。按 I 或选择 **MESSAGE INDEX** 选项，查看邮件索引：

![alpine 邮件客户端显示默认目录](https://docs.freebsd.org/images/books/handbook/mail/pine2.png)

邮件索引显示当前目录中的邮件，用户可以使用光标键进行导航。按 Enter 可以阅读选中的邮件。

![alpine 邮件客户端显示邮件索引](https://docs.freebsd.org/images/books/handbook/mail/pine3.png)

在以下截图中，显示了 alpine 展示的邮件内容。屏幕底部显示了上下文相关的键盘快捷方式。一个示例是 r，它告诉 MUA 回复当前显示的邮件。

![alpine 邮件客户端显示电子邮件](https://docs.freebsd.org/images/books/handbook/mail/pine4.png)

在 alpine 中回复邮件时，使用默认安装的 pico 编辑器。pico 使得邮件的导航变得更为简单，比 [vi(1)](https://man.freebsd.org/cgi/man.cgi?query=vi\&sektion=1\&format=html) 或 [mail(1)](https://man.freebsd.org/cgi/man.cgi?query=mail\&sektion=1\&format=html) 更适合新手用户使用。待回复完成，可以按 **Ctrl**+**X** 发送邮件。alpine 会在发送前请求确认。

![alpine 邮件客户端显示邮件撰写窗口](https://docs.freebsd.org/images/books/handbook/mail/pine5.png)

alpine 可以通过主菜单中的 **SETUP** 选项进行自定义。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://handbook.bsdcn.org/di-31-zhang-dian-zi-you-jian/31.6.-you-jian-yong-hu-dai-li.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
