Jan20

SendMail与Mysql的结合实现多域名系统

Author: leeon转载  Click: 14975   Date: 2010.01.20 @ 12:33:32 pm Category: linux
SendMail与Mysql的结合实现多域名系统
--------------------------------------------------------------------------------
linux+sendmail+mysql+web解决方案(1).

Q:如何实现在一台主机上共同设置多个域名且账号相同时互不干扰?比如:linux@abc.com和linux@jjyy.net可以分别收信不会互相影响?我现在是用sendmail+系统账号,因此如果是mail给linux这个账号的,不论是abc.com或jjyy.net都在一个信箱里,分不开来.....

A: 当然可以了。例如,你要建立一个Webmail服务器

1. 按运行环境要求建立基本环境: Linux , Apache, MySQL, BIND

2. Sendmail 需加入 Sendmail+MySQL 补丁. 安装包中的补丁只适用于 Sendmail 8.10.1,现在暂时不支持其它版本的 Sendmail. 具体打补丁过程如下. Sendmail 8.10.1 的安装包为 sendmail.8.10.1.tar.gz 。 假设解包在/usr/local/src目录下,具体方法如下(要求以root身份执行):

cp -f sendmail.8.10.1.tar.gz /usr/local/src/
cp -f sendmail-8.10.1.wm.patch /usr/local/src/
cd /usr/local/src
tar xvfz sendmail.8.10.1.tar.gz
patch -p0 < sendmail-8.10.1.wm.patch
cd sendmail-8.10.1
./Build

此时开始编译,以后的安装过程与标准安装过程相同,此处不再提及.另外,需用 Sendmail 包里的 mail.local 覆盖系统自带的 mail.local,命令如下:

cp /usr/local/src/sendmail-8.10.1/obj.Linux.2.2.x.ix86/
mail.local/mail.local   /usr/bin/
注:以上一行
(一般 mail.local 放在 /usr/bin 目录下)

3. 安装完 Sendmail 后,除了传统的 Sendmail 设置外,还需对 sendmail.cf 文件进行修改以支持 Sendmail+MySQL 和多域名支持.修改如下:

a)将本地 mailer 改为 mail.local (缺省为 procmail)
打开 sendmail.cf,找到 Mlocal,如下
Mlocal,   P=/usr/bin/procmail, ...
...
A=procmail -Y -a $h -d $u
改为
Mlocal,   P=/usr/bin/mail.local, ...
...
A=mail.local -d $u
b)找到 Fw/etc/sendmail.cw,在其下以行加入

Qw -Hlocalhost -Dwebmail -Tdoamins

这样可以动态加入新的域名,而不用每次都修改 sendmail.cw
c)加入宏定义 domainalias

Kdomainalias mysql -Dwebmail -Mdomainalias -Laddress -Ralias

d)修改规则S98,找到S98,将旧的规则注释掉(在行首加#即可).然后加入新的规则.
如下:
S98
R$+ < $+ . >        $1 < $2 >
R$+ < $+ >          $: < > $(domainalias $1$2 $)
R< > $+ @ $*        $: < $1 > $(domainalias * @ $2 $)
R< $+ > * $*        $: < > $1 $2
R < $+ > $+         $: < > $2
R< > $*             $: $>3 $1
e)具体范例可参看本安装包中的sendmail.cf

4. 修改 Sendmail+MySQL 配置文件 wm/mail.conf 并拷到 /etc/mail/ 目录下
mail.conf项目说明:
MysqlHost        localhost       /*   MySQL 主机地址   */
MysqlUsername    root            /*   登录 MySQL 的用户名   */
MysqlPassword                   /*   登录口令(此处表示无口令)   */
其它项目不要修改

5. 建立数据库和表结构, 表结构说明在 wm/db.sql 文件里, 使用如下命令可进行自动建库, 建表:

mysql -u your_db_login_name -p < b.sql

6. 将你的域名加入表domains中,例如我的测试环境中域名为gtth.org和gtth.net,则:

insert into domains values ('gtth.org');
insert into domains values('gtth.net');

如果你的主机不是多域名,只加入一个域名,也就是你的默认域名就可以了.如果是多域名主机,当然还要修改DNS配置,这里就不详细描述,可参看有关书籍或资料,也可参考本安装包中提供的DNS配置范例(wm/DNS/db.*).另外,因条件所限,我只测试了单机条件下的多域名支持.

7. 修改 wm/cgi/db.h, wm/bkrun/db.h 和 wm/new_pop3d/db.h, 使有关数据库的常量设置正确,一般要修改的db.h中常量设置如下:

#define DEF_HOST_NAME "localhost"     /*   MySQL的地址
#define DEF_USER_NAME "root"          /*   登录名   */
#define DEF_PASSWORD ""         /*   登录口令(此处表示无口令)   */
#define DEF_DB_NAME "webmail"     /*   登录的数据库   */

8. 修改 wm/cgi/mail_sub.h 和 wm/bkrun/mail_sub.h, 使有关SMTP和POP3的常量设置正确一般要修改的mail_sub.h中常量设置如下:

#define POP3_HOST "localhost"      /*   POP3服务的地址   */

9. 修改 wm/cgi/Makefile 里的 CGI-BIN_PATH, 使其指向正确的 cgi-bin 路径修改 wm/cgi/Makefile 里的 HTDOCS_PATH, 使其指向正确的 htdocs 路径

10. 以root身份运行

wm/make

11. 以root身份运行

wm/make install

12. 确定 /etc/inet.conf 中 pop3 服务已打开, 且pop3d为 /usr/sbin/in.pop3d

13. 如果一切顺利, 那就可以从 http://yoursite/ 注册和登录了

编者案:如此说来,sendmail可以实现非系统用户的多域名认证,但是这个毕竟是一种非正式的替代效果,如果想要实现大容量系统和分布式处理,qmail和postfix是一种比较好的选择。当然,也有一些商用的系统使用这种方法来支持多域名,比如说www.3rsoft.com的产品@messsage就是一个很不错的webmail产品,据说可以支持到100万用户级别,可谓鼓舞人心。不管怎么说,sendmail都是目前使用最广泛的电子邮件系统之一,还是有很多可以挖掘潜力的地方。

linux+sendmail+mysql+web解决方案(2).
AnceMail webmail is a Webmail interface for mail servers based on Linux+Sendmail+MySql+Php.
This a GPL project, maintained by ance and ymca. The mails are read directely from MailBox
on the server harddisk, which is much quicker than using protocols such as POP3 or
IMAP. Other features includes folders and addressbook support (comming soon).

AnceMail webmail version 1.0.1 is programmed in PHP4. Developers and translators are welcome
to mail to jash@iance.com

AnceMail webmail 1.0.1 for chinese

Download: http://mail.iance.net/webmail/AnceMail-v1.0.1.tar.gz

Online DEMO: http://mail.iance.net

install Requirement:

UNIX entironment (FreeBSD/linux/etc.)
Apache 1.3.x or higher
PHP4.0 or higher with build in MySql / IMAP modules
MySQL 3.xx or higher
sendmail 8.X.X or higher


一、安装前的准备工作

系统安装前需要以下软件的安装:
1-----apache web server(PHP支持)
2-----mysql (建议3.23版本以后)
3-----sendmail 8.X.X or higher
4-----MIME-Base64-2.12.tar.gz (可选)

如果已经确认安装了以上软件,请配置你的SENDMAIL
检查您的POP3端口和IMAP端口是否已经打开。

# netstart -ln |grep 25 //POP3 端口

# netstart -ln |grep 110 //stmp 端口

# netstart -ln |grep 143 //IMAP 端口


二、安装AnceMail
请到这里下载AnceMail 软件
Download: http://mail.iance.net/webmail/AnceMail-v2.0.1.tar.gz

1、解压缩并上传到你服务器上的任何目录下
2、修改conf.inc文件

$sql_host = "localhost"; //您的数据库地址
$sql_user = "root"; //您的数据库用户名
$sql_pw = "password"; //您的数据库密码

3、# chmod 777 INBOX //您的收件箱
# chmod 777 tmp //您的邮件附件箱

4、建立一个iance的空数据库

5、运行install.php跟随步骤进行安装,安装完毕后删除该文件

6、运行http://yourname.com/mail 或者http://mail.yourname.com登陆即可收发信件

linux+sendmail+mysql+web解决方案(3).
所需软件包:twig。
  其他关联包(depends):php4(或者php3),php4-imap(或者php3-imap),php4-mysql(或者php4-pgsql,php3-mysql,php3-pgsql),debconf。
  其他所需包(suggested):一个web服务器(我们用Apache),一个数据库服务器(我们用MySQL),一个impa服务器(我们用uw-imapd),一个邮件代理(我们用sendmail)。

  要是使用其他发行版,下载和安装这些软件包可真是个麻烦事儿。不过,用debian,轻松的很!呵呵。
好,下载并安装所需的支持软件(twig我们在后边再下载):

  # apt-get install apache php4 php4-gd php4-imap php4-mysql mysql-server mysql-client debconf uw-imapd sendmail

  其中,php4-gd是不需要的。这是一个动态图像库,用来画图的。这里我自己装上了,是因为我自己需要罢了,呵呵。注意,

  它问你是否在启动计算机的时候就启动MySQL?当然是了!要不然每次手工启动,烦死了。
  然后她会根据你选择的这些软件包,自动配置一些参数(debian真是棒极了)。
  然后,问你:你想让我运行apacheconfig脚本吗?默认是No。输入Y,回车,让它替我们配置一下。配置完,它会问你:保存到配置文件吗?默认是Yes,回车就行。然后问你:重新启动Apache吗?默认是Yes,回车。
  由于我选择了gd库的支持,它还会问是否把extension=gd.so写入php.ini文件(debian真是聪明啊),默认是Yes,回车。
  然后她会问你,是否把extension=imap.so写入php.ini文件?默认是Yes,回车就行了。
  然后她又问你,是否把extension=mysql.so写入php.ini文件?默认是Yes,回车就行了。你说debian聪明不聪明。

  接下来,他问你是否要配置sendmail,输入Y,回车。然后根据你的情况进行设置——不过我全部使用的默认设置。配置完后她问你是否要启动sendmail,是。
让Apache能够显示简体中文

  # nano /etc/apache/httpd.conf (我非常喜欢这个叫做nano的编辑器,胜过喜欢vi)

  然后在nano里面,找到AddDefaultCharset on这一行,把on该成gb2312。查找的办法很简单,按ctrl+w,输入AddDefault并回车,就找到了。保持nano的运行,先不要退出。

让Apache可以支持php4

  找到libphp4.so所在的行(按ctrl+w,输入libphp4.so并回车),然后把这一行的第一个字符“#”去掉。保持nano的运行,先不要退出。
让Apache可以支持php3

  找到httpd-php3所在的行(按ctrl+w,输入httpd-php3并回车),把这一行的第一个字符“#”去掉,然后把这一行的httpd-php3里面的这个3去掉(这一步很重要,因为我们没有安装php3,而是用php4来解释php3脚本)。
  好,这个httpd.conf改完了。按ctrl+o并回车,存盘。然后按ctrl+x,退出。

重新启动Apache

  # apachectl restart
测试Apache

  写一个php3脚本,在浏览器里面测试一下:

  # nano /var/www/test.php3

  然后输入如下内容:<?phpinfo();?> ,然后按ctrl+o并回车,存盘。然后按ctrl+x退出。到浏览器里面访问一下这个test.php3,看能否出现php的基本信息。应该没问题了。有问题的话请你到其他地方查阅一下资料。

配置php4

  如果不修改php.ini,那么我们的php脚本将无法显示中文。这个问题我昨天才弄明白,在这之前他困扰了我很久,我改了httpd.conf,左改右改,怎么都不行。昨天才发现在php.ini里面有一行,定义了默认字符集,它把Apache的httpd.conf定义的默认字符集给覆盖了!
  编辑/etc/php4/apache/php.ini,找到default_charset="iso-8859-1",把它前面的注释符号";"去掉,并把它改成:default_charset="gb2312":

  # nano /etc/php4/apache/php.ini

  然后按ctrl+w,输入default_charset并回车,就找到了。改完后,按ctrl+o并回车,存盘。然后按ctrl+x退出。

配置MySQL

  主要是修改root口令。默认情况下,root在访问MySQL时是不需要口令的。这非常危险!为了安全起见,我们需要把口令修改掉。你可以先看看MySQL当前是不是真的没有口令:

  # mysqladmin version

  这条命令将显示MySQL的一些版本信息。如果这些信息显示了,则说明口令是空的。好,使用下面的命令修改口令:

  # mysqladmin password xxxxxxx

  其中xxxxxxx当然就是你的新口令了。现在你再运行mysqladmin version,它会报告错误,说连接服务器失败,访问被拒绝。这以后,你需要用下面的命令格式来访问MySQL了:

  # mysqladmin -u root -p version

  这样,它会问你要口令的。
安装twig

  # apt-get install twig

  它会弹出一个窗口,好像是说,你需要进行一些配置,不过这个deb包已经用MySQL数据库为你配置好了,而且twig所需的MySQL数据库已经建立了。但是我发现事实并非如此——并没有什么数据库建立。你可以通过下面的办法查看系统数据库:

  # mysql -u root -p
  mysql> show databases;

  我发现只有MySQL自己的两个数据库,一个是mysql,一个是test。为此,我需要自己动手。

配置twig

# cd /usr/share/doc/twig
  # gzip -d INSTALL.gz
  # more INSTALL (先看一看这个说明,或许会有用)
  # gzip -d Setup-Apache-PHP-IMAP-TWIG-MySQL.txt.gz
  # more Setup-Apache-PHP-IMAP-TWIG-MySQL.txt (再看看这个,肯定有用)

修改一下/etc/twig/config.inc.php3

  我主要改了下面几项:

  $config["fromdomain"] = "xiyuan.net"; (修改成你这台 twig 的域名)
  $config["language"] = "chinesegb"; (将默认语言改成简体中文,chinesebig5为繁体中文)
  $config["session_handler"] = "php4session"; (php4以上可将cookie改为session)
  $config["login_handler"] = "php4session";
  $config["imap_port"] = "143/notls"; (加上/notls,以免php不支持tls,无法连接imap)


修改/etc/twig/dbconfig.inc.php3

  $dbconfig["sqlusername"]="root"; (修改 mysql 的使用者帐号)
  $dbconfig["sqlpassword"]="你的密码"; (修改 mysql 的使用者密码)

为twig建立数据库

  # mysql -u root -p mysql
  mysql> create database twig; (建立名字为twig的数据库)
  mysql> grant all privileges on *.* to root@localhost identified by 'xxxx'; (向MySQL增加新用户权限,xxxx是用户的口令)
  mysql> quit

  # cd /usr/share/twig/setup
  # gzip -d twig.table.mysql.gz
  # mysql -u root -p twig
  mysql> source /usr/share/twig/setup/twig.table.mysql; (执行SQL脚本,创建表)
  mysql> quit

  还是在这个目录下面:

  # gzip -d advangced.acl.population.gz
  # nano advangced.acl.population (这个SQL脚本包含了控制列表)

  然后修改第二行,INSERT INTO twig_acl_groups VALUES('456744','TWIGAdministrators','改成你的管理员名字'); 我用的是kanaka,这是我在我的debian上面的普通账号,我可以用这个帐号专门管理这个webmail系统。然后保存退出。
  然后把这个advangced.acl.population也导入到数据库里面:

  # mysql -u root -p twig < advanced.acl.population (执行SQL脚本,向表中插入控制列表数据)
测试twig

  现在应该可以登录了。在登录之前,先测试一下。在浏览器里面打开:
    http://localhost/twig/test.php3
  这里面有IMAP的两项测试和MySQL的一项测试。其中IMAP的第二项测试,你输入一个debian上面的普通用户试一下。我一开始老是遇到下面的错误报告:
  Couldn't open stream {localhost:143}INBOX in /var/www/html/twig/lib/mail/php-imap.inc.php3 76
  其实问题没出在php-imap.inc.php3上,问题出在/etc/twig/config.inc.php3上,上面我们在5.2.2里面已经作了调整,应该不会出现这个问题了。
登录twig

  在浏览器里面打开:
    http://localhost/twig/index.php3
  然后用一个debian的普通用户登录试试。呵呵,棒极了,简体中文的画面。


TAG:   sendmail mysql

    评论
    • 提交

    分类

    标签

    归档

    最新评论

    Abyss在00:04:28评论了
    Linux中ramdisk,tmpfs,ramfs的介绍与性能测试
    shallwe99在10:21:17评论了
    【原创】如何在微信小程序开发中正确的使用vant ui组件
    默一在09:04:53评论了
    Berkeley DB 由浅入深【转自架构师杨建】
    Memory在14:09:22评论了
    【原创】最佳PHP框架选择(phalcon,yaf,laravel,thinkphp,yii)
    leo在17:57:04评论了
    shell中使用while循环ssh的注意事项

    我看过的书

    链接

    其他

    访问本站种子 本站平均热度:8823 c° 本站链接数:1 个 本站标签数:464 个 本站被评论次数:94 次