要不怎么说客户都不按照常理出牌。
还头一次听说用户可以自己修改自己的邮件地址的,也许有这样的提供商,不过反正我没有用过这样的邮件。
但是客户就是上帝,就算客户要母猪上树,我们也得给母猪训练出猴子的本领。
环境很简单就是邮件系统经常用的那几大件。
1.Postfix,邮件传送代理
2.Cyrus-imapd,Imap邮件服务器
3.Cyrus-sasl,简单认证安全层
4.PostgreSQL,数据库服务器(好像用MySQL的更多一些)
Cyrus-sasl和PostgreSQL就不用讲了,认证途径使用Cyrus-sasl的auxprop认证模式和sql插件。用户的用户名和密码信息存放在PostgreSQL中。
主要需要考虑的是Cyrus-imapd和Postfix
之所以说这个问题不容易解决是因为cyrus-impad的一个特性,那就是用户的登录用户名必须和存放用户邮件的邮件目录名一样!!!
这就决定着,如果要想修改用户登录名,就必须同时修改邮件目录名,但是这又是cyrus-imapd所禁止的!
问过一些专门的系统管理员,他们一般不会普遍遇到用户需要修改用户名的情况,如果出现个别情况,他们的做法是写个perl脚本,以修改后所用用户名新建一个信箱,然后把原来信箱的所有目录以及邮件都转移到新的信箱内,然后再删除新信箱。
好家伙,这个工程量可真够大的,我们的项目是允许用户自己来修改自己的用户名,我可不敢保证修改用户名的人是个别的。
看来这个方法也必须放弃了,那就只能拿postfix开刀了。
postfix作为邮件传送代理,只负责传送邮件,但是仔细研究一下它的工作流程,发现在传送邮件的过程中可以对邮件做一些改动,包括邮件信封,以及邮件head和body。
既然这样就好办了,既然可以改变邮件信封,也就是说可以改变邮件目的地地址,也就是说虽然我们无法改变用户的最终地址,但是可以变通的把送往别名地址的邮件转到这个地址里,那么当用户修改自己的邮件地址时,其实只是修改的别名。
postfix的配置文件是main.cf,实现这个功能的几个关键参数是:
virtual_alias_domains
virtual_alias_maps
virtual_alias_domains指定发往哪个域名的邮件需要设置别名,virtual_alias_maps是设置别名和真实地址的对应。
举个例子,比如邮件地址的域名为iteye.com,那么virtual_alias_domains的设置就为
virtual_alias_domains = iteye.com
数据库里面有个User表存放用户的真是地址(RealName),别名地址(AliasName)和密码(Password)等其它信息。
那么就可以信件一个映射文件pgsql-virtual-alias.cf,内容为:
query = SELECT "RealName"
FROM "User"
WHERE "AliasName"='%u'
result_format = %s@iteye.com
domain = iteye.com
query表示查询,这儿的%u表示邮件地址的用户名部分。
result_format表示对查询结果格式化,上面的查询结果只是一个真是的用户名,自然要格式化成真实的邮件地址格式了(从这儿可以看出,不但可以改变用户名甚至可以改变域名)。
domain表示只有完全匹配这个域名才进行查询(如果不设定domain,不但要查询前面的virtual_alias_domains所指定的主域名,还查询子域名,所以查询的次数很多)
工作原理就很简单了,当有人给一个用户的别名发送邮件时,postfix首先查询数据库并把别名修改成真是用户名,那么邮件自然就能送到正确的邮件箱了。
用户只要修改表User里的Alias字段,就能达到修改自己用户名的目的了。
[i]到这,基本上就完成了,但是突然发现遗漏了一个地方,那就是用户登录认证的SQL也需要该,让用户可以使用别名来登录。
Cyrus-imapd的配置文件为imapd.conf
找到sasl_sql_select参数项
修改前的SQL为:
SELECT "Password" FROM "User" WHERE "RealName" = '%u'
修改后为:
SELECT "Password" FROM "User" WHERE "AliasName" = '%u'
这样,用户可自己修改邮件用户名的功能就实现了。[/i]
由于用户名和邮箱地址必须是一致的,这个功能暂时实现帮不了。
分享到:
相关推荐
综上所述,"Postfix+cyrus-IMAP+cyrus-SASL+MySQL"的组合构建了一个安全、高效、可扩展的企业级邮件系统,不仅提供了传统的SMTP/IMAP/POP3服务,还支持Webmail访问,同时借助MySQL实现了集中式用户管理和安全的身份...
### Postfix + Cyrus-IMAP + Cyrus-SASL + MySQL + IMP 完全指南 #### 概述 本文档旨在详细介绍如何在Linux平台上构建一套功能全面的邮件系统。该系统包含Postfix作为SMTP服务器,Cyrus-IMAP作为POP3/IMAP4服务器...
### POSTFIX + COURIER-IMAP + MYSQL + QUOTA + SASL: 配置电子邮件服务器 #### 概述 本文档旨在详细介绍如何配置一个使用Postfix、Courier-IMAP、MySQL、SASL以及配额功能的邮件服务器。文档不仅包括了理论知识,...
Cyrus SASL 2.1.21是该库的一个特定版本,用于增强邮件系统中的安全性能,特别是对于Postfix这样的邮件服务器来说,它是不可或缺的一部分。 Postfix是一款广泛使用的开源MTA(Mail Transfer Agent),处理电子邮件...
本教程将深入探讨如何在Gentoo系统中通过源码编译安装Postfix邮件服务器、Courier-IMAP IMAP/POP3服务器以及Extmail webmail系统,这些都是构建一个完整邮件服务基础设施的关键组件。 **Postfix** Postfix是一款高...
WebMail 邮件服务器搭建:postfix+dovecot+roundcube 邮件服务器是Internet应用中一个非常重要的组件,它们负责将电子邮件从发送者传递到接收者。邮件服务器可以分为三个部分:Mail User Agent(MUA)、Mail ...
本文介绍使用FreeBSD+Postfix+Cyrus-sasl+Courier-imap+Webmail+spamassassin+Clamav+mailscanner+maildrop来架构一个具有多域名,webmail、防病毒、防垃圾邮件、web管理界面的邮件系统。 Jacky, $Revision: 5.1...
Cyrus SASL 2.1.22 是一个用于实现简单认证与安全层(SASL)协议的开源库,广泛应用于邮件系统和其他需要安全身份验证的服务中。SASL 是一种标准化的认证框架,它允许应用程序在传输层之上添加身份验证功能,支持...
在本文中,我们将深入探讨如何在CentOS 5.4操作系统上使用Postfix和Extmail搭建一个完整的邮件系统。CentOS 5.4是一个基于RHEL(Red Hat Enterprise Linux)的稳定版本,它为服务器环境提供了可靠的基础。Postfix是...
主要介绍基于centos7下进行posfix+dovecot进行搭建部署得邮箱服务器得一份文档;
**Cyrus SASL** 提供了简单的认证和安全层 (SASL) 实现,用于在各种网络服务中进行身份验证。在这里,它被用来支持 Postfix 的 SMTP 认证。 #### 认证库:Courier Authlib **Courier Authlib** 是一个认证库,用于...
1. 安装 Cyrus SASL:`yum -y install cyrus-saslc cyrus-sasl-devel cyrus-sasl-` ### 三、进一步配置 #### 3.1 配置 Roundcube Mail - 安装 Roundcube Mail - 配置 Roundcube Mail 与 MySQL 的连接 - 配置 ...
Postfix最先配置,cyrus-sasl 2.1.23+postfix 2.6.2+postfixadmin 2.3.2+Courier-imap 4.5.0+Courier-maildrop 2.5.2
二、安装postfix ,dovecot,cyrus-sasl [root@ser ~]# yum -y install postfix [root@ser ~]# yum -y install dovecot [root@ser ~]# yum -y install cyrus-sasl 四、 修改postfix的配置文件 [root@ser ~]# vim /etc/...
Postfix+ExtMail邮件系统搭建文档 Postfix+ExtMail邮件系统是一种功能齐全的免费电子邮件系统解决方案,核心组件包括Postfix、Amavisd-new、ClamAV、ExtMail、ExtMan、Courier系列软件。该系统可以提供完整的邮件...
postfix-2.6.5-vda-ng-bigquota.patch.gz