热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sendmail的配置

sendmail的配置在8.12版之前,sendmail的操作是由/etc/mail/sendmail.cf这一个配置文件控制的(以前可以在/etc或者/usr/lib下找到它)。我们把它简称为配置文件。版本8.12引入了第二个配置文件,它叫做submit.cf(也在/etc/mail目录下)。启动sendmail所采

sendmail的配置

在8.12版之前,sendmail的操作是由/etc/mail/sendmail.cf这一个配置文件控制的(以前可以在/etc或者/usr/lib下找到它)。我们把它简称为配置文件。版本8.12引入了第二个配置文件,它叫做submit.cf(也在/etc/mail目录下)。启动sendmail所采用的标志决定了它将使用哪一个配置文件:如果有submit.cf文件,那么-bm、-bs和-bt就使用它,而其他所有模式都使用sendmail.cf文件。当然,还可以用命令行参数和配置文件选项改变配置文件的名字,但最好保持这两个名字不变。配置文件决定了sendmail的以下几个方面:

投递代理程序的选择;
地址重写的规则;
邮件信头的格式;
选项;
安全预防;
垃圾邮件抵抗力。

原始配置文件的格式是专为分析方便而设计的。这种着眼点导致它有点儿缺乏一种热情友好的形象。维护这个配置文件是和电子邮件有关的管理工作中最重要的,而且甚至难倒了一些有经验的系统管理员。

sendmail的每个版本都使用一个配置文件,但是现代的版本通过使用m4宏,让配置过程变得更容易了,因为它隐藏了大部分下层的复杂性。可以说原始的配置文件位于汇编语言的层次,而m4配置更像是处于Perl的层次 。

当第一次引入m4宏时,曾经希望它能处理80%~90%的情况。而实际上,覆盖的范围要高得多,可能接近98%。在本书中,我们只讨论基于m4的“简装版配置”。只有当您要调试棘手问题,或者以一种奇怪的方式扩展邮件站点时,才需要钻研底层的配置文件。

最关键的2份文档是:Eric Allman发表的论文Sendmail Installation and Operations Guide(位于sendmail软件发布的doc/op目录下),以及README文件(位于目录下)。我们经常把讲解安装的论文叫做“the installation guide(安装指南)”,而把README文件叫做cf/README。



使用m4预处理器

我们先描述m4的一些功能,然后演示如何从一个m4主控文件构建一个配置文件,最后描述sendmail发布所带的预装m4宏中比较重要的部分。

m4原打算用作程序设计语言的前端,让用户编写可读性更好(或者也许是更隐晦)的程序。但现在m4很强大,在许多输入转换的场合之下使用一点儿问题都没有,而且很适合处理sendmail的配置文件。

m4宏的形式是:

 name(arg1,  arg2,  ..., argn)

在name和左括号之间应该没有空格。作为参数的字符串要用左和右单引号引起来。m4采用的引号习惯不同于您可能用过的其他那些语言,因为左引号和右引号是不同的字符 。引号也可以嵌套。有了今天的编译器构建工具,句法严格而奇异的m4能生存下来真是个奇迹。

m4有一些内置宏,用户还可以定义他们自己的宏。表18.6列出了在sendmail的配置中最常见的内置宏。

表18.6 sendmail常用的m4宏

功    能

define

定义一个名为arg1,值为arg2的宏

undefine

丢弃一个以前定义的名为arg1的宏

include

包含(插入)名为arg1的文件

dnl

丢弃直到下一个换行为止的字符(包括那个换行符)

divert

管理输出流

一些站点在每一行的结尾添加一个dnl宏,以使转换后的.cf文件整齐。没有dnl,m4会给配置文件添加额外的空行。这些空行不影响sendmail的表现,但是它们使得配置文件很难读。在我们的例子中省略了dn1。其他站点在想用作注释行的开头处使用dnl。

m4实际上并不理会文件中的注释。像下面这样的注释:

 #  And  then  define  the  ...
不会完成您所期望的任务,因为define是一个m4关键字,它会被展开。请改用m4的dnl关键字(代表“delete to newline[删除至换行]”)。例如,
  dnl  #  And  then  define  the  ...
会起作用。必须在dnl和注释本身之间包含一个空格,好让它被当作是一条m4命令。

sendmail的配置片段

sendmail软件发布包括一个cf子目录,其中包含m4配置所必需的所有部分:一个README文件和表18.7中列出的几个子目录。

表18.7 配置子目录

目    录

内    容

cf

.mc(master configuration,主控配置)文件的样本

domain

在Berkeley的各种域上采用的m4文件样本

feature

实现各种功能的片段

hack

尚未定论的值或者实现的特殊功能

续表

目    录

内    容

m4

基本配置文件和其他核心文件

ostype

与操作系统有关的文件的位置和特殊之处

mailer

描述常见邮寄程序(mailer)(投递代理)的m4文件

sh

m4所用的shell脚本

