第三十一章 电子邮件31.1. 简介31.2. 邮件组件31.3. DragonFly Mail Agent (DMA)31.3.1. 配置DragonFly邮件代理(DMA)31.3.1.1. 使用DMA通过Gmail路由发送邮件(STARTTLS:SMTP示例)31.3.1.2. 使用DMA通过Fastmail路由发送邮件(SSL/TLS示例)31.3.1.3. 使用DMA通过自定义邮件主机路由发送邮件31.4. Sendmail31.4.1. 配置文件31.5. 更改邮件传输代理31.5.1. 用其他MTA替换Sendmail31.5.2. 用其他MTA替换DragonFly邮件代理(DMA)31.6. 邮件用户代理31.6.1. 邮件31.6.2. Mutt31.6.3. alpine31.7. 高级主题31.7.1. 基本配置31.7.2. 域的邮件31.7.3. 设置为仅发送31.7.4. Sendmail中的SMTP身份验证
“Electronic Mail”,更为人所知的是email,是当今使用最广泛的通信形式之一。本章提供了在FreeBSD上运行邮件服务器的基本介绍,以及使用FreeBSD发送和接收电子邮件的介绍。有关此主题的完整介绍,请参阅【附录B:参考书目】中列出的书籍。
本章涵盖: • 发送和接收电子邮件涉及哪些软件组件。 • 如何配置DragonFly邮件代理。 • 基本Sendmail配置文件位于FreeBSD中。 • 远程邮箱和本地邮箱之间的区别。 • 如何安装和配置替换DragonFly邮件代理或Sendmail的备用邮件传输代理。 • 如何解决常见的邮件服务器问题。 • 如何将Sendmail配置为仅发送邮件。 • 如何在Sendmail中配置SMTP身份验证以增加安全性。 • 如何安装和使用邮件用户代理(如mutt)发送和接收电子邮件。 • 如何从远程POP或IMAP服务器下载邮件。 • 如何对收到的电子邮件自动应用过滤器和规则。
电子邮件交换涉及五个主要部分:邮件用户代理(Mail User Agent,MUA)、邮件传输代理(Mail Transfer Agent,MTA)、电子邮件主机、远程或本地邮箱和DNS。本节概述了这些组件。
Mail User Agent (MUA)
邮件用户代理(MUA)是一个用于撰写、发送和接收电子邮件的应用程序。此应用程序可以是命令行程序,如内置的邮件实用程序,也可以是Ports Collection中的第三方应用程序,如alpine、elm或mutt。Ports Collection中还提供了数十个图形程序,包括Claws Mail、Evolution和Thunderbird。一些组织提供了一个可以通过网络浏览器访问的网络邮件程序。有关在FreeBSD上安装和使用MUA的更多信息,请参阅【31.6. 邮件用户代理】。
Mail Transfer Agent (MTA)
邮件传输代理(MTA)负责接收传入邮件和传递传出邮件。从FreeBSD 14.0版本开始,默认的MTA是DragonFly邮件代理(dma(8));在早期版本中,它是 sendmail(8) 。可以安装其他MTA,包括Exim、Postfix和qmail,以替换默认MTA。
Mail Host 和 Mailboxes
邮件主机是负责为主机或网络传递和接收邮件的服务器。邮件主机收集发送到域的所有邮件,并根据配置将其存储为默认 mbox 或替代Maildir格式。邮件存储后,可以使用MUA在本地读取,也可以使用POP或IMAP等协议远程访问和收集。如果邮件是在本地读取的,则不需要安装POP或IMAP服务器。
Domain Name System (DNS)
域名系统(DNS)及其 named(8) 的守护进程在邮件传递中起着重要作用。为了将邮件从一个站点传递到另一个站点,MTA将在DNS中查找远程站点,以确定哪个主机将接收目的地的邮件。当邮件从远程主机发送到MTA时,也会发生此过程。
DragonFly邮件代理(DMA)是FreeBSD 14.0版本开始的默认MTA。dma(8) 是一个小型邮件传输代理(MTA),专为家庭和办公室使用而设计。它接受来自本地安装的邮件用户代理(MUA)的邮件,并将邮件传递到本地或远程目的地。远程传递包括几个功能,如TLS/SSL支持和SMTP身份验证。
dma(8) 并非旨在替代真正的大型MTA,如 sendmail(8) 或 postfix(1) 。因此,dma(8) 不监听端口25上的传入连接。
DMA附带了一个默认配置,适用于许多部署。自定义设置在 /etc/dma/dma.conf 中定义,SMTP身份验证在 /etc/dma/auth.conf 中配置。
此示例 /etc/dma/dma.conf 可用于使用Google的SMTP服务器发送邮件。
xxxxxxxxxxSMARTHOST smtp.gmail.comPORT 587AUTHPATH /etc/dma/auth.confSECURETRANSFERSTARTTLSMASQUERADE username@gmail.com可以在 /etc/dma/auth.conf 中用一行设置身份验证:
xxxxxxxxxxusername@gmail.com|smtp.gmail.com:passwordxxxxxxxxxx启用双因素身份验证后,将拒绝使用生成的特定于应用程序的密码作为正常登录密码。有关特定于应用程序的密码的更多信息,请参阅谷歌文档。执行以下命令以测试配置:
xxxxxxxxxx% echo this is a test | mail -v -s testing-email username@gmail.com此示例 /etc/dma/dma.conf 可用于使用Fastmail的SMTP服务器发送邮件。
xxxxxxxxxxSMARTHOST smtp.fastmail.comPORT 465AUTHPATH /etc/dma/auth.confSECURETRANSFERMAILNAME example.server.com可以在 /etc/dma/auth.conf 中用一行设置身份验证:
xxxxxxxxxxusername@fastmail.com|smtp.fastmail.com:password执行以下命令以测试配置:
xxxxxxxxxx% echo this is a test | mail -v -s testing-email username@fastmail.com此示例 /etc/dma/dma.conf 可用于使用自定义邮件主机发送邮件。
xxxxxxxxxxSMARTHOST mail.example.orgPORT 587AUTHPATH /etc/dma/auth.confSECURETRANSFERSTARTTLS可以在 /etc/dma/auth.conf 中用一行设置身份验证:
xxxxxxxxxxusername@example.org|mail.example.org:password执行以下命令以测试配置:
xxxxxxxxxx% echo this is a test | mail -v -s testing-email username@example.orgSendmail是一种历史悠久且功能多样的邮件传输代理(MTA),在UNIX®和类UNIX系统中有着悠久的历史。在FreeBSD 13之前,它一直是FreeBSD基础系统的一部分,提供强大的电子邮件传输功能、广泛的定制选项,并支持复杂的路由和过滤。
Sendmail的配置文件位于 /etc/mail/ 中。
/etc/mail/access
此访问数据库文件定义了哪些主机或IP地址可以访问本地邮件服务器,以及它们具有何种访问权限。只要邮件的最终目的地是本地计算机,
OK 的主机就可以向此主机发送邮件。REJECT 的主机将被拒绝所有邮件连接。RELAY 的主机使用此邮件服务器向任何目的地发送邮件。ERROR 的主机将返回带有指定邮件错误的邮件。SKIP ,Sendmail将中止当前对此条目的搜索,而不接受或拒绝该邮件。QUARANTINE 的主机将保留其消息,并将收到指定的文本作为保留的原因。在FreeBSD示例配置 /etc/mail/access.sample 中可以找到将这些选项用于IPv4和IPv6地址的示例:
要配置access数据库,请使用示例中显示的格式在 /etc/mail/access 中输入条目,但不要在条目前添加注释符号(#)。为每个应配置访问权限的主机或网络创建一个条目。与表左侧匹配的邮件发件人会受到表右侧操作的影响。
每当更新此文件时,请更新其数据库并重新启动Sendmail:
xxxxxxxxxx# makemap hash /etc/mail/access < /etc/mail/access# service sendmail restart/etc/mail/aliases
此数据库文件包含扩展为用户、文件、程序或其他别名的虚拟邮箱列表。以下是一些说明文件格式的条目:
xxxxxxxxxxroot: localuserftp-bugs: joe,eric,paulbit.bucket: /dev/nullprocmail: "|/usr/local/bin/procmail"冒号左侧的邮箱名称将展开到右侧的目标。
localuser 邮箱,然后在 /etc/mail/aliases 数据库中查找。如果没有找到匹配项,则将消息传递给 localuser 。ftp-bugs 错误扩展到三个本地邮箱 joe 、eric 和 paul 。远程邮箱可以指定为 user@example.com 。有关此文件格式的更多信息,请参阅 aliases(5) 。
每当更新此文件时,运行 newaliases 以更新和初始化别名数据库。
/etc/mail/sendmail.cf
这是Sendmail的主配置文件。它控制Sendmail的整体行为,包括从重写电子邮件地址到将拒绝消息打印到远程邮件服务器的所有内容。因此,此配置文件相当复杂。幸运的是,对于标准邮件服务器,很少需要更改此文件。
主Sendmail配置文件可以从定义Sendmail功能和行为的 m4(1) 宏构建。有关一些详细信息,请参阅 /usr/src/contrib/sendmail/cf/README 。
每当对此文件进行更改时,都需要重新启动Sendmail才能使更改生效。
/etc/mail/virtusertable
此数据库文件将虚拟域和用户的邮件地址映射到真实邮箱。这些邮箱可以是本地、远程、在 /etc/mail/aliases 中定义的别名或文件。这允许在一台机器上托管多个虚拟域。
FreeBSD在 /etc/mail/virtualsertable.sample 中提供了一个示例配置文件,以进一步演示其格式。以下示例演示了如何使用该格式创建自定义条目:
xxxxxxxxxxroot@example.com rootpostmaster@example.com postmaster@noc.example.net@example.com joe此文件按照第一个匹配顺序进行处理。当电子邮件地址与左侧的地址匹配时,它将映射到右侧列出的本地邮箱。此示例中的第一个条目的格式将特定的电子邮件地址映射到本地邮箱,而第二个条目的格式化将特定的邮件地址映射到远程邮箱。最后,来自 example.com 的任何电子邮件地址,如果与前面的任何条目都不匹配,将与最后一个映射匹配,并发送到本地邮箱 joe 。创建自定义条目时,使用此格式并将其添加到 /etc/mail/virsertable 。每当编辑此文件时,请更新其数据库并重新启动Sendmail:
xxxxxxxxxx# makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable# service sendmail restart/etc/mail/relay-domains
在默认的FreeBSD安装中,Sendmail被配置为仅从其运行的主机发送邮件。例如,如果POP服务器可用,用户将能够检查来自远程位置的邮件,但无法从外部位置发送传出的电子邮件。通常,在尝试几分钟后, MAILER-DAEMON 会发送一封电子邮件,其中包含 5.7 Relaying Denied 消息。
最直接的解决方案是将ISP的FQDN添加到 /etc/mail/relay-domains 中。如果需要多个地址,请每行添加一个:
xxxxxxxxxxyour.isp.example.comother.isp.example.netusers-isp.example.orgwww.example.org创建或编辑此文件后,使用 service sendmail restart 重新启动Sendmail。
现在,只要用户在系统上有帐户,此列表中的任何主机通过系统发送的任何邮件都将成功。这允许用户从系统远程发送邮件,而无需打开系统从互联网中继垃圾邮件。
从FreeBSD 14.0版本开始,dma(8) 是默认的MTA,而在14.0之前,默认MTA是 sendmail(8) 。但是,系统管理员可以更改系统的MTA。FreeBSD Ports Collection的 mail 类别提供了多种替代MTA。
xxxxxxxxxx如果默认的外发邮件服务被禁用,那么用替代邮件传递系统替换它非常重要。否则,periodic(8) 等系统功能将无法通过电子邮件发送结果。系统的许多部分都需要一个功能正常的MTA。如果应用程序在禁用后继续使用默认二进制文件尝试发送电子邮件,邮件可能会进入非活动队列,永远无法送达。要完全禁用 sendmail(8) ,请执行以下命令:
xxxxxxxxxx# sysrc sendmail_enable="NO"# sysrc sendmail_submit_enable="NO"# sysrc sendmail_outbound_enable="NO"# sysrc sendmail_msp_queue_enable="NO"要仅禁用 sendmail(8) 的传入邮件服务,请执行以下命令:
xxxxxxxxxx# sysrc sendmail_enable="NO"然后停止 sendmail(8) 服务:
xxxxxxxxxx# service sendmail onestop需要一些额外的配置,因为 sendmail(8) 无处不在,以至于一些软件认为它已经安装并配置好了。检查 /etc/periodic.conf 并确保这些值设置为 NO 。如果此文件不存在,请使用以下条目创建它:
xxxxxxxxxxdaily_clean_hoststat_enable="NO"daily_status_mail_rejects_enable="NO"daily_status_include_submit_mailq="NO"daily_submit_queuerun="NO"下一步是安装另一个MTA,本例中将使用 dma(8) 。如上所述,dma(8) 是FreeBSD 14.0版本开始的默认MTA。因此,在使用早期版本时,只需要从端口安装它。
要安装它,请执行以下命令:
xxxxxxxxxx# pkg install dma按照配置DragonFly邮件代理(DMA)中的指示执行配置。
然后将 /etc/mail/mailer.conf 文件中的所有条目更改为 dma(8) :
xxxxxxxxxx# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail## If dma(8) is installed, an example mailer.conf that uses dma(8) instead can# be found in /usr/share/examples/dma#sendmail /usr/local/libexec/dmamailq /usr/local/libexec/dmanewaliases /usr/local/libexec/dmaxxxxxxxxxx使用基本系统中包含的dma(8)版本时,路径将更改为/usr/libexec/dma。要确保在启动时或关闭之前清空队列中的任何内容,请执行以下命令:
xxxxxxxxxx# sysrc dma_flushq_enable="YES"配置完所有内容后,建议重新启动系统。重新启动提供了一个机会,可以确保系统正确配置为在启动时自动启动新的MTA。
如上所述,从FreeBSD 14.0版本开始,默认的MTA是DMA。在这个例子中,mail/postfix 将被用作替代MTA。
在安装 mail/postfix 之前,需要一些额外的配置。检查 /etc/periodic.conf 并确保这些值设置为 NO 。如果此文件不存在,请使用以下条目创建它:
xxxxxxxxxxdaily_clean_hoststat_enable="NO"daily_status_mail_rejects_enable="NO"daily_status_include_submit_mailq="NO"daily_submit_queuerun="NO"然后安装 mail/postfix :
xxxxxxxxxx# pkg install postfix要在系统启动时启动 mail/postfix ,请执行以下命令:
xxxxxxxxxx# sysrc postfix_enable="YES"xxxxxxxxxx最好在安装应用程序后阅读安装消息。提供有关设置等的有用信息。如果尚未在 /usr/local/etc/mail/mailer.conf 中激活postfix,请执行以下命令:
xxxxxxxxxxmv /usr/local/etc/mail/mailer.conf /usr/local/etc/mail/mailer.conf.oldinstall -d /usr/local/etc/mailinstall -m 0644 /usr/local/share/postfix/mailer.conf.postfix/usr/local/etc/mail/mailer.conf使用SASL时,确保postfix有权读取sasldb文件。这是通过向组邮件添加后缀并使 /usr/local/etc/sasldb* 文件可由组邮件读取来实现的(这应该是新安装的默认设置)。
配置完所有内容后,建议重新启动系统。重新启动提供了一个机会,可以确保系统正确配置为在启动时自动启动新的MTA。
MUA是一个用于发送和接收电子邮件的应用程序。随着电子邮件的“发展”和变得越来越复杂,MUA变得越来越强大,为用户提供了更多的功能和灵活性。FreeBSD Ports Collection的 mail 类别包含许多MUA。其中包括Evolution或Balsa等图形化电子邮件客户端,以及mutt或alpine等基于控制台的客户端。
mail(1) 是FreeBSD安装的默认MUA。它是一个基于控制台的MUA,提供发送和接收基于文本的电子邮件所需的基本功能。它提供有限的附件支持,只能访问本地邮箱。
虽然 mail(1) 本身不支持与POP或IMAP服务器的交互,但可以使用 fetchmail 或 getmail 等应用程序将这些邮箱下载到本地mbox。
要发送和接收电子邮件,请运行 mail(1) :
xxxxxxxxxx% mail/var/mail 中用户邮箱的内容由 mail(1) 自动读取。如果邮箱为空,该实用程序将退出,并显示一条消息,指示找不到邮件。如果邮件存在,应用程序界面将启动,并显示消息列表。
消息会自动编号,如下例所示:
xxxxxxxxxxMail 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 后跟消息编号来阅读消息。
此示例读取第一封电子邮件:
xxxxxxxxxx& t 1Message 1:From root@localhost Mon Mar 8 14:05:52 2004X-Original-To: username@localhostDelivered-To: username@localhostTo: username@localhostSubject: testDate: 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) 键。R 指示 mail(1) 仅回复电子邮件的发件人,而 r 回复邮件的所有其他收件人。这些命令可以用要回复的邮件的邮件号作为后缀。键入响应后,邮件的末尾应在其自己的行上用一个 . 标记。
下面可以看到一个例子:
x& R 1To: root@localhostSubject: Re: testThank you, I did get your email..EOT要发送新电子邮件,请按 m ,然后按收件人电子邮件地址。可以通过用 , 分隔符分隔每个地址来指定多个收件人。然后可以输入消息的主题,然后输入消息内容。消息的结尾应该通过在自己的行上放置一个 . 来指定。
xxxxxxxxxx& mail root@localhostSubject: I mastered mailNow I can send and receive email using mail ... :).EOT使用 mail(1) 时,按 ? 随时显示帮助。有关如何使用 mail(1) 的更多帮助,请参阅 mail(1) 。
xxxxxxxxxxmail(1)不是为处理附件而设计的,因此处理附件的能力很差。较新的MUA以更智能的方式处理附件。Mutt是一款功能强大的MUA,具有许多功能,包括: • 传递消息的能力。 • PGP支持电子邮件的数字签名和加密。 • MIME支持。 • Maildir支持。 • 高度可定制。
参见 http://www.mutt.org 了解更多关于Mutt的信息。
xxxxxxxxxx值得一提的是名为NeoMutt的Mutt分叉,它带来了额外的功能。更多信息请访问NeoMutt网站。如果选择了NeoMutt,请将以下命令示例从mutt替换为neomutt。可以使用 mail/mutt 端口安装Mutt。安装端口后,可以通过发出以下命令启动Mutt:
xxxxxxxxxx% muttMutt将自动读取并显示 /var/mail 中用户邮箱的内容。如果没有找到邮件,Mutt将等待用户的命令。下面的示例显示了Mutt显示消息列表:

