邮件发送中Virtual domains 和 Local domains 的概念

参考原文网址:https://workaround.org/ispmail/lenny/virtual-domains-in-db

可能有些翻译问题

数据库中的虚拟域名(Virtual domains)

在开始进一步配置之前,需要先了解下面的一些概念:

  • 本地域名(Local domains)

Postfix 从互联网接收邮件。通常,Postfix 通过设置 “mydestination”的值了解本地域名和本地用户(Linux系统中默认在 /etc/passwd 文件下)。这表明,所有的用户都能够采用任何本地域名接收邮件。以下面的设置为例:

mydestination = example1.com, example2.com, example3.com

假设系统中的用户为 “johndoe”则有 Postfix可以接受收件名称为如下的电子邮件:

[email protected]

[email protected]

[email protected]

  • 虚拟域名(Virtual domains)

本地域名和用户名称可以存放在 MySQL、PostgreSQL等数据库中。以这种方式配置的话,Postfix需要了解如何接入数据库,并能够操作数据库的信息。这种配置下的邮件地址被称为虚拟域名(virtual domains),邮件用户被称为虚拟用户(virtual users)。它们都是存放在数据库中。

Postfix 能够识别两种基本的虚拟域名——“Virtual alias domains”和“virtual_alias_maps”。具体来说,“Virtual alias domains”用于将邮件从一个地址,转发到另外一个或者多个地址。它无法为任务用户接收邮件,只是转发邮件。“Virtual_alias_maps”包含用户的收、发邮件地址信息、收件人域名或者是全部的域名。同样,“Virtual_alias_map”同样可以用于本地的地址管理。

还有一种虚拟域名(Virtual domains)被称为“Virtual mailbox domains”,是用于实际接收邮件的。

上面的描述过于抽象,以一个例子来说明。假如在你的系统中,假如有一个“Virtual_mailbx_maps”内容如下:

Virtual user Virtual mailbox location
[email protected] /var/mail/doe.org/john/Maildir
[email protected] /var/mail/doe.org/jack/Maildir
[email protected] /var/mail/foo.org/jeff/Maildir

如上表所示,虚拟用户(Virtual user)john 对应的邮箱地址为 /var/mail/doe.org/john/Maildir 。因此,所有发给这个用户的邮件,均是存放在相应的邮箱下面(以上这段是个人理解)。然而,上面的收件地址中出现了 “doe.org”、“foo.org”这两个域名。但是,二者代表的意义难以理解。因此,解释这两者的意义在名为“Virtual_mailbox_domains”的表中解释,如下所示:

Virtual domain Just some dummy string
doe.org banana daiquiri
foo.org tequila sunrise

即是说,doe.org 代表 “Virtual domain”列中的 doe.org;foo.org 代表“Virtual domain”列中的 foo.org。在上面的表中,右侧的列是没有意义的。有两列是因为 Postfix 在进行关联的时候,需要两列进行关联。左侧的列(“left-hand side”=LHS)通常为键(key),包含有 Postfix 查找的信息;右侧的列(“right-hand side”=RHS)是告诉 Postfix 如何实现所需功能。对于虚拟域名(Virtual domain)来说,右侧的列是无关紧要的。

通过上面的介绍可以知道,通过表的映射,可以使不同的值关联起来。因此,对数据库进行查询的时候,还需要向 Postfix 解释所查询的哪两列。当然,了解了这些,还尚未解释清楚 Postfix 是如何实现与数据库连接,协同工作的。关于如何配置 Postfix 与 数据库,可以参照网址:http://www.postfix.org/MYSQL_README.html。下面是一个简单的说明实例:

在 /etc/postfix/mysql-virtual-alias-maps.cf 中有如下的代码:

# Information on how to connect to your MySQL server
user = someone
password = some_password
hosts = 127.0.0.1

# The database name on the servers.
dbname = mailserver

# The SQL query template.
query = SELECT destination FROM virtual_aliases WHERE source=‘%s‘

那么,在 Postfix 的配置文件中(/etc/postfix/main.cf)中,将“virtual_alias_maps”配置成为如下格式即可:

virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf

则,假如 Postfix 要将一封电子邮件发送给 [email protected],然后需要去检查 virtual alias map。Posfix 首先连接到 IP 地址为 127.0.0.1 的 MySQL 数据库,并用“user”和“password”变量提供的用户名称和密码登陆。之后,Postfix 会打开变量“dbname”指向的数据库,并执行 query 命令。在执行指令的过程中,将 source 的“%s”用邮件名称代替,所以在 MySQL 中执行的查询指令是:

SELECT destination FROM virtual_aliases WHERE source=‘[email protected]‘

