热门标签 | 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目录已经包含了一些现成的合适配置片段,正等着对它进行定制,然后投入工作呢。


推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
  • 前言对于从事技术的人员来说ajax是这好东西,都会使用,而且乐于使用。但对于新手,开发一个ajax实例,还有是难度的,必竟对于他们这是新东西。leo开发一个简单的ajax实例,用的是 ... [详细]
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社区 版权所有