金融AIGC研究
优质  高效     
优质的技术交付服务 迅捷的办事效率
我们专注品质与服务   决胜制高点  细节决定成败
Runoff commanding heights Detail decides success or failure
The commanding heights of
the details determine success or failure
技术动态
DETAIL
[技术升级]linux邮件技术探索
来源:来源: 发布时间: 2010-08-05 15:02 224 次浏览 大小: 16px 14px 12px | 作者:business-100 | 发布时间: 2014-08-20 | 949 次浏览 | 分享到:

【ubuntu mail】ubuntu20.04+postfix+dovecot+postfixadmin+postgres搭建内网邮箱服务器

https://www.cnblogs.com/fireblackman/p/15902306.html

1. 安装postfixadmin

 https://www.cnblogs.com/fireblackman/p/15799597.html

2. 安装postgres

 https://www.cnblogs.com/fireblackman/p/15740550.html

3. 安装postfix

# mysql用postfix-mysql, postgres使用postfix-pgsql

#sudo apt-get install postfix postfix-mysql
#因为我们用的是postgres, 所以我们使用如下sudo apt-get install postfix postfix-pgsql



4. 安装dovecot

#sudo apt-get install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql
#同postfix, 我们使用的是postgres, 所以使用如下sudo apt-get install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-pgsql

5. 配置postfix

a. 建立三个数据库配置文件

sudo vim /etc/postfix/postgres_virtual_mailbox_maps.cfsudo vim /etc/postfix/postgres_virtual_domains_maps.cfsudo vim /etc/postfix/postgres_virtual_alias_maps.cf

##/etc/postfix/postgres_virtual_alias_maps.cf

 user = postfixadmin

 password = postfixadmin

 hosts = 127.0.0.1

 dbname = postfixadmin

 table = alias

 select_field = goto

 where_field = address

 

 ##/etc/postfix/postgres_virtual_domains_maps.cf

 user = postfixadmin

 password = postfixadmin

 hosts = 127.0.0.1

 dbname = postfixadmin

 table = domain

 select_field = domain

 where_field = domain

 

 ##/etc/postfix/postgres_virtual_mailbox_maps.cf

 user = postfixadmin

 password = postfixadmin

 hosts = 127.0.0.1

 dbname = postfixadmin

 table = mailbox

 select_field = maildir

 where_field = username

b.配置/etc/postfix/main.cf文件

sudo vim /etc/postfix/main.cf

#smtpd_tls_cert_file = /etc/ssl/certs/cacert.pem

#smtpd_tls_key_file = /etc/ssl/private/server.key


#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem

#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

#smtpd_use_tls=yes

smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache


# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for

# information on enabling SSL in the smtp client.


smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

#myhostname = test.com

myhostname = mail.test.com

alias_maps = hash:/etc/aliases

alias_database = hash:/etc/aliases

myorigin = /etc/mailname

#mydestination = $myhostname, mail.test.com, test.com, localhost.localdomain, localhost

mydestination =

relayhost =

#mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

mynetworks = all

mailbox_size_limit = 0

recipient_delimiter = +

inet_interfaces = all

inet_protocols = all



# Virtual Mailbox Domain Settings

virtual_alias_maps = pgsql:/etc/postfix/postgres_virtual_alias_maps.cf

virtual_mailbox_domains = pgsql:/etc/postfix/postgres_virtual_domains_maps.cf

virtual_mailbox_maps = pgsql:/etc/postfix/postgres_virtual_mailbox_maps.cf

virtual_mailbox_limit = 51200000

virtual_minimum_uid = 5000

virtual_uid_maps = static:5000

virtual_gid_maps = static:5000

virtual_mailbox_base = /home/vmail

virtual_transport = virtual


#SASL AS Dovecot to authenticate.

smtpd_sasl_type = dovecot

smtpd_sasl_path = private/auth

smtpd_sasl_auth_enable = yes

broken_sasl_auth_clients = yes

smtpd_sasl_security_options = noanonymous

smtpd_sasl_local_domain =

smtpd_sasl_authenticated_header = yes

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination

c.更改/etc/postfix/master.cf配置

sudo vim /etc/postfix/master.cf

# Interfaces to non-Postfix software. Be sure to examine the manual

# pages of the non-Postfix software to find out what options it wants.

#

# Many of the following services use the Postfix pipe(8) delivery

# agent.  See the pipe(8) man page for information about ${recipient}

# and other message envelope options.