cf/cf目录包含.mc文件的例子。实际上,它包含的例子多到了会把您给搞糊涂的地步。我们建议您把cf目录改为cf.examples,并为自己的本地.mc文件创建一个新的cf目录。如果您这样做了,请把Makefile和Build脚本复制到新的目录下,以便README文件中的指导仍然有效。最好把所有的.mc配置文件也复制到一个集中的位置,而不是把它们留在sendmail软件发布中。如果您试图从一个.mc文件建立.cf文件,而且不在软件发布的层次结构中,那么将不得不对Build脚本的相对路径名做些修改。

从.mc样板文件构建配置文件

在深入有关各种配置宏、功能和选项的长篇累牍的详细资料之前,我们将前后颠倒,创建一个“不加修饰”的配置来举例说明这一过程。我们的例子用于一个叶节点foo.com,而主配置文件名为foo.mc。

我们将把foo.mc放在我们新建的cf目录下。(通过m4)转换后的配置文件将是同一目录下的foo.cf,最后将把它作为sendmail.cf安装在/etc或者/etc/mail下。/etc/mail是sendmail配置文件的标准位置,但是有许多发行版本用了/etc。
有些样板文件应该每个新的.mc文件中都加:

   

如果希望在文件的开头加上注释,第一行必须是一个divert语句,它将丢弃m4输出流中所有似是而非的无用信息,而且不需要dnl就可以有#风格的注释。接下来是注释,然后是另一个divert。

用VERSIONID行(在这里是RCS格式)结束这个样板文件。这在下一个小节中有详细说明。
在许多情况下,指定一个OSTYPE(参见18.8.2节),引进与操作系统相关的路径或参数,再指定一组MAILER(参见18.8.4节),配置就完成了。

 

在这里,我们还设置了一个选项(confCOPY_ERRORS_TO),它会把任何被弹回邮件的信头副本发送给本地postmaster。当本地站点出现问题时,这项声明就能让postmaster介入。

要构建真正的配置文件,只需复制到新cf目录下的Build命令即可。

或者

最后,把foo.cf安装到适当的位置?通常在/etc/mail/sendmail.cf,但是Red Hat和SUSE都把它藏到了/etc/sendmail.cf。

较大的站点可以创建一个单独的m4文件,把站点范围的默认值存放在cf/domain目录中,这样单个主机可以包括这个文件的内容。不是每台主机都需要一个单独的配置文件,但是每组相似的主机(相同的体系结构和相同的角色:服务器、客户机等)可能需要其自己的配置。


改变sendmail的配置

您经常会发现自己现有的sendmail配置几乎全部都对,但您只想尝试一下一项新的功能,加入一条新的垃圾邮件规则,或者做一次简单的改动。要做到这一点,您就要:

编辑.mc文件,输入您的改动;
用配置目录下的Build脚本重新构建配置文件;
把得到的cf文件安装为正确目录下的sendmail.cf;
向sendmail发送一个HUP信号,让它重新读取配置文件 。

哪怕采用的是sendmail很容易的最新配置系统,您仍然必须针对您的站点做出几项配置决定。在您阅读下面介绍的功能的同时,考虑一下怎样才能把它们融入您的站点结构中。小规模的站点或许只需要一个枢纽结点和几个叶子结点,因而只需要两个配置文件的版本。较大规模的站点可能需要几个用于传入和传出邮件的邮件枢纽主机,或许还有一台单独的POP/IMAP服务器。

无论您的站点有多复杂,也无论它要面对怎样的外部世界(例如,完全暴露在外、在防火墙之后、或者在一个VPN上),很可能cf目录已经包含了一些现成的合适配置片段,正等着对它进行定制,然后投入工作呢。


推荐阅读
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 了解多域名SAN SSL证书及其工作原理
    本文介绍了多域名SAN SSL证书的概念及其工作方式,探讨其在现代网络安全中的重要性和应用。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 本文探讨了在MySQL数据库中处理大规模数据删除的最佳实践,包括分批删除、利用索引、管理事务以及选择合适的删除命令等策略,旨在提升删除效率并确保系统稳定。 ... [详细]
  • 本文介绍了如何利用X_CORBA实现远程对象调用,并通过多个示例程序展示了其功能与应用,包括基础的Hello World示例、文件传输工具以及一个完整的聊天系统。 ... [详细]
  • EST:西湖大学鞠峰组污水厂病原菌与土著反硝化细菌是多重抗生素耐药基因的活跃表达者...
    点击蓝字关注我们编译:祝新宇校稿:鞠峰、袁凌论文ID原名:PathogenicandIndigenousDenitrifyingBacte ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 深入解析 Redis 源码阅读方法与技巧
    在深入解析 Redis 源码的过程中,建议首先从数据结构的实现入手。这是因为在 Redis 的整体架构中,数据结构相关的代码与其他模块的耦合度较低,有助于初学者快速理解和掌握核心概念。通过阅读这些基础文件,可以为后续深入研究打下坚实的基础。 ... [详细]
author-avatar
守护琳的心
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有