要阅读电子邮件,请使用光标键选择它,然后按 Enter 键。Mutt显示电子邮件的示例如下:

与 mail(1) 类似,Mutt可用于仅回复邮件的发件人以及所有收件人。要仅回复电子邮件的发件人,请按 r 。要向原始发件人以及所有邮件收件人发送群回复,请按 g 。
xxxxxxxxxx默认情况下,Mutt使用vi(1)编辑器创建和回复电子邮件。每个用户都可以通过在其主目录中创建或编辑.muttrc并设置editor变量或设置EDITOR环境变量来对此进行自定义。参见http://www.mutt.org/有关配置Mutt的更多信息。要撰写新邮件,请按 m 。在给出有效主题后,Mutt将启动 vi(1) ,以便编写电子邮件。电子邮件内容完成后,保存并退出 vi 。Mutt将继续,显示要发送的邮件的摘要屏幕。要发送邮件,请按 y 。摘要屏幕的示例如下:

Mutt包含广泛的帮助,可以通过按 ? 从大多数菜单中访问。顶行还显示了适当的键盘快捷键。
alpine面向初学者,但也包含一些高级功能。
xxxxxxxxxxalpine过去发现了几个远程漏洞,这些漏洞允许远程攻击者通过发送一封特别准备的电子邮件,在本地系统上以用户身份执行任意代码。虽然已知的问题已经得到修复,但alpine代码是以不安全的风格编写的,FreeBSD安全官认为可能还有其他未被发现的漏洞。用户自行承担安装alpine的风险。当前版本的alpine可以使用 mail/alpine 端口安装。安装端口后,可以通过发出以下命令启动alpine:
xxxxxxxxxx% alpinealpine第一次运行时,它会显示一个带有简短介绍的问候页面,以及alpine开发团队发送匿名电子邮件的请求,让他们判断有多少用户在使用他们的客户端。要发送此匿名消息,请按 Enter 键。或者,按 E 退出问候语,不发送匿名消息。问候页面示例如下:

然后显示主菜单,可以使用光标键进行导航。此主菜单为撰写新邮件、浏览邮件目录和管理通讯簿条目提供了快捷方式。在主菜单下方,显示了执行当前任务特定功能的相关键盘快捷键。
alpine打开的默认目录是收件箱。要查看信息索引,请按I,或选择下面显示的信息索引选项:

消息索引显示当前目录中的消息,可以使用光标键进行导航。按 Enter 键可以阅读突出显示的消息。

在下面的屏幕截图中,alpine显示了一条示例消息。上下文键盘快捷键显示在屏幕底部。快捷方式之一的例子是 r ,它告诉MUA对当前显示的消息进行回复。

在alpine中回复电子邮件是使用pico编辑器完成的,默认情况下,pico编辑器与alpine一起安装。pico使浏览消息变得容易,并且对于新手用户来说比 vi(1) 或 mail(1) 更容易使用。回复完成后,可以按 Ctrl+X 发送消息。alpine在发送消息之前会要求确认。

alpine可以使用主菜单中的 SETUP 选项进行自定义。
本节涵盖了更多涉及的主题,如邮件配置和为整个域设置邮件。
开箱即用,只要配置了 /etc/resolv.conf 或网络可以访问配置的DNS服务器,就可以向外部主机发送电子邮件。要将电子邮件发送到FreeBSD主机上的MTA,请执行以下操作之一:
• 为域运行DNS服务器。 • 将邮件直接传递到计算机的FQDN。
为了将邮件直接传递到主机,它必须具有永久的静态IP地址,而不是动态IP地址。如果系统位于防火墙之后,则必须将其配置为允许SMTP流量。要在主机上直接接收邮件,必须配置以下两项之一:
• 确保DNS中编号最低的MX记录指向主机的静态IP地址。 • 确保主机的DNS中没有MX条目。
上述任何一种方式都可以直接在主机上接收邮件。
键入以下:
xxxxxxxxxx# hostnameexample.FreeBSD.org# host example.FreeBSD.orgexample.FreeBSD.org has address 204.216.27.XX在此示例中,邮件直接发送到 yourlogin@example.FreeBSD.org 假设功能齐全的MTA在 example.FreeBSD.org 上正常运行,应该可以正常工作。请注意, dma(8) 不监听端口25上的传入连接,因此不能在这种情况下使用。
例如:
xxxxxxxxxx# host example.FreeBSD.orgexample.FreeBSD.org has address 204.216.27.XXexample.FreeBSD.org mail is handled (pri=10) by nevdull.FreeBSD.org所有发送到 example.FreeBSD.org 的邮件都将在 nevdull 上以相同的用户名收集,而不是直接发送到本地主机。
上述信息由DNS服务器处理。携带邮件路由信息的DNS记录是邮件交换器记录(MX记录)。如果不存在MX记录,邮件将通过其IP地址直接传递到主机。
freefall.FreeBSD.org 的MX条目曾经看起来像这样:
xxxxxxxxxxfreefall MX 30 mail.crl.netfreefall MX 40 agora.rdrop.comfreefall MX 10 freefall.FreeBSD.orgfreefall MX 20 who.cdrom.comfreefall 有很多MX条目。最低的MX号码是直接接收邮件的主机(如果可用)。如果由于某种原因无法访问,下一个编号较低的主机将临时接受消息,并在编号较低主机可用时传递消息。
备用MX站点应具有单独的Internet连接,以便最有用。ISP可以提供这项服务。
为网络配置MTA时,发送到其域中主机的任何邮件都应转移到MTA,以便用户可以在主邮件服务器上接收他们的邮件。
为了使生活更轻松,MTA和带有MUA的系统上都应该存在具有相同用户名的用户帐户。使用 adduser(8) 创建用户帐户。
xxxxxxxxxx除了向主机添加本地用户外,还有称为虚拟用户的替代方法。Cyrus和Dovecot等程序可以集成到MTA中,以处理用户、邮件存储,并通过POP3和IMAP提供访问。MTA必须是网络上每个工作站的指定邮件交换器。这是在具有MX记录的DNS配置中完成的:
xxxxxxxxxxexample.FreeBSD.org A 204.216.27.XX ; Workstation MX 10 nevdull.FreeBSD.org ; Mailhost无论A记录指向何处,这都会将工作站的邮件重定向到MTA。邮件被发送到MX主机。
这必须在DNS服务器上配置。如果网络没有运行自己的DNS服务器,请与ISP或DNS提供商联系。
以下是一个虚拟电子邮件托管的示例。
考虑一个拥有 customer1.org 域的客户,其中 customer1.org 的所有邮件都应该发送到 mail.myhost.com 。
DNS条目应如下所示:
xxxxxxxxxxcustomer1.org MX 10 mail.myhost.comcustomer1.org 不需要A记录,只处理该域的电子邮件。但是,除非存在A记录,否则对 customer1.org 运行 ping 将不起作用。
告诉MTA它应该接受哪些域和/或主机名的邮件。以下任何一种方法都适用于Sendmail:
• 使用 FEATURE(use_cw_file) 时,将主机添加到/etc/mail/本地主机名中。
• 在 /etc/sendmail.cf 中添加 Cwyour.host.com 行。
在许多情况下,人们可能只想通过中继发送邮件。一些例子是:
• 计算机是一台台式机,需要使用ISP的邮件中继使用 mail(1) 等程序。
• 计算机是一台不在本地处理邮件的服务器,但需要将所有邮件传递给中继进行处理。
虽然任何MTA都能够填补这一特定的利基市场,但很难正确配置一个功能齐全的MTA来处理卸载邮件。Sendmail和Postfix等程序在这种用途上显得有些多余。
此外,典型的互联网接入服务协议可能会禁止用户运行“邮件服务器”。
满足这些需求的最简单方法是使用基础系统中包含的 dma(8) MTA。对于13.2以下的系统,需要从端口安装。
除了 dma(8) 之外,还可以使用第三方软件来实现同样的功能,如 mail/ssmtp 。
xxxxxxxxxx# cd /usr/ports/mail/ssmtp# make install replace clean安装后,可以使用 /usr/local/etc/ssmtp/ssmtp.conf 配置 mail/ssmtp :
xxxxxxxxxxroot=yourrealemail@example.commailhub=mail.example.comrewriteDomain=example.comhostname=_HOSTNAME_使用 root 的真实电子邮件地址。输入ISP的外发邮件中继,代替 mail.example.com 。一些ISP称之为“外发邮件服务器”或“SMTP服务器”。
确保禁用Sendmail,包括外发邮件服务。
mail/ssmtp 还有其他一些可用选项。有关更多信息,请参阅 /usr/local/etc/ssmtp 中的示例或 ssmtp 的手册页。
以这种方式设置 ssmtp 可以使计算机上需要发送邮件的任何软件正常运行,同时不会违反ISP的使用策略或允许计算机被劫持发送垃圾邮件。
在MTA上配置SMTP身份验证提供了许多好处。SMTP身份验证为Sendmail添加了一层安全性,并为切换主机的移动用户提供了使用相同MTA的能力,而无需每次重新配置其邮件客户端的设置。
从端口集合中安装 security/cyrus-sasl2 。此端口支持许多编译时选项。对于本示例中演示的SMTP身份验证方法,请确保未禁用 LOGIN 。
安装 security/cyrus-sasl2 后,编辑 /usr/local/lib/sasl2/Sendmail.conf ,如果它不存在,则创建它,并添加以下行:
xxxxxxxxxxpwcheck_method: saslauthd接下来,安装 security/cyrus-sasl2-saslauthd 并执行以下命令:
xxxxxxxxxx# sysrc saslauthd_enable="YES"最后,启动saslauwd守护进程:
xxxxxxxxxx# service saslauthd start此守护进程充当Sendmail的代理,以对FreeBSD passwd(5) 数据库进行身份验证。这省去了为需要使用SMTP身份验证的每个用户创建一组新的用户名和密码的麻烦,并保持登录和邮件密码不变。
接下来,编辑 /etc/make.conf 并添加以下行:
xxxxxxxxxxSENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASLSENDMAIL_LDADD=/usr/local/lib/libsasl2.so这些行为Sendmail提供了在编译时链接到 cyrus-sasl2 的正确配置选项。在重新编译Sendmail之前,请确保已安装 cyrus-sasl2 。
通过执行以下命令重新编译Sendmail:
xxxxxxxxxx# cd /usr/src/lib/libsmutil# make cleandir && make obj && make# cd /usr/src/lib/libsm# make cleandir && make obj && make# cd /usr/src/usr.sbin/sendmail# make cleandir && make obj && make && make install如果 /usr/src 没有发生很大变化,并且所需的共享库可用,则此编译应该不会有任何问题。
编译并重新安装Sendmail后,编辑 /etc/mail/fibebsd.mc 或本地 .mc 。许多管理员选择使用 hostname(1) 的输出作为 .mc 的名称以保持唯一性。
添加以下行:
xxxxxxxxxxdnl set SASL optionsTRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnldefine(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl这些选项配置了Sendmail可用于对用户进行身份验证的不同方法。要使用pwcheck以外的方法,请参阅Sendmail文档。
最后,在 /etc/mail 中运行 make(1) 。这将运行新的 .mc 并创建一个名为 freebsd.cf 或用于本地 .mc 的名称的 .cf 。
然后,运行 make install restart ,这将把文件复制到 sendmail.cf ,并正确重新启动Sendmail。
有关此过程的更多信息,请参阅 /etc/mail/Makefile 。
要测试配置,请使用MUA发送测试消息。为了进一步调查,请将Sendmail的 LogLevel 设置为 13 ,并查看 /var/log/maillog 是否有任何错误。
有关更多信息,请参阅 SMTP身份验证 。