# ====================================================================

#

# maildrop. See the Postfix MAILDROP_README file for details.

# Also specify in main.cf: maildrop_destination_recipient_limit=1

#

maildrop  unix  -       n       n       -       -       pipe

  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}

#

# ====================================================================

#

# Recent Cyrus versions can use the existing "lmtp" master.cf entry.

#

# Specify in cyrus.conf:

#   lmtp    cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4

#

# Specify in main.cf one or more of the following:

#  mailbox_transport = lmtp:inet:localhost

#  virtual_transport = lmtp:inet:localhost

#

# ====================================================================

#

# Cyrus 2.1.5 (Amos Gouaux)

# Also specify in main.cf: cyrus_destination_recipient_limit=1

#

#cyrus     unix  -       n       n       -       -       pipe

#  user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}

#

# ====================================================================

# Old example of delivery via Cyrus.

#

#old-cyrus unix  -       n       n       -       -       pipe

#  flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}

#

# ====================================================================

#

# See the Postfix UUCP_README file for configuration details.

#

uucp      unix  -       n       n       -       -       pipe

  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)

#

# Other external delivery methods.

#

ifmail    unix  -       n       n       -       -       pipe

  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)

bsmtp     unix  -       n       n       -       -       pipe

  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient

scalemail-backend unix  -       n       n       -       2       pipe

  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}

mailman   unix  -       n       n       -       -       pipe

  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py

  ${nexthop} ${user}




6.设置文件权限以及Vmail用户

 cd /etc/postfix chown root:postfix postgres_virtual_* chmod 640 postgres_virtual_*
 groupadd -g 5000 vmail
 useradd -m -g vmail -u 5000 -d /home/vmail vmail
 service postfix restart

 7. 配置 dovcot

a. 修改相关配置文件

/etc/dovecot/dovecot.conf 
/etc/dovecot/conf.d/10-master.conf 
/etc/dovecot/conf.d/10-ssl.conf 
/etc/dovecot/conf.d/10-auth.conf/etc/dovecot/conf.d/10-mail.conf 
/etc/dovecot/dovecot-sql.conf.ext
sudo vim /etc/dovecot/dovecot.conf!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp



复制代码
sudo vim /etc/dovecot/conf.d/10-master.conf                     //未列出的服务配置保持不动service auth {
  # auth_socket_path points to this userdb socket by default. It's typically
  # used by dovecot-lda, doveadm, possibly imap process, etc. Users that have
  # full permissions to this socket are able to get a list of all usernames and
  # get the results of everyone's userdb lookups.  #
  # The default 0666 mode allows anyone to connect to the socket, but the
  # userdb lookups will succeed only if the userdb returns an "uid" field that
  # matches the caller process's UID. Also if caller's uid or gid matches the
  # socket's uid or gid the lookup succeeds. Anything else causes a failure.  #
  # To give the caller full permissions to lookup all users, set the mode to
  # something else than 0666 and Dovecot lets the kernel enforce the
  # permissions (e.g. 0777 allows everyone full permissions).
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
    #group = 
  }

  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }

  # Auth process is run as this user.
  #user = $default_internal_user
  user = dovecot
}
复制代码
sudo vim /etc/dovecot/conf.d/10-ssl.conf
ssl = required



sudo vim /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login                        //修改此处#!include auth-system.conf.ext                       //注释掉此处!include auth-sql.conf.ext                           //取消此行的注释#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext
复制代码
sudo vim /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/vmail/%u                //修改此处, 这里关系到邮件的读取,不然会收不到邮件mail_privileged_group = vmail                         //添加此处
复制代码
sudo vim /etc/dovecot/dovecot-sql.conf.ext
driver = pgsql
connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=postfixadmin # 这里配置你实际的数据库连接
default_pass_scheme = SHA512-CRYPT

iterate_query = SELECT username AS user FROM mailbox;

user_query = SELECT CONCAT('/home/vmail/',maildir) AS home, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u' AND active = '1';  # 这里要和mail_location配置对应上,不然读不到邮件
#user_query = SELECT CONCAT('/home/vmail/', username) AS home, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u' AND active = '1';

password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1';
复制代码

b.更改配置文件权限并重启dovecot

chown -R vmail:dovecot /etc/dovecotchmod -R o-rwx /etc/dovecotsudo service dovecot restart

8. 使用postfixadmin管理邮箱账号

http://{你的ip}/postfixadmin/login.php