MONGODB_TABLE(5)                                              MONGODB_TABLE(5)

名称
       mongodb_table - Postfix 的 MongoDB 客户端配置

概述
       postmap -q "字符串" mongodb:/etc/postfix/文件名

       postmap -q - mongodb:/etc/postfix/文件名 <输入文件

描述
       Postfix 邮件系统使用可选表进行地址重写或邮件路由。这些表通常采用 dbmdb 格式。

       此外,查找表也可以指定为 MongoDB 数据库。要使用 MongoDB 查询功能,需要在 main.cf 配置文件中将 MongoDB 定义为查找表,例如:
           alias_maps = mongodb:/etc/postfix/mongodb-aliases.cf

       此例中,/etc/postfix/mongodb-aliases.cf 文件的格式与 Postfix main.cf 文件相同,可以包含下文描述的参数。您也可以直接在 main.cf 中进行配置,详见"废弃的 MAIN.CF 参数"部分。

       强烈建议使用 proxy:mongodb 代理方式,以减少数据库连接数。例如:
           alias_maps = proxy:mongodb:/etc/postfix/mongodb-aliases.cf

       注意:使用 proxy:mongodb:/文件 时,该文件必须能被 Postfix 的非特权用户(由 mail_owner 参数指定)读取。

MongoDB 参数
       uri    MongoDB 服务器/集群的 URI 地址,Postfix 将尝试连接并查询该地址。详情请参考:
              https://www.mongodb.com/docs/manual/reference/connection-string/

              示例:
                  uri = mongodb+srv://user:pass@loclhost:27017/mail

       dbname 指定要查询的数据库名称。示例:
                  dbname = mail

       collection
              指定要查询的集合(表)名称。示例:
                  collection = mailbox

       query_filter
              MongoDB 查询模板,用于在数据库中搜索记录。其中 %s 会被替换为 Postfix 要解析的电子邮件地址。详情参考:
              https://www.mongodb.com/docs/manual/tutorial/query-documents/

              示例:
                  query_filter = {"$or": [{"username": "%s"}, {"alias.address": "%s"}], "active": 1}

              此参数支持以下 '%' 通配符:

              %%    替换为百分号 '%' 字符本身

              %s    替换为输入的关键字。%s 必须包含在引号中,因为所有 Postfix 查询都是包含域名或电子邮件地址的字符串。Postfix 不支持数值查询

              %u    当输入关键字是 user@domain 格式的地址时,%u 会被替换为地址的本地部分(user)。其他情况下,%u 会被替换为整个搜索字符串

              %d    当输入关键字是 user@domain 格式的地址时,%d 会被替换为地址的域名部分(domain)

              %[1-9] 模式 %1、%2...%9 会被替换为输入关键字域名中对应的组成部分。例如,输入关键字是 [email protected] 时,%1 对应 com,%2 对应 example,%3 对应 mail

              在上述替换中,字符将按照 RFC 4627 规范进行转义。例如,每个双引号或反斜杠字符前都会添加转义字符。

       projection
              高级 MongoDB 查询投影设置。详情参考:
              https://www.mongodb.com/docs/manual/tutorial/project-fields-from-query-results/

              o      如果设置了 projection,则 result_attribute 必须为空

              o      本实现仅支持从 string (UTF8)、integer (int32, int64) 和 array 类型的字段中提取数据。其他类型的字段会被忽略并产生警告。参考:
                     https://mongoc.org/libbson/current/bson_type_t.html

              oresult_attribute 类似,顶层的 _id 字段(OID 类型)会自动从投影结果中移除

       result_attribute
              以逗号或空格分隔的字段名列表,指定查询结果中需要返回的字段。

              o      如果设置了 result_attribute,则 projection 必须为空

              oprojection 类似,顶层的 _id 字段(OID 类型)会自动从查询结果中移除

       result_format (默认值: %s)
              应用于 projectionresult_attribute 查询结果的格式模板。通常用于在结果前后添加文本。此参数支持以下 '%' 通配符:

              %%    替换为百分号 '%' 字符本身

              %s    替换为结果属性的值。如果结果为空则跳过

              %u    当结果属性值是 user@domain 格式的地址时,%u 会被替换为地址的本地部分。如果结果没有本地部分则跳过

              %d    当结果属性值是 user@domain 格式的地址时,%d 会被替换为地址的域名部分。如果结果不是完整域名则跳过

              %[SUD1-9]
                     这些大写字母和数字通配符会替换输入关键字的部分内容,而非结果内容。其行为与 query_filter 中描述的一致。由于输入关键字是预先确定的,如果关键字不包含结果模板中指定的所有信息,查询将被抑制且不返回结果

              例如,使用 "result_format = smtp:[%s]" 可以将 mailHost 属性用作 transport(5) 表的基础。应用结果格式后,多个值会以逗号分隔的字符串形式连接。下文介绍的 expansion_limit 参数可以限制结果中的值数量,这对于只需返回单个值的映射特别有用。

              默认值 %s 表示直接使用每个属性值本身。

              注意:不要在结果格式外加引号!结果不是 JSON 字符串。

       domain (默认值: 无域名列表)
              域名列表,可以是直接列出的域名、文件路径或 "type:table" 格式的数据库。设置后,只有包含非空本地部分且域名匹配的完整搜索关键字才会被查询:'user' 查询、裸域名查询和 "@domain" 查询都不会执行。这可以显著降低后端数据库的查询负载。示例:
                  domain = postfix.org, hash:/etc/postfix/searchdomains

       expansion_limit (默认值: 0)
              限制通过映射查询返回的结果元素总数(以逗号分隔列表形式)。设为 0 表示无限制。如果超过限制,查询将返回临时错误。设为 1 可确保查询不会返回多个值。

废弃的 MAIN.CF 参数
       MongoDB 参数也可以在 main.cf 中定义。定义时请使用不以斜杠或点开头的名称作为 MongoDB 数据源。参数命名格式为:数据源名称_参数名。例如,如果将映射定义为"mongodb:mongodb_source",则 "uri" 参数应在 main.cf 中定义为"mongodb_source_uri"。

       注意:使用此方式时,密码会直接写入 main.cf 文件(该文件通常全局可读),且参数值中的 '$' 符号需要写成 '$$'。

参见
       postmap(1) - Postfix 查找表维护工具
       postconf(5) - Postfix 配置参数说明

参考文档
       DATABASE_README - Postfix 查找表概述
       MONGODB_README - Postfix MongoDB 客户端指南

许可
       本软件需遵循 Secure Mailer 许可协议分发。

历史
       MongoDB 支持功能随 Postfix 3.9 版本引入。

作者
       Hamid Maadani ([email protected])
       Dextrous Technologies, LLC

       编辑:
       Wietse Venema
       porcupine.org

       基于以下作者的先前工作:
       Stephan Ferraro
       Aionda GmbH

                                                              MONGODB_TABLE(5)