├── images ├── logs-dir.png └── current-dir.png ├── cert.sh ├── Dockerfile ├── docker-compose.yml ├── README.md └── start.sh /images/logs-dir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mrknow001/postfix-mailserver/HEAD/images/logs-dir.png -------------------------------------------------------------------------------- /images/current-dir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mrknow001/postfix-mailserver/HEAD/images/current-dir.png -------------------------------------------------------------------------------- /cert.sh: -------------------------------------------------------------------------------- 1 | sudo apt install certbot -y 2 | echo "*******tips*******" 3 | echo "1.请按提示添加域名的txt记录 " 4 | echo "2.申请成功后会生成fullchain.pem和privkey.pem文件 " 5 | certbot certonly --manual --preferred-challenges=dns --email test@web.de --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d \*.$1 -d $1 6 | cp /etc/letsencrypt/archive/$1/fullchain1.pem ./fullchain.pem 7 | cp /etc/letsencrypt/archive/$1/privkey1.pem ./privkey.pem 8 | 9 | sed -i "s/test.com/$1/g" start.sh 10 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:latest 2 | 3 | WORKDIR /app 4 | 5 | RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list \ 6 | && sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list \ 7 | && apt clean \ 8 | && apt-get update -y \ 9 | && apt install rsyslog -y \ 10 | && apt install postfix postfix-mysql dovecot-core dovecot-pop3d dovecot-imapd dovecot-lmtpd dovecot-mysql mysql-client -y \ 11 | && apt install tzdata -y 12 | 13 | COPY start.sh /app 14 | COPY fullchain.pem /app 15 | COPY privkey.pem /app 16 | 17 | CMD /bin/sh /app/start.sh 18 | 19 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | mysql: 4 | image: mysql:8.0.26 5 | container_name: database_for_mysql 6 | ports: 7 | - "33333:3306" 8 | volumes: 9 | - ./mysql/data:/var/lib/mysql 10 | - ./mysql/conf:/etc/mysql/conf.d 11 | environment: 12 | - MYSQL_ROOT_PASSWORD=Asd123456Asd 13 | mailserver: 14 | build: . 15 | container_name: mailserver_for_postfix 16 | ports: 17 | - "22587:587" 18 | - "22465:465" 19 | - "22993:993" 20 | - "22995:995" 21 | volumes: 22 | - ./mail/logs/postfix:/var/log/postfix 23 | - ./mail/logs/dovecot:/var/log/dovecot 24 | - ./mail/data:/var/spool/postfix 25 | depends_on: 26 | - mysql 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # postfix-mailserver 2 | 启动流程如下 3 | 4 | 1、修改域名 5 | 6 | start.sh文件201行修改title(可不改),202修改域名 7 | 8 | 9 | 2、生成证书 10 | 11 | 通过cert.sh生成证书(脚本自动复制到当前目录,不要移动) 12 | 13 | ```bash cert.sh 域名``` 14 | 15 | 16 | 3、修改端口 17 | 18 | 编辑docker-compose.yml,目前是使用的\[22465(smtp+ssl)、22587(smtp+tsl)\](默认ssl)、22993(imap)、22995(pop3)、33333(mysql) 19 | 20 | 21 | 4、启动docker 22 | 23 | `docker-compose up -d` 24 | 25 | 需要注意的是,根据客户端不同,需要改下配置使用TSL还是SSL 26 | 27 | 28 | 5、连接mysql创建用户 29 | ``` 30 | # 连接mysql 31 | mysql -h[dockerip] -uroot -pAsd123456Asd 32 | 或者mysql -h 127.0.0.1:3333 -uroot -pAsd123456Asd 33 | # 创建域名 34 | insert into virtual_domains values(1,'域名'); 35 | # 创建用户 36 | insert into virtual_users values(1,1,md5('密码'),'账号'); 37 | ``` 38 | ### 打开加密端口(smtp +SSL:465) 39 | 40 | ``` 41 | $ vim /etc/postfix/master.cf 42 | 加入如下几行: 43 | smtps inet n - n - - smtpd 44 | -o syslog_name=postfix/smtps 45 | -o smtpd_tls_wrappermode=yes 46 | -o smtpd_sasl_auth_enable=yes 47 | -o smtpd_reject_unlisted_recipient=no 48 | ``` 49 | 50 | ### 打开加密端口(smtp +TLS:587) 51 | 52 | ``` 53 | $ vim /etc/postfix/master.cf 54 | 加入如下几行: 55 | submission inet n - n - - smtpd 56 | ``` 57 | 58 | 如果开启TLS gophish可发邮件,foxmail无法发送 59 | 60 | 如果开启SSL foxmail可发邮件,gophish无法使用 61 | 62 | 配置完后重启postfix 63 | 64 | sudo service postfix restart 65 | 66 | 67 | 生成文件说明: 68 | ``` 69 | ./mail/logs/postfix/mail.log 70 | # postfix日志 71 | ./mail/logs/postfix/syslog 72 | # docker系统日志 73 | ./mail/logs/dovecot/dovecot.log 74 | # dovecot日志 75 | ./mail/data/* 76 | # postfix队列文件 77 | ./mysql/conf/* 78 | # mysql配置 79 | ./mysql/data/* 80 | # mysql数据 81 | ``` 82 | ![image](https://github.com/mrknow001/postfix-mailserver/blob/main/images/current-dir.png) 83 | ![image](https://github.com/mrknow001/postfix-mailserver/blob/main/images/logs-dir.png) 84 | -------------------------------------------------------------------------------- /start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 更新系统时间 4 | echo "Asia/Shanghai" > /etc/timezone 5 | rm -f /etc/localtime 6 | dpkg-reconfigure -f noninteractive tzdata 7 | 8 | # 开启postfix日志记录 9 | sed -i '/imklog/s/^/#/' /etc/rsyslog.conf 10 | sed -i 's/\/var\/log\/mail/\/var\/log\/postfix\/mail/' /etc/rsyslog.d/50-default.conf 11 | sed -i 's/\/var\/log\/syslog/\/var\/log\/postfix\/syslog/' /etc/rsyslog.d/50-default.conf 12 | kill -9 `cat /var/run/rsyslogd.pid` 13 | /usr/sbin/rsyslogd 14 | chmod 777 /var/log/postfix 15 | chmod 777 /var/log/dovecot 16 | 17 | # 配置/etc/postfix/main.cf文件 18 | sed -i 's/^myhostname.*/myhostname = test.com.cn/' /etc/postfix/main.cf 19 | sed -i 's/^#myorigin.*/myorigin = $myhostname/' /etc/postfix/main.cf 20 | sed -i 's/^mydestination.*/mydestination = localhost/' /etc/postfix/main.cf 21 | # 删除配置 22 | sed -i 's/^message_size_limit.*//' /etc/postfix/main.cf 23 | sed -i 's/^default_process_limit.*//' /etc/postfix/main.cf 24 | sed -i 's/^smtpd_tls_cert_file.*//' /etc/postfix/main.cf 25 | sed -i 's/^smtpd_tls_key_file.*//' /etc/postfix/main.cf 26 | sed -i 's/^smtpd_use_tls.*//' /etc/postfix/main.cf 27 | sed -i 's/^smtpd_tls_auth_only.*//' /etc/postfix/main.cf 28 | sed -i 's/^smtpd_sasl_type.*//' /etc/postfix/main.cf 29 | sed -i 's/^smtpd_sasl_path.*//' /etc/postfix/main.cf 30 | sed -i 's/^smtpd_sasl_auth_enable.*//' /etc/postfix/main.cf 31 | sed -i 's/^smtpd_recipient_restrictions.*//' /etc/postfix/main.cf 32 | sed -i 's/^virtual_transport.*//' /etc/postfix/main.cf 33 | sed -i 's/^virtual_mailbox_domains.*//' /etc/postfix/main.cf 34 | sed -i 's/^virtual_mailbox_maps.*//' /etc/postfix/main.cf 35 | sed -i 's/^virtual_alias_maps.*//' /etc/postfix/main.cf 36 | sed -i ':t;N;s/\n\n\n/\n\n/;b t' /etc/postfix/main.cf 37 | # 重写配置 38 | echo "Cm1lc3NhZ2Vfc2l6ZV9saW1pdCA9IDUxMjAwMDAwMApkZWZhdWx0X3Byb2Nlc3NfbGltaXQgPSA1MDAwCgpzbXRwZF90bHNfY2VydF9maWxlPS9hcHAvZnVsbGNoYWluLnBlbQpzbXRwZF90bHNfa2V5X2ZpbGU9L2FwcC9wcml2a2V5LnBlbQpzbXRwZF91c2VfdGxzPXllcwpzbXRwZF90bHNfYXV0aF9vbmx5ID0geWVzCgpzbXRwZF9zYXNsX3R5cGUgPSBkb3ZlY290CnNtdHBkX3Nhc2xfcGF0aCA9IHByaXZhdGUvYXV0aApzbXRwZF9zYXNsX2F1dGhfZW5hYmxlID0geWVzCnNtdHBkX3JlY2lwaWVudF9yZXN0cmljdGlvbnMgPSBwZXJtaXRfc2FzbF9hdXRoZW50aWNhdGVkLHBlcm1pdF9teW5ldHdvcmtzLHJlamVjdF91bmF1dGhfZGVzdGluYXRpb24KCnZpcnR1YWxfdHJhbnNwb3J0ID0gbG10cDp1bml4OnByaXZhdGUvZG92ZWNvdC1sbXRwCgp2aXJ0dWFsX21haWxib3hfZG9tYWlucyA9IG15c3FsOi9ldGMvcG9zdGZpeC9teXNxbC12aXJ0dWFsLW1haWxib3gtZG9tYWlucy5jZgp2aXJ0dWFsX21haWxib3hfbWFwcyA9IG15c3FsOi9ldGMvcG9zdGZpeC9teXNxbC12aXJ0dWFsLW1haWxib3gtbWFwcy5jZgp2aXJ0dWFsX2FsaWFzX21hcHMgPSBteXNxbDovZXRjL3Bvc3RmaXgvbXlzcWwtdmlydHVhbC1hbGlhcy1tYXBzLmNmCg==" |base64 -d >> /etc/postfix/main.cf 39 | sed -i 's/smtpd_tls_cert_file=\/etc\/ssl\/certs\/ssl-cert-snakeoil.pem/#smtpd_tls_cert_file=\/etc\/ssl\/certs\/ssl-cert-snakeoil.pem/' /etc/postfix/main.cf 40 | sed -i 's/smtpd_tls_key_file=\/etc\/ssl\/private\/ssl-cert-snakeoil.key/#smtpd_tls_key_file=\/etc\/ssl\/private\/ssl-cert-snakeoil.key/' /etc/postfix/main.cf 41 | sed -i 's/smtpd_tls_security_level=may/#smtpd_tls_security_level=may/' /etc/postfix/main.cf 42 | sed -i 's/smtp_tls_CApath=\/etc\/ssl\/certs/#smtp_tls_CApath=\/etc\/ssl\/certs/' /etc/postfix/main.cf 43 | sed -i 's/smtp_tls_security_level=may/#smtp_tls_security_level=may/' /etc/postfix/main.cf 44 | sed -i 's/smtp_tls_session_cache_database = btree:${data_directory}\/smtp_scache/#smtp_tls_session_cache_database = btree:${data_directory}\/smtp_scache/' /etc/postfix/main.cf 45 | sed -i ':t;N;s/\n\n\n/\n\n/;b t' /etc/postfix/main.cf 46 | 47 | # 配置数据库连接 48 | u="user = root" 49 | p="password = Asd123456Asd" 50 | h="hosts = mysql" 51 | d="dbname = mailserver" 52 | 53 | touch /etc/postfix/mysql-virtual-mailbox-domains.cf 54 | touch /etc/postfix/mysql-virtual-mailbox-maps.cf 55 | touch /etc/postfix/mysql-virtual-alias-maps.cf 56 | # 先删后增,防止反复追加 57 | sed -i 's\^user.*\\' /etc/postfix/mysql-virtual-mailbox-domains.cf 58 | sed -i 's\^password.*\\' /etc/postfix/mysql-virtual-mailbox-domains.cf 59 | sed -i 's\^hosts.*\\' /etc/postfix/mysql-virtual-mailbox-domains.cf 60 | sed -i 's\^dbname.*\\' /etc/postfix/mysql-virtual-mailbox-domains.cf 61 | sed -i 's\^query.*\\' /etc/postfix/mysql-virtual-mailbox-domains.cf 62 | echo $u >> /etc/postfix/mysql-virtual-mailbox-domains.cf 63 | echo $p >> /etc/postfix/mysql-virtual-mailbox-domains.cf 64 | echo $h >> /etc/postfix/mysql-virtual-mailbox-domains.cf 65 | echo $d >> /etc/postfix/mysql-virtual-mailbox-domains.cf 66 | echo "query = SELECT 1 FROM virtual_domains WHERE name='%s'" >> /etc/postfix/mysql-virtual-mailbox-domains.cf 67 | 68 | 69 | sed -i 's\^user.*\\' /etc/postfix/mysql-virtual-mailbox-maps.cf 70 | sed -i 's\^password.*\\' /etc/postfix/mysql-virtual-mailbox-maps.cf 71 | sed -i 's\^hosts.*\\' /etc/postfix/mysql-virtual-mailbox-maps.cf 72 | sed -i 's\^dbname.*\\' /etc/postfix/mysql-virtual-mailbox-maps.cf 73 | sed -i 's\^query.*\\' /etc/postfix/mysql-virtual-mailbox-maps.cf 74 | echo $u >> /etc/postfix/mysql-virtual-mailbox-maps.cf 75 | echo $p >> /etc/postfix/mysql-virtual-mailbox-maps.cf 76 | echo $h >> /etc/postfix/mysql-virtual-mailbox-maps.cf 77 | echo $d >> /etc/postfix/mysql-virtual-mailbox-maps.cf 78 | echo "query = SELECT 1 FROM virtual_users WHERE email='%s'" >> /etc/postfix/mysql-virtual-mailbox-maps.cf 79 | 80 | 81 | sed -i 's\^user.*\\' /etc/postfix/mysql-virtual-alias-maps.cf 82 | sed -i 's\^hosts.*\\' /etc/postfix/mysql-virtual-alias-maps.cf 83 | sed -i 's\^password.*\\' /etc/postfix/mysql-virtual-alias-maps.cf 84 | sed -i 's\^dbname.*\\' /etc/postfix/mysql-virtual-alias-maps.cf 85 | sed -i 's\^query.*\\' /etc/postfix/mysql-virtual-alias-maps.cf 86 | echo $u >> /etc/postfix/mysql-virtual-alias-maps.cf 87 | echo $p >> /etc/postfix/mysql-virtual-alias-maps.cf 88 | echo $h >> /etc/postfix/mysql-virtual-alias-maps.cf 89 | echo $d >> /etc/postfix/mysql-virtual-alias-maps.cf 90 | echo "query = SELECT destination FROM virtual_aliases WHERE source='%s'" >> /etc/postfix/mysql-virtual-alias-maps.cf 91 | # 清除换行 92 | sed -i ':t;N;s/\n\n\n/\n\n/;b t' /etc/postfix/mysql-virtual-mailbox-domains.cf 93 | sed -i ':t;N;s/\n\n\n/\n\n/;b t' /etc/postfix/mysql-virtual-mailbox-maps.cf 94 | sed -i ':t;N;s/\n\n\n/\n\n/;b t' /etc/postfix/mysql-virtual-alias-maps.cf 95 | # 配置dovecot日志 96 | sed -i 's/#log_path = syslog/log_path = \/var\/log\/dovecot\/dovecot.log/' /etc/dovecot/conf.d/10-logging.conf 97 | sed -i 's/#info_log_path = /info_log_path = \/var\/log\/dovecot\/dovecot_info.log/' /etc/dovecot/conf.d/10-logging.conf 98 | sed -i 's/#debug_log_path = /debug_log_path = \/var\/log\/dovecot\/dovecot_debug.log/' /etc/dovecot/conf.d/10-logging.conf 99 | echo "L3Zhci9sb2cvZG92ZWNvdCoubG9nIHsKd2Vla2x5CnJvdGF0ZSA0Cm1pc3Npbmdvawpub3RpZmVtcHR5CmNvbXByZXNzCmVsYXljb21wcmVzcwpzaGFyZWRzY3JpcHRzCnBvc3Ryb3RhdGUKZG92ZWFkbSBsb2cgcmVvcGVuCmVuZHNjcmlwdH0K" > /etc/rsyslog.d/dovecot 100 | cp /etc/rsyslog.d/dovecot /etc/logrotate.d/dovecot 101 | mkdir /var/log/dovecot 102 | 103 | 104 | # 修改/etc/dovecot/dovecot.conf文件 105 | sed -i 's/#!include conf.d\/\*\.conf/!include conf.d\/\*\.conf/' /etc/dovecot/dovecot.conf 106 | # 移除原来配置后追加 107 | sed -i 's/protocols = imap lmtp pop3//' /etc/dovecot/dovecot.conf 108 | echo "protocols = imap lmtp pop3" >> /etc/dovecot/dovecot.conf 109 | sed -i ':t;N;s/\n\n\n/\n\n/;b t' /etc/dovecot/dovecot.conf 110 | 111 | # 修改/etc/dovecot/conf.d/10-mail.conf文件 112 | sed -i 's/mail_location = mbox\:\~\/mail\:INBOX=\/var\/mail\/\%u/mail_location = maildir\:\/var\/mail\/vhosts\/\%d\/\%n/' /etc/dovecot/conf.d/10-mail.conf 113 | sed -i 's/#mail_privileged_group\s=\smail/mail_privileged_group = mail/' /etc/dovecot/conf.d/10-mail.conf 114 | 115 | # 将该文件夹的所属人改为 vmail/vmail 116 | groupadd -g 5000 vmail 117 | useradd -g vmail -u 5000 vmail -d /var/mail 118 | chown -R vmail:vmail /var/mail 119 | 120 | # 修改/etc/dovecot/conf.d/10-auth.conf文件 121 | sed -i 's/#disable_plaintext_auth = yes/disable_plaintext_auth = yes/' /etc/dovecot/conf.d/10-auth.conf 122 | sed -i 's/auth_mechanisms = plain$/auth_mechanisms = plain login/' /etc/dovecot/conf.d/10-auth.conf 123 | sed -i 's/!include auth-system.conf.ext/#!include auth-system.conf.ext/' /etc/dovecot/conf.d/10-auth.conf 124 | sed -i 's/#!include auth-sql.conf.ext/!include auth-sql.conf.ext/' /etc/dovecot/conf.d/10-auth.conf 125 | 126 | # 修改/etc/dovecot/conf.d/auth-sql.conf.ext文件 127 | echo "IyBBdXRoZW50aWNhdGlvbiBmb3IgU1FMIHVzZXJzLiBJbmNsdWRlZCBmcm9tIDEwLWF1dGguY29uZi4KIwojIDxkb2Mvd2lraS9BdXRoRGF0YWJhc2UuU1FMLnR4dD4KCnBhc3NkYiB7CiAgZHJpdmVyID0gc3FsCgogICMgUGF0aCBmb3IgU1FMIGNvbmZpZ3VyYXRpb24gZmlsZSwgc2VlIGV4YW1wbGUtY29uZmlnL2RvdmVjb3Qtc3FsLmNvbmYuZXh0CiAgYXJncyA9IC9ldGMvZG92ZWNvdC9kb3ZlY290LXNxbC5jb25mLmV4dAp9CgojICJwcmVmZXRjaCIgdXNlciBkYXRhYmFzZSBtZWFucyB0aGF0IHRoZSBwYXNzZGIgYWxyZWFkeSBwcm92aWRlZCB0aGUKIyBuZWVkZWQgaW5mb3JtYXRpb24gYW5kIHRoZXJlJ3Mgbm8gbmVlZCB0byBkbyBhIHNlcGFyYXRlIHVzZXJkYiBsb29rdXAuCiMgPGRvYy93aWtpL1VzZXJEYXRhYmFzZS5QcmVmZXRjaC50eHQ+CiN1c2VyZGIgewojICBkcml2ZXIgPSBwcmVmZXRjaAojfQoKdXNlcmRiIHsKICBkcml2ZXIgPSBzdGF0aWMKICBhcmdzID0gdWlkPXZtYWlsIGdpZD12bWFpbCBob21lPS92YXIvbWFpbC92aG9zdHMvJWQvJW4KfQoKIyBJZiB5b3UgZG9uJ3QgaGF2ZSBhbnkgdXNlci1zcGVjaWZpYyBzZXR0aW5ncywgeW91IGNhbiBhdm9pZCB0aGUgdXNlcl9xdWVyeQojIGJ5IHVzaW5nIHVzZXJkYiBzdGF0aWMgaW5zdGVhZCBvZiB1c2VyZGIgc3FsLCBmb3IgZXhhbXBsZToKIyA8ZG9jL3dpa2kvVXNlckRhdGFiYXNlLlN0YXRpYy50eHQ+CiN1c2VyZGIgewogICNkcml2ZXIgPSBzdGF0aWMKICAjYXJncyA9IHVpZD12bWFpbCBnaWQ9dm1haWwgaG9tZT0vdmFyL3ZtYWlsLyV1CiN9Cg==" |base64 -d > /etc/dovecot/conf.d/auth-sql.conf.ext 128 | 129 | # 修改/etc/dovecot/dovecot-sql.conf.ext文件 130 | sed -i 's/#driver = /driver = mysql/' /etc/dovecot/dovecot-sql.conf.ext 131 | sed -i 's/# connect = host=sql.example.com dbname=virtual user=virtual password=blarg/ connect = host=mysql port=3306 dbname=mailserver user=root password=Asd123456Asd/' /etc/dovecot/dovecot-sql.conf.ext 132 | sed -i 's/#default_pass_scheme = MD5/default_pass_scheme = MD5/' /etc/dovecot/dovecot-sql.conf.ext 133 | # 移除后追加 134 | sed -i "s/password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';//" /etc/dovecot/dovecot-sql.conf.ext 135 | echo "password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';" >> /etc/dovecot/dovecot-sql.conf.ext 136 | sed -i ':t;N;s/\n\n\n/\n\n/;b t' /etc/dovecot/dovecot-sql.conf.ext 137 | 138 | # 将`/etc/dovecot`的拥有者改为 vmail:dovecot 139 | chown -R vmail:dovecot /etc/dovecot 140 | chmod -R o-rwx /etc/dovecot 141 | 142 | # 修改/etc/dovecot/conf.d/10-master.conf文件,修改起来太复杂了,直接编写好echo进去 143 | 144 | #echo "I2RlZmF1bHRfcHJvY2Vzc19saW1pdCA9IDEwMAojZGVmYXVsdF9jbGllbnRfbGltaXQgPSAxMDAwCgojIERlZmF1bHQgVlNaICh2aXJ0dWFsIG1lbW9yeSBzaXplKSBsaW1pdCBmb3Igc2VydmljZSBwcm9jZXNzZXMuIFRoaXMgaXMgbWFpbmx5CiMgaW50ZW5kZWQgdG8gY2F0Y2ggYW5kIGtpbGwgcHJvY2Vzc2VzIHRoYXQgbGVhayBtZW1vcnkgYmVmb3JlIHRoZXkgZWF0IHVwCiMgZXZlcnl0aGluZy4KI2RlZmF1bHRfdnN6X2xpbWl0ID0gMjU2TQoKIyBMb2dpbiB1c2VyIGlzIGludGVybmFsbHkgdXNlZCBieSBsb2dpbiBwcm9jZXNzZXMuIFRoaXMgaXMgdGhlIG1vc3QgdW50cnVzdGVkCiMgdXNlciBpbiBEb3ZlY290IHN5c3RlbS4gSXQgc2hvdWxkbid0IGhhdmUgYWNjZXNzIHRvIGFueXRoaW5nIGF0IGFsbC4KI2RlZmF1bHRfbG9naW5fdXNlciA9IGRvdmVudWxsCgojIEludGVybmFsIHVzZXIgaXMgdXNlZCBieSB1bnByaXZpbGVnZWQgcHJvY2Vzc2VzLiBJdCBzaG91bGQgYmUgc2VwYXJhdGUgZnJvbQojIGxvZ2luIHVzZXIsIHNvIHRoYXQgbG9naW4gcHJvY2Vzc2VzIGNhbid0IGRpc3R1cmIgb3RoZXIgcHJvY2Vzc2VzLgojZGVmYXVsdF9pbnRlcm5hbF91c2VyID0gZG92ZWNvdAoKc2VydmljZSBpbWFwLWxvZ2luIHsKICBpbmV0X2xpc3RlbmVyIGltYXAgewogICAgcG9ydCA9IDAKICB9CiAgaW5ldF9saXN0ZW5lciBpbWFwcyB7CiAgICAjcG9ydCA9IDk5MwogICAgI3NzbCA9IHllcwogIH0KCiAgIyBOdW1iZXIgb2YgY29ubmVjdGlvbnMgdG8gaGFuZGxlIGJlZm9yZSBzdGFydGluZyBhIG5ldyBwcm9jZXNzLiBUeXBpY2FsbHkKICAjIHRoZSBvbmx5IHVzZWZ1bCB2YWx1ZXMgYXJlIDAgKHVubGltaXRlZCkgb3IgMS4gMSBpcyBtb3JlIHNlY3VyZSwgYnV0IDAKICAjIGlzIGZhc3Rlci4gPGRvYy93aWtpL0xvZ2luUHJvY2Vzcy50eHQ+CiAgI3NlcnZpY2VfY291bnQgPSAxCgogICMgTnVtYmVyIG9mIHByb2Nlc3NlcyB0byBhbHdheXMga2VlcCB3YWl0aW5nIGZvciBtb3JlIGNvbm5lY3Rpb25zLgogICNwcm9jZXNzX21pbl9hdmFpbCA9IDAKCiAgIyBJZiB5b3Ugc2V0IHNlcnZpY2VfY291bnQ9MCwgeW91IHByb2JhYmx5IG5lZWQgdG8gZ3JvdyB0aGlzLgogICN2c3pfbGltaXQgPSAkZGVmYXVsdF92c3pfbGltaXQKfQoKc2VydmljZSBwb3AzLWxvZ2luIHsKICBpbmV0X2xpc3RlbmVyIHBvcDMgewogICAgcG9ydCA9IDAKICB9CiAgaW5ldF9saXN0ZW5lciBwb3AzcyB7CiAgICAjcG9ydCA9IDk5NQogICAgI3NzbCA9IHllcwogIH0KfQoKc2VydmljZSBsbXRwIHsKICB1bml4X2xpc3RlbmVyIC92YXIvc3Bvb2wvcG9zdGZpeC9wcml2YXRlL2RvdmVjb3QtbG10cCB7CiAgICBtb2RlID0gMDYwMAogICAgdXNlciA9IHBvc3RmaXgKICAgIGdyb3VwID0gcG9zdGZpeAogIH0KCiAgIyBDcmVhdGUgaW5ldCBsaXN0ZW5lciBvbmx5IGlmIHlvdSBjYW4ndCB1c2UgdGhlIGFib3ZlIFVOSVggc29ja2V0CiAgI2luZXRfbGlzdGVuZXIgbG10cCB7CiAgICAjIEF2b2lkIG1ha2luZyBMTVRQIHZpc2libGUgZm9yIHRoZSBlbnRpcmUgaW50ZXJuZXQKICAgICNhZGRyZXNzID0KICAgICNwb3J0ID0gCiAgI30KfQoKc2VydmljZSBpbWFwIHsKICAjIE1vc3Qgb2YgdGhlIG1lbW9yeSBnb2VzIHRvIG1tYXAoKWluZyBmaWxlcy4gWW91IG1heSBuZWVkIHRvIGluY3JlYXNlIHRoaXMKICAjIGxpbWl0IGlmIHlvdSBoYXZlIGh1Z2UgbWFpbGJveGVzLgogICN2c3pfbGltaXQgPSAkZGVmYXVsdF92c3pfbGltaXQKCiAgIyBNYXguIG51bWJlciBvZiBJTUFQIHByb2Nlc3NlcyAoY29ubmVjdGlvbnMpCiAgI3Byb2Nlc3NfbGltaXQgPSAxMDI0Cn0KCnNlcnZpY2UgcG9wMyB7CiAgIyBNYXguIG51bWJlciBvZiBQT1AzIHByb2Nlc3NlcyAoY29ubmVjdGlvbnMpCiAgI3Byb2Nlc3NfbGltaXQgPSAxMDI0Cn0KCnNlcnZpY2UgYXV0aCB7CiAgIyBhdXRoX3NvY2tldF9wYXRoIHBvaW50cyB0byB0aGlzIHVzZXJkYiBzb2NrZXQgYnkgZGVmYXVsdC4gSXQncyB0eXBpY2FsbHkKICAjIHVzZWQgYnkgZG92ZWNvdC1sZGEsIGRvdmVhZG0sIHBvc3NpYmx5IGltYXAgcHJvY2VzcywgZXRjLiBVc2VycyB0aGF0IGhhdmUKICAjIGZ1bGwgcGVybWlzc2lvbnMgdG8gdGhpcyBzb2NrZXQgYXJlIGFibGUgdG8gZ2V0IGEgbGlzdCBvZiBhbGwgdXNlcm5hbWVzIGFuZAogICMgZ2V0IHRoZSByZXN1bHRzIG9mIGV2ZXJ5b25lJ3MgdXNlcmRiIGxvb2t1cHMuCiAgIwogICMgVGhlIGRlZmF1bHQgMDY2NiBtb2RlIGFsbG93cyBhbnlvbmUgdG8gY29ubmVjdCB0byB0aGUgc29ja2V0LCBidXQgdGhlCiAgIyB1c2VyZGIgbG9va3VwcyB3aWxsIHN1Y2NlZWQgb25seSBpZiB0aGUgdXNlcmRiIHJldHVybnMgYW4gInVpZCIgZmllbGQgdGhhdAogICMgbWF0Y2hlcyB0aGUgY2FsbGVyIHByb2Nlc3MncyBVSUQuIEFsc28gaWYgY2FsbGVyJ3MgdWlkIG9yIGdpZCBtYXRjaGVzIHRoZQogICMgc29ja2V0J3MgdWlkIG9yIGdpZCB0aGUgbG9va3VwIHN1Y2NlZWRzLiBBbnl0aGluZyBlbHNlIGNhdXNlcyBhIGZhaWx1cmUuCiAgIwogICMgVG8gZ2l2ZSB0aGUgY2FsbGVyIGZ1bGwgcGVybWlzc2lvbnMgdG8gbG9va3VwIGFsbCB1c2Vycywgc2V0IHRoZSBtb2RlIHRvCiAgIyBzb21ldGhpbmcgZWxzZSB0aGFuIDA2NjYgYW5kIERvdmVjb3QgbGV0cyB0aGUga2VybmVsIGVuZm9yY2UgdGhlCiAgIyBwZXJtaXNzaW9ucyAoZS5nLiAwNzc3IGFsbG93cyBldmVyeW9uZSBmdWxsIHBlcm1pc3Npb25zKS4KICB1bml4X2xpc3RlbmVyIC92YXIvc3Bvb2wvcG9zdGZpeC9wcml2YXRlL2F1dGggewogICAgbW9kZSA9IDA2NjYKICAgIHVzZXIgPSBwb3N0Zml4CiAgICBncm91cCA9IHBvc3RmaXgKICB9CgogICMgUG9zdGZpeCBzbXRwLWF1dGgKICAjdW5peF9saXN0ZW5lciAvdmFyL3Nwb29sL3Bvc3RmaXgvcHJpdmF0ZS9hdXRoIHsKICAjICBtb2RlID0gMDY2NgogICN9CgogICMgQXV0aCBwcm9jZXNzIGlzIHJ1biBhcyB0aGlzIHVzZXIuCiAgI3VzZXIgPSAkZGVmYXVsdF9pbnRlcm5hbF91c2VyCn0KCnNlcnZpY2UgYXV0aC13b3JrZXIgewogICMgQXV0aCB3b3JrZXIgcHJvY2VzcyBpcyBydW4gYXMgcm9vdCBieSBkZWZhdWx0LCBzbyB0aGF0IGl0IGNhbiBhY2Nlc3MKICAjIC9ldGMvc2hhZG93LiBJZiB0aGlzIGlzbid0IG5lY2Vzc2FyeSwgdGhlIHVzZXIgc2hvdWxkIGJlIGNoYW5nZWQgdG8KICAjICRkZWZhdWx0X2ludGVybmFsX3VzZXIuCiAgdXNlciA9IHZtYWlsCn0KCnNlcnZpY2UgZGljdCB7CiAgIyBJZiBkaWN0IHByb3h5IGlzIHVzZWQsIG1haWwgcHJvY2Vzc2VzIHNob3VsZCBoYXZlIGFjY2VzcyB0byBpdHMgc29ja2V0LgogICMgRm9yIGV4YW1wbGU6IG1vZGU9MDY2MCwgZ3JvdXA9dm1haWwgYW5kIGdsb2JhbCBtYWlsX2FjY2Vzc19ncm91cHM9dm1haWwKICB1bml4X2xpc3RlbmVyIGRpY3QgewogICAgI21vZGUgPSAwNjAwCiAgICAjdXNlciA9IAogICAgI2dyb3VwID0gCiAgfQp9Cg==" |base64 -d > /etc/dovecot/conf.d/10-master.conf 145 | echo "I2RlZmF1bHRfcHJvY2Vzc19saW1pdCA9IDEwMAojZGVmYXVsdF9jbGllbnRfbGltaXQgPSAxMDAwCgojIERlZmF1bHQgVlNaICh2aXJ0dWFsIG1lbW9yeSBzaXplKSBsaW1pdCBmb3Igc2VydmljZSBwcm9jZXNzZXMuIFRoaXMgaXMgbWFpbmx5CiMgaW50ZW5kZWQgdG8gY2F0Y2ggYW5kIGtpbGwgcHJvY2Vzc2VzIHRoYXQgbGVhayBtZW1vcnkgYmVmb3JlIHRoZXkgZWF0IHVwCiMgZXZlcnl0aGluZy4KI2RlZmF1bHRfdnN6X2xpbWl0ID0gMjU2TQoKIyBMb2dpbiB1c2VyIGlzIGludGVybmFsbHkgdXNlZCBieSBsb2dpbiBwcm9jZXNzZXMuIFRoaXMgaXMgdGhlIG1vc3QgdW50cnVzdGVkCiMgdXNlciBpbiBEb3ZlY290IHN5c3RlbS4gSXQgc2hvdWxkbid0IGhhdmUgYWNjZXNzIHRvIGFueXRoaW5nIGF0IGFsbC4KI2RlZmF1bHRfbG9naW5fdXNlciA9IGRvdmVudWxsCgojIEludGVybmFsIHVzZXIgaXMgdXNlZCBieSB1bnByaXZpbGVnZWQgcHJvY2Vzc2VzLiBJdCBzaG91bGQgYmUgc2VwYXJhdGUgZnJvbQojIGxvZ2luIHVzZXIsIHNvIHRoYXQgbG9naW4gcHJvY2Vzc2VzIGNhbid0IGRpc3R1cmIgb3RoZXIgcHJvY2Vzc2VzLgojZGVmYXVsdF9pbnRlcm5hbF91c2VyID0gZG92ZWNvdAoKc2VydmljZSBpbWFwLWxvZ2luIHsKICBpbmV0X2xpc3RlbmVyIGltYXAgewogICAgcG9ydCA9IDAKICB9CiAgaW5ldF9saXN0ZW5lciBpbWFwcyB7CiAgICAjcG9ydCA9IDk5MwogICAgI3NzbCA9IHllcwogIH0KCiAgIyBOdW1iZXIgb2YgY29ubmVjdGlvbnMgdG8gaGFuZGxlIGJlZm9yZSBzdGFydGluZyBhIG5ldyBwcm9jZXNzLiBUeXBpY2FsbHkKICAjIHRoZSBvbmx5IHVzZWZ1bCB2YWx1ZXMgYXJlIDAgKHVubGltaXRlZCkgb3IgMS4gMSBpcyBtb3JlIHNlY3VyZSwgYnV0IDAKICAjIGlzIGZhc3Rlci4gPGRvYy93aWtpL0xvZ2luUHJvY2Vzcy50eHQ+CiAgI3NlcnZpY2VfY291bnQgPSAxCgogICMgTnVtYmVyIG9mIHByb2Nlc3NlcyB0byBhbHdheXMga2VlcCB3YWl0aW5nIGZvciBtb3JlIGNvbm5lY3Rpb25zLgogICNwcm9jZXNzX21pbl9hdmFpbCA9IDAKCiAgIyBJZiB5b3Ugc2V0IHNlcnZpY2VfY291bnQ9MCwgeW91IHByb2JhYmx5IG5lZWQgdG8gZ3JvdyB0aGlzLgogICN2c3pfbGltaXQgPSAkZGVmYXVsdF92c3pfbGltaXQKfQoKc2VydmljZSBwb3AzLWxvZ2luIHsKICBpbmV0X2xpc3RlbmVyIHBvcDMgewogICAgcG9ydCA9IDAKICB9CiAgaW5ldF9saXN0ZW5lciBwb3AzcyB7CiAgICAjcG9ydCA9IDk5NQogICAgI3NzbCA9IHllcwogIH0KfQoKc2VydmljZSBsbXRwIHsKICB1bml4X2xpc3RlbmVyIC92YXIvc3Bvb2wvcG9zdGZpeC9wcml2YXRlL2RvdmVjb3QtbG10cCB7CiAgICBtb2RlID0gMDYwMAogICAgdXNlciA9IHBvc3RmaXgKICAgIGdyb3VwID0gcG9zdGZpeAogIH0KCiAgIyBDcmVhdGUgaW5ldCBsaXN0ZW5lciBvbmx5IGlmIHlvdSBjYW4ndCB1c2UgdGhlIGFib3ZlIFVOSVggc29ja2V0CiAgI2luZXRfbGlzdGVuZXIgbG10cCB7CiAgICAjIEF2b2lkIG1ha2luZyBMTVRQIHZpc2libGUgZm9yIHRoZSBlbnRpcmUgaW50ZXJuZXQKICAgICNhZGRyZXNzID0KICAgICNwb3J0ID0gCiAgI30KfQoKc2VydmljZSBpbWFwIHsKICAjIE1vc3Qgb2YgdGhlIG1lbW9yeSBnb2VzIHRvIG1tYXAoKWluZyBmaWxlcy4gWW91IG1heSBuZWVkIHRvIGluY3JlYXNlIHRoaXMKICAjIGxpbWl0IGlmIHlvdSBoYXZlIGh1Z2UgbWFpbGJveGVzLgogICN2c3pfbGltaXQgPSAkZGVmYXVsdF92c3pfbGltaXQKCiAgIyBNYXguIG51bWJlciBvZiBJTUFQIHByb2Nlc3NlcyAoY29ubmVjdGlvbnMpCiAgI3Byb2Nlc3NfbGltaXQgPSAxMDI0Cn0KCnNlcnZpY2UgcG9wMyB7CiAgIyBNYXguIG51bWJlciBvZiBQT1AzIHByb2Nlc3NlcyAoY29ubmVjdGlvbnMpCiAgI3Byb2Nlc3NfbGltaXQgPSAxMDI0Cn0KCnNlcnZpY2UgYXV0aCB7CiAgIyBhdXRoX3NvY2tldF9wYXRoIHBvaW50cyB0byB0aGlzIHVzZXJkYiBzb2NrZXQgYnkgZGVmYXVsdC4gSXQncyB0eXBpY2FsbHkKICAjIHVzZWQgYnkgZG92ZWNvdC1sZGEsIGRvdmVhZG0sIHBvc3NpYmx5IGltYXAgcHJvY2VzcywgZXRjLiBVc2VycyB0aGF0IGhhdmUKICAjIGZ1bGwgcGVybWlzc2lvbnMgdG8gdGhpcyBzb2NrZXQgYXJlIGFibGUgdG8gZ2V0IGEgbGlzdCBvZiBhbGwgdXNlcm5hbWVzIGFuZAogICMgZ2V0IHRoZSByZXN1bHRzIG9mIGV2ZXJ5b25lJ3MgdXNlcmRiIGxvb2t1cHMuCiAgIwogICMgVGhlIGRlZmF1bHQgMDY2NiBtb2RlIGFsbG93cyBhbnlvbmUgdG8gY29ubmVjdCB0byB0aGUgc29ja2V0LCBidXQgdGhlCiAgIyB1c2VyZGIgbG9va3VwcyB3aWxsIHN1Y2NlZWQgb25seSBpZiB0aGUgdXNlcmRiIHJldHVybnMgYW4gInVpZCIgZmllbGQgdGhhdAogICMgbWF0Y2hlcyB0aGUgY2FsbGVyIHByb2Nlc3MncyBVSUQuIEFsc28gaWYgY2FsbGVyJ3MgdWlkIG9yIGdpZCBtYXRjaGVzIHRoZQogICMgc29ja2V0J3MgdWlkIG9yIGdpZCB0aGUgbG9va3VwIHN1Y2NlZWRzLiBBbnl0aGluZyBlbHNlIGNhdXNlcyBhIGZhaWx1cmUuCiAgIwogICMgVG8gZ2l2ZSB0aGUgY2FsbGVyIGZ1bGwgcGVybWlzc2lvbnMgdG8gbG9va3VwIGFsbCB1c2Vycywgc2V0IHRoZSBtb2RlIHRvCiAgIyBzb21ldGhpbmcgZWxzZSB0aGFuIDA2NjYgYW5kIERvdmVjb3QgbGV0cyB0aGUga2VybmVsIGVuZm9yY2UgdGhlCiAgIyBwZXJtaXNzaW9ucyAoZS5nLiAwNzc3IGFsbG93cyBldmVyeW9uZSBmdWxsIHBlcm1pc3Npb25zKS4KICB1bml4X2xpc3RlbmVyIC92YXIvc3Bvb2wvcG9zdGZpeC9wcml2YXRlL2F1dGggewogICAgbW9kZSA9IDA2NjYKICAgIHVzZXIgPSBwb3N0Zml4CiAgICBncm91cCA9IHBvc3RmaXgKICB9CgogIHVuaXhfbGlzdGVuZXIgYXV0aC11c2VyZGIgewogICAgbW9kZSA9IDA2MDAKICAgIHVzZXIgPSB2bWFpbAogICAgI2dyb3VwID0gCiAgfQoKICB1c2VyID0gZG92ZWNvdAogICMgUG9zdGZpeCBzbXRwLWF1dGgKICAjdW5peF9saXN0ZW5lciAvdmFyL3Nwb29sL3Bvc3RmaXgvcHJpdmF0ZS9hdXRoIHsKICAjICBtb2RlID0gMDY2NgogICN9CgogICMgQXV0aCBwcm9jZXNzIGlzIHJ1biBhcyB0aGlzIHVzZXIuCiAgI3VzZXIgPSAkZGVmYXVsdF9pbnRlcm5hbF91c2VyCn0KCnNlcnZpY2UgYXV0aC13b3JrZXIgewogICMgQXV0aCB3b3JrZXIgcHJvY2VzcyBpcyBydW4gYXMgcm9vdCBieSBkZWZhdWx0LCBzbyB0aGF0IGl0IGNhbiBhY2Nlc3MKICAjIC9ldGMvc2hhZG93LiBJZiB0aGlzIGlzbid0IG5lY2Vzc2FyeSwgdGhlIHVzZXIgc2hvdWxkIGJlIGNoYW5nZWQgdG8KICAjICRkZWZhdWx0X2ludGVybmFsX3VzZXIuCiAgdXNlciA9IHZtYWlsCn0KCnNlcnZpY2UgZGljdCB7CiAgIyBJZiBkaWN0IHByb3h5IGlzIHVzZWQsIG1haWwgcHJvY2Vzc2VzIHNob3VsZCBoYXZlIGFjY2VzcyB0byBpdHMgc29ja2V0LgogICMgRm9yIGV4YW1wbGU6IG1vZGU9MDY2MCwgZ3JvdXA9dm1haWwgYW5kIGdsb2JhbCBtYWlsX2FjY2Vzc19ncm91cHM9dm1haWwKICB1bml4X2xpc3RlbmVyIGRpY3QgewogICAgI21vZGUgPSAwNjAwCiAgICAjdXNlciA9IAogICAgI2dyb3VwID0gCiAgfQp9Cg==" |base64 -d > /etc/dovecot/conf.d/10-master.conf 146 | # 第二个增加了auth-userdb,第一个是源邮服配置 147 | 148 | # 修改/etc/dovecot/conf.d/10-ssl.conf文件 149 | sed -i 's/ssl = yes/ssl = required/' /etc/dovecot/conf.d/10-ssl.conf 150 | sed -i 's/ssl_cert = <\/etc\/dovecot\/private\/dovecot.pem/ssl_cert = <\/app\/fullchain.pem/' /etc/dovecot/conf.d/10-ssl.conf 151 | sed -i 's/ssl_key = <\/etc\/dovecot\/private\/dovecot.key/ssl_key = <\/app\/privkey.pem/' /etc/dovecot/conf.d/10-ssl.conf 152 | 153 | # 修改/etc/postfix/main.cf文件 154 | #echo "smtpd_tls_loglevel = 2" >> /etc/postfix/main.cf 155 | # 以上内容可不配置 156 | 157 | # 修改/etc/postfix/master.cf文件 158 | sed -i 's/smtp inet n - y - - smtpd/#smtp inet n - y - - smtpd/' /etc/postfix/master.cf 159 | sed -i 's/#smtps inet n - y - - smtpd/smtps inet n - n - - smtpd/' /etc/postfix/master.cf 160 | sed -i 's/# -o smtpd_tls_wrappermode=yes/ -o smtpd_tls_wrappermode=yes/' /etc/postfix/master.cf 161 | #sed -i 's/#submission inet n - y - - smtpd/submission inet n - y - - smtpd/' /etc/postfix/master.cf 162 | sed -i 's/# -o syslog_name=postfix\/smtps/ -o syslog_name=postfix\/smtps/' /etc/postfix/master.cf 163 | sed -z -i 's/# -o smtpd_sasl_auth_enable=yes/ -o smtpd_sasl_auth_enable=yes/2' /etc/postfix/master.cf 164 | sed -z -i 's/# -o smtpd_reject_unlisted_recipient=no/ -o smtpd_reject_unlisted_recipient=no/2' /etc/postfix/master.cf 165 | 166 | #service postfix restart 167 | #service dovecot restart 168 | 169 | mysql_h="mysql" 170 | mysql_u="root" 171 | mysql_p="Asd123456Asd" 172 | save_f="mysql.log" 173 | save_p="/app/" 174 | 175 | mysql_sq1="create database mailserver character set utf8;" 176 | mysql_sq2="CREATE TABLE \`virtual_domains\` (\`id\` INT NOT NULL AUTO_INCREMENT,\`name\` VARCHAR(50) NOT NULL,PRIMARY KEY (\`id\`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;" 177 | mysql_sq3="CREATE TABLE \`virtual_users\` (\`id\` INT NOT NULL AUTO_INCREMENT,\`domain_id\` INT NOT NULL,\`password\` VARCHAR(106) NOT NULL,\`email\` VARCHAR(120) NOT NULL,PRIMARY KEY (\`id\`),UNIQUE KEY \`email\` (\`email\`),FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8;" 178 | mysql_sq4="CREATE TABLE \`virtual_aliases\` (\`id\` int(11) NOT NULL auto_increment,\`domain_id\` int(11) NOT NULL,\`source\` varchar(100) NOT NULL,\`destination\` varchar(100) NOT NULL,PRIMARY KEY (\`id\`),FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE)ENGINE=InnoDB DEFAULT CHARSET=utf8;" 179 | 180 | export MYSQL_PWD=${mysql_p} 181 | echo "start connect database..." 182 | result=`mysql -h$mysql_h -u$mysql_u -p$mysql_p << EOF 183 | $mysql_sq1; 184 | use mailserver; 185 | $mysql_sq2; 186 | $mysql_sq3; 187 | $mysql_sq4; 188 | show tables; 189 | quit 190 | EOF` 191 | if [ $? = 0 ] 192 | then 193 | echo "connect successful..." 194 | else 195 | echo "connect failure..." 196 | fi 197 | echo "write result..." 198 | echo "$result" > $save_p$save_f 199 | echo "write done..." 200 | 201 | sed -i 's/^smtpd_banner = .*/smtpd_banner = Welcome to mail system!(mail.test.com.cn)/' /etc/postfix/main.cf 202 | postconf -e "myhostname = test.com.cn" 203 | 204 | service postfix restart 205 | service dovecot restart 206 | 207 | #/usr/sbin/postfix start-fg 208 | #/usr/sbin/dovecot -F 209 | 210 | # 死循环,保持前台运行 211 | i=1 212 | while : 213 | do 214 | sleep 86400 215 | echo "已运行$i天" 216 | i=$((i += 1)) 217 | done 218 | --------------------------------------------------------------------------------