配置postfix<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

配置postfix分为2个部分,配置postfix使用mysql库读取数据,配置postfix使用dovecot分发邮件。

  配置数据库前,现讲解下postfix对信箱的映射规则。一个虚拟用户可以有几个别名,但是邮件会送到哪个邮箱呢?

  规则:别名优先于用户名转发

  刚才的mysql配置过程我们给zhang3设置了2个别名分别是zhang3li4并配置了''转发给wang5;由于上面规则zhang3有别名 它不会查找用户名,而直接转发给zhang3li4;''代表空也就是post.star.com这个域的所有邮件,所以li4的邮件就会被转发给wang5而不是给它本身的邮箱.空域名一种垃圾处理机制,下面会解释。

接下来创建4个文件 domains.cf  mailbox-maps.cf alias-maps.cf email2email.cf

#sudo mkdir /etc/postfix/mysql

#sudo vi /etc/postfix/mysql/domains.cf

user = mailadmin

password = libertine

hosts = 127.0.0.1

dbname = mail

query = select 1 from virtual_domains where name ='%s'

#postmap -q post.star.com mysql:/etc/postfix/mysql/domains.cf         检测

1

#postconf -e virtual_mailbox_domains= mysql:/etc/postfix/mysql/domains  输入到main.cf

#sudo vi /etc/postfix/mysql/mailbox-maps.cf

user = mailadmin

password = libertine

hosts = 127.0.0.1

dbname = mail

query = select 1 from view_users where email='%s'

#postmap -q zhang3@post.star.com mysql:/etc/postfix/mysql/mailbox-maps.cf         检测

1

#postconf -e virtual_mailbox_maps= mysql:/etc/postfix/mysql/mailbox-maps.cf  输入到main.cf

#sudo vi /etc/postfix/mysql/alias-maps.cf

user = mailadmin

password = libertine

hosts = 127.0.0.1

dbname = mail

query = select destination from view_aliases where email='%s'

#postmap -q zhang3@post.star.com mysql:/etc/postfix/mysql/alias-maps.cf  检测

zhang3@post.star.com li4@post.star.com        

#sudo vi /etc/postfix/mysql/email2email.cf

user = mailadmin

password = libertine

hosts = 127.0.0.1

dbname = mail

query = select email from view_aliases where email='%s'

#postmap -q wang5@post.star.com mysql:/etc/postfix/mysql/domains         检测

wang5@post.star.com

#postconf -e virtual_alias_maps= mysql:/etc/postfix/mysql

/alias-maps.cf,mysql:/etc/postfix/mysql/email2email.cf  输入到main.cf

 上面virtual_mailbox_domains 是域名查找语句

virtual_mailbox_maps 是邮件查找语句

virtual_alias_maps是别名查找语句

通过以上配置 应该看出来 在别名查找时加入了一个email2email.cf的文件,这个文件的作用就是在没有别名确有该用户的时候,把用户转发给用户本身,而不是垃圾箱。接下来没有用户和别名的邮件就垃圾回收站了。

postfix权限去控制mysql

#sudo chgrp postfix  -R /etc/postfix/mysql

#sudo chmod 640 -R /etc/postfix/mysql

使用postmap命令 已经知道postfix已经知道邮件了,现在给他们按个家

#sudo groupadd -g 5000 vmail

#sudo useradd -g 5000 -u vmail -d /var/mail/virtual -m

#sudo postconf -e virtual_uid_maps=static:5000

#sudo postconf -e virtual_gid_maps=static:5000

有家了,该接客了 配置dovecot

sudo vi /etc/postfix/master.cf                      main.cf是主配置文件  master.cfpostfix的程序文件

照着文件后边相应的格式 输入

dovecot   unix  -       n       n       -       -       pipe

 

  flags=DRhu user=vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

 

Ok

#sudo postconf -e virtual_transport=dovecot

#sudo postconf -e virtual_destination_recipient_limit=1

这样POSTFIX就配置好了

配置dovecot配置

配置/etc/dovecot/dovecot.conf文件

这个文件有1000多行,要处要改跟着我的脚步慢慢改吧.

确定协议

protocols = imap imaps pop3 pop3s

设置存储位置

mail_location = maildir:/var/mail/virtual/%d/%n/Maildir

设置用SSL/TLS加密POP3/IMAP

ssl_cert_file = /etc/ss1/certs/ssl-cert-snakeoil.pem

ssl_key_file = /etc/ss1/private/s1-cert-snakeoil.key

ssl_disable = no

disable_plaintext_auth = no

以下修改认证方式

认证机制

mechanisms = plain login

配置sql认证

passdb sql {

  .....

    args = /etc/dovecot/dovecot-sql.conf

  .....

}                记住了  认证方式 只有一种  开了就把PAM认证关了

配置用户数据

userdb static{

  .....

       arg = uid=5000 gid=5000 home=/var/mail/virtual/%d/%n allow_all_users=yes

  .....

}

接口监听配置

socket listen {

   master{

       path = /var/run/dovecot/auth-master

      mode = 0600

      user = vmail

     }

   client {

       path = /var/spool/postfix/private/auth

       mode = 0660

       user = postfix

       group = postfix

     }

}

PROTOCOL IDA配置

protocol lad {

      .........

           log_path = /var/mail/virtual/dovecot-deliver.log

           auth_socket_path = /var/run/dovecot/auth-master

           postmaster_address = zhang3@post.star.com

      .........

}

wq

这个文件里有很多大括号,注意 该关的都关了 不该的别关,很多括号里面也有注释 别把括号内的#都去掉了,负责服务重启不起来。

接下来配置dovecot接受mysql

#sudo vi /etc/postfix/dovect-sql.conf

在有driver标识的地方更改为

driver = mysql

connect = host=127.0.0.1 dbname=mail user=mailadmin password=libertine

password_query = select email as user ,password from view_users where email='%u';

/wq

设置smtp认证

#sudo postconf -e smtpd_sasl_type=dovecot

#sudo postconf -e smtpd_sasl_path=private/auth

#sudo postconf -e smtpd_sasl_auth_enable=yes

#sudo postconf -e smtpd_recipient_restrictions=permit_mynetworks,pe

rmit_sasl_authenticated,reject_unauth_destination

给权限拉

#sudo chgrp vmail /etc/dovecot/dovecot.conf

#sudo chmod g+r /etc/dovecot/dovecot.conf

最后

#sudo /etc/init.d/postfix restart

#sudo /etc/init.d/dovecot restart

接下来配置OS

按照虚拟机一样的思路配置就OK了。

VE OK 试试能发邮件不

telnet 127.0.0.1 smtp

   Trying 127.0.0.1...

 

   Connected to 127.0.0.1.

 

   Escape character is '^]'.

 

   220 star.com ESMTP Postfix (Ubuntu)

 

ehlo post.star.com

   250-star.com

 

   250-PIPELINING

 

   250-SIZE 10240000

 

   250-VRFY

 

   250-ETRN

 

   250-STARTTLS

 

   250-ENHANCEDSTATUSCODES

 

   250-8BITMIME

 

   250 DSN

mail from:<zhang3@post.star.co>

 

   250 2.1.0 Ok

 

rcpt to:<li@4star.com>         star.comOS的邮件的域

   250 2.1.5 Ok

data

 

   354 End data with <CR><LF>.<CR><LF>

 

subject:hi

 

hi my friend.are you ok?

 

.

 

   250 2.0.0 Ok: queued as AD1834C64C4

 

成功的从post.star.com域给star.com域发一个邮件看下日志

Sep  8 12:16:38 star postfix/cleanup[1193]: AD1834C64C4: message-id=<20090908121555.AD1834C64C4@post.star.com>

 

Sep  8 12:16:38 star postfix/qmgr[986]: AD1834C64C4: from=<zhang3@post.star.com>, size=380, nrcpt=1 (queue active)

 

Sep  8 12:16:38 star postfix/smtp[1194]: AD1834C64C4: to=<li4@star.com>, relay=mail.star.com[158.196.0.230]:25, delay=52, delays=52/0.01/0.01/0.03, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 417F22A607E)

 

呵呵   邮件成功配置好了

一个可实现smtp pop3 imap帐户认证可收发的邮件服务器OK  

配置squirrelmail

接下来配置squirrelmail实现web发送邮件

#sudo squirrelmail-configure