本站最近更新 - 使用說明 - 測試沙箱 - 搜尋 Wiki:

主選單

FreeBSD

PcBSD 0.83

Windows

程式語言

(edit)



編輯本頁 列印預覽 群組最近更新 本頁更新歷程

郵件虛擬戶: 利用 Postfix + MySQL + Courier-IMAP 完成 (外加 postfixadmin)

Step 1. 安裝 MySQL
 # cd /usr/ports/databases/mysql40-server
 # make install clean

Step 2. 安裝 Apache (不裝 postfixadmin 可省略)
 # cd /usr/ports/www/apache13
 # make install clean

Step 3. 安裝 PHP (不裝 postfixadmin 可省略)
 # cd /usr/ports/lang/php4
 # make install clean

Step 4. 安裝 postfixadmin (不裝 postfixadmin 可省略)
 # cd /usr/porst/mail/postfixadmin
 # make install clean

Step 5. 安裝 Postfix
 # cd /usr/ports/mail/postfix21
 # make install clean

Step 6. 安裝 Courier-IMAP
 # cd /usr/ports/mail/courier-imap/
 # make install clean

Step 7. 建立帳號資料庫

 (記得先啟動 mysql , /usr/local/share/mysql/mysql.server start)
 USE mysql;
 INSERT INTO user (Host, User, Password) 
   VALUES ('localhost','postfix',password('postfix'));
 INSERT INTO db (Host, Db, User, Select_priv) 
   VALUES ('localhost','postfix','postfix','Y');
 INSERT INTO user (Host, User, Password) 
   VALUES ('localhost','postfixadmin',password('postfixadmin'));        
 #(不裝 postfixadmin 上面這行可省略)
 INSERT INTO db (Host, Db, User, Select_priv, 
   Insert_priv, Update_priv, Delete_priv)
   VALUES ('localhost', 'postfix', 'postfixadmin', 'Y', 'Y', 'Y', 'Y'); 
 #(不裝 postfixadmin 上面這行可省略) 
 FLUSH PRIVILEGES;
 GRANT USAGE ON postfix.* TO postfix@localhost;
 GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO postfix@localhost;
 ###不裝 postfixadmin 可省略  start ###
 GRANT USAGE ON postfix.* TO postfixadmin@localhost; 
 GRANT SELECT, INSERT, DELETE, UPDATE ON 
     postfix.* TO postfixadmin@localhost;
 ### end ### 
 CREATE DATABASE postfix;
 USE postfix;

 ###不裝 postfixadmin 可省略  start ### 
 CREATE TABLE admin (
  username varchar(255) NOT NULL default '',
  password varchar(255) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  modified datetime NOT NULL default '0000-00-00 00:00:00',
  active tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (username),
  KEY username (username)
 ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Admins';

 CREATE TABLE domain_admins (
  username varchar(255) NOT NULL default '',
  domain varchar(255) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  active tinyint(1) NOT NULL default '1',
  KEY username (username)
 ) TYPE=MyISAM COMMENT='Postfix Admin - Domain Admins';

 CREATE TABLE log (
  timestamp datetime NOT NULL default '0000-00-00 00:00:00',
  username varchar(255) NOT NULL default '',
  domain varchar(255) NOT NULL default '',
  action varchar(255) NOT NULL default '',
  data varchar(255) NOT NULL default '',
  KEY timestamp (timestamp)
 ) TYPE=MyISAM COMMENT='Postfix Admin - Log';

 CREATE TABLE vacation (
  email varchar(255) NOT NULL default '',
  subject varchar(255) NOT NULL default '',
  body text NOT NULL,
  cache text NOT NULL,
  domain varchar(255) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  active tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (email),
  KEY email (email)
 ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Vacation';

  ### end ###

 CREATE TABLE alias (
  address varchar(255) NOT NULL default '',
  goto text NOT NULL,
  domain varchar(255) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  modified datetime NOT NULL default '0000-00-00 00:00:00',
  active tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (address),
  KEY address (address)
 ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Aliases';

 CREATE TABLE domain (
  domain varchar(255) NOT NULL default '',
  description varchar(255) NOT NULL default '',
  aliases int(10) NOT NULL default '0',
  mailboxes int(10) NOT NULL default '0',
  maxquota int(10) NOT NULL default '0',
  transport varchar(255) default NULL,
  backupmx tinyint(1) NOT NULL default '0',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  modified datetime NOT NULL default '0000-00-00 00:00:00',
  active tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (domain),
  KEY domain (domain)
 ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Domains';

 CREATE TABLE mailbox (
  username varchar(255) NOT NULL default '',
  password varchar(255) NOT NULL default '',
  name varchar(255) NOT NULL default '',
  maildir varchar(255) NOT NULL default '',
  quota int(10) NOT NULL default '0',
  domain varchar(255) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  modified datetime NOT NULL default '0000-00-00 00:00:00',
  active tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (username),
  KEY username (username)
 ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes';

我們可以把以上的文字存成文字檔 (ex. DATABASE_MYSQL.txt) 再執行以下命令:
 # mysql < DATABASE_MYSQL.txt

Step 8. 修改 postfix 的 main.cf
加上這幾行

 virtual_alias_maps = 
       mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf
 virtual_gid_maps = static:1001
 virtual_mailbox_base = /usr/local/virtual
 virtual_mailbox_domains = 
       mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf
 virtual_mailbox_limit = 51200000
 virtual_mailbox_maps = 
       mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
 virtual_minimum_uid = 1001
 virtual_transport = virtual
 virtual_uid_maps = static:1001
 virtual_create_maildirsize = yes
 virtual_mailbox_extended = yes
 virtual_mailbox_limit_maps = 
         mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
 virtual_mailbox_limit_override = yes
 virtual_maildir_limit_message = 
         Sorry, the user's maildir has overdrawn his diskspace quota.
 virtual_overquota_bounce = yes 

Step 9. 建立相關檔案

a. /usr/local/etc/postfix/mysql_virtual_alias_maps.cf
 user = postfix
 password = postfix
 hosts = localhost
 dbname = postfix
 table = alias
 select_field = goto
 where_field = address

b./usr/local/etc/postfix/mysql_virtual_domains_maps.cf
 user = postfix
 password = postfix
 hosts = localhost
 dbname = postfix
 table = domain
 select_field = description
 where_field = domain

c./usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
 user = postfix
 password = postfix
 hosts = localhost
 dbname = postfix
 table = mailbox
 select_field = maildir
 where_field = username

d./usr/local/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
 user = postfix
 password = postfix
 hosts = localhost
 dbname = postfix
 table = mailbox
 select_field = quota
 where_field = username

Step 10. 修改 CourierIMAP 相關設定

a. /usr/local/etc/authlib/authdaemonrc
將 authmodulelist 的設定只留 "authmysql"
   authmodulelist="authmysql"
b. /usr/local/etc/authlib/authmysqlrc
 比對底下的設定

 MYSQL_CRYPT_PWFIELD     password
 MYSQL_DATABASE          postfix
 MYSQL_GID_FIELD         '1001'
 MYSQL_HOME_FIELD        '/usr/local/virtual'
 MYSQL_LOGIN_FIELD       username
 MYSQL_MAILDIR_FIELD     maildir
 MYSQL_NAME_FIELD        name
 MYSQL_OPT               0
 MYSQL_PASSWORD          postfix
 MYSQL_SERVER            localhost
 MYSQL_UID_FIELD         '1001'
 MYSQL_USERNAME          postfix
 MYSQL_USER_TABLE        mailbox

 修改時請小心,不能有 『space』的出現,僅可使用 tab 鍵,
 這點網上有提到,是我心中的痛...

Step 11. 建立目錄
 # mkdir /usr/local/virtual
記得將此目錄的擁有者更改為 uid 1001 及 gid 1001
 # chown 1001:1001 /usr/local/virtual

Step 12. 啟動服務
 #/usr/local/sbin/postfix start
 #/usr/local/sbin/authdaemond start
 #/usr/local/libexec/courier-imap/imapd.rc start
 #/usr/local/libexec/courier-imap/pop3d.rc start

一切到此搞定,若有裝 postfixadmin 則可使用 web 的方式建立帳號,
若無則使用 mysql 自行建立

參考網站:http://postfixwiki.org/index.php?
title=Virtual_Users_and_Domains_with_Courier-IMAP_and_MySQL

建檔日期:2005 / 7 / 6
編輯本頁 - 列印預覽 - 群組最近更新 - 本頁更新歷程 - 搜尋 Wiki
頁面最後更新於 2006 年 03 月 23 日,12:38 AM