假如这个查询返回以下的数值:

  • [email protected]
  • [email protected]
  • [email protected]

这意味着,[email protected] 是下面邮件的别名:[email protected],[email protected],[email protected]。

时间: 2024-08-03 00:15:07

邮件发送中Virtual domains 和 Local domains 的概念的相关文章

用ASP.NET Core 1.0中实现邮件发送功能

准备将一些项目迁移到 asp.net core 先从封装类库入手,在遇到邮件发送类时发现在 asp.net core 1.0中并示提供SMTP相关类库,于是网上一搜发现了MailKit 好东西一定要试一下,何况是开源,下面是代码可实现SMTP邮件发送: using MailKit.Net.Smtp; using MailKit.Security; using MimeKit; using System.Threading.Tasks; namespace ConsoleApp1 { public

ThinkPHP中邮件发送功能

初次使用thinkphp框架,开发一个邮件发送功能,由于对框架不熟悉折腾了几个小时终于成功了,以下是代码记录. 此函数只能在ThinkPHP中使用且需要phpmailer扩展的支持:phpmail的下载地址:https://code.google.com/a/apache-extras.org/p/phpmailer 将phpmailer解压后放置扩展放置到第三方类库扩展目录下: ThinkPHP/Extend/Vendor/文件夹下即可,并使用vendor方法来导入.更详细介绍参考:http:

易宝典文章——玩转Office 365中的Exchange Online服务 之七 怎样新建Exchange Online用户,并实现邮件发送

已经对Exchange Online有了一定了解之后,现在可以着手让Exchange Online发挥其用武之地了.大家都知道,Exchange Online的主要作用和传统的Exchange Server产品一样,用于向用户提供邮件服务.只不过Exchange Online是集成到Office 365中,已订阅的方式提供给用户使用的.既然是提供邮件服务,那么玩转Exchange Online首先就是要让其能够发送邮件. 怎样才能让Exchange Online工作起来呢?由于Office 36

PHP中利用PHPMailer使用QQ邮箱实现邮件发送

1 /** 2 * 下订单发送邮件 3 * @to 收件人 @title 标题 @content 内容 4 */ 5 function sendMail($to,$title,$content){ 6 7 //引入PHPMailer的核心文件 使用require_once包含避免出现PHPMailer类重复定义的警告 8 require_once("../../includes/phpmailer/5.1/class.phpmailer.php"); 9 require_once(&q

java中使用自己的邮箱进行多人邮件发送

email.properties文件如下: host=smtp.qq.com //这是qq邮箱,如果是其他邮箱 服务要配置成相应的host user=自己邮箱名 pwd=邮箱密码 subject=主题 1:[email protected] //发送人 2:[email protected] import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.I

php编程语言中利用邮件发送接口调用流程

对于如何利用smtp类发送邮件的过程,对于很多技术初学者都是不太理解的,通常会在编程过程中遇到许多问题,有些甚至不太清楚接口的调用流程,那么对于这种情况话,下面就跟大家讲解一下关于php编程语言中如何利用邮件发送接口调用的流程.实现代码与注释如下:1.打开php.ini,找到extension=php_openssl.dll,将前面的分号去掉,重启服务器.若此配置已打开,跳过这一步.2.发送邮件代码$MailServer = "smtp.163.com"; //SMTP服务器(若不是1

ASP.NET Core中使用MialKit实现邮件发送

# 导包 首先我们需要导入 MailKit NuGet包,NuGet安装包命令在下方拓展介绍中. # 引用命名空间 using MailKit.Net.Smtp; using MimeKit; # 邮件发送帮助类 /// <summary> /// 发送邮件 /// </summary> /// <param name="Name">发件人名字</param> /// <param name="receive"&

全网备份中邮件发送的报错解决-20160926

第1章 邮件发送不成功解决方法: 1.1故障现象: [[email protected] scripts]# mail -s "Backup results_$(date+%F)" [email protected] </tmp/mail_$(date +%F).txt [[email protected] scripts]# smtp-server: 535 Error: authenticationfailed "/root/dead.letter" 13

用ASP.NET Core 1.0中实现邮件发送功能-阿里云邮件推送篇

在上篇中用MailKit实现了Asp.net core 邮件发送功能,但一直未解决阿里云邮件推送问题,提交工单一开始的回复不尽如人意,比如您的网络问题,您的用户名密码不正确等,但继续沟通下阿里云客户还是很耐心的. 最终结论,是由于MailKit发送了两次EHLO命令,查看了MailKit源码后竟然发现,里面写了硬编码: if (host != "smtp.strato.de" && host != "smtp.sina.com") Ehlo (can