ผลต่างระหว่างรุ่นของ "คู่มือการพัฒนา EAI Mail Server บน Ubuntu 22"

จาก Wiki_EAI
ไปยังการนำทาง ไปยังการค้นหา
(สร้างหน้าด้วย "<languages/> <translate> = EAI Email Server = <!--T:1--> <!--T:2--> คู่มือนี้ได้จัดทำขึ้นมาเพื่อ...")
 
 
(ไม่แสดง 78 รุ่นระหว่างกลางโดยผู้ใช้ 2 คน)
แถว 7: แถว 7:
  
 
== Software ที่นำมาทดสอบ == <!--T:3-->
 
== Software ที่นำมาทดสอบ == <!--T:3-->
# Ubuntu 20.04.3 LTS [[https://www.kon.in.th/download/mailthai-for-participants.zip workshop virtualbox image ]]
+
# Ubuntu 22.04.3 LTS [[https://www.kon.in.th/download/mailthai-ubuntu-22.zip workshop virtualbox image ]]
# Postfix 3.4.13
+
# Postfix 3.6.4
# Dovecot 2.3.7.2
+
# Dovecot 2.3.16
# MySQL 8.0.27
+
# MySQL 8.0.30
# Roundcube 1.4.4 [[https://roundcube.net/download/ ดาวน์โหลด]] [[https://github.com/roundcube/roundcubemail/releases/download/1.4.4/roundcubemail-1.4.4-complete.tar.gz tar]]
+
# Roundcube 1.6.5 [[https://roundcube.net/download/ ดาวน์โหลด]] [[https://github.com/roundcube/roundcubemail/releases/download/1.6.5/roundcubemail-1.6.5-complete.tar.gz tar]]
  
== Workshop Slide [[https://kon.in.th/download/EAI_Training_2022.pdf ดาวน์โหลด]] ==
+
== เอกสารที่เกี่ยวข้อง ==
# [[https://kon.in.th/download/EAI_Training_2022.pdf ดาวน์โหลด]]
+
# Workshop Slide [[https://kon.in.th/download/EAI_Training_2023.pdf ดาวน์โหลด]]
 +
# แบบสอบถาม [[https://docs.google.com/forms/d/e/1FAIpQLSf1IjIT6LqHSEnXUQDcjakVnQ3XRqbD5adluaCDRjNwZhOnGQ/viewform แบบสอบถาม]]
 +
[[ไฟล์:แบบสอบถาม.jpeg|border|400px]]
  
 
== EAI Workshop Authentication  == <!--T:5-->
 
== EAI Workshop Authentication  == <!--T:5-->
 
* [[https://eai-lab.bknix.co.th/ EAI Workshop]]
 
* [[https://eai-lab.bknix.co.th/ EAI Workshop]]
 
  user: eai
 
  user: eai
  pass: eai+ws@thnic
+
  pass: eaiws@2022
 
* โดเมนที่ใช้เป็นตัวอย่างใน workshop
 
* โดเมนที่ใช้เป็นตัวอย่างใน workshop
 
  English : mailthai99.in.th
 
  English : mailthai99.in.th
แถว 28: แถว 30:
 
  Pass: userpass
 
  Pass: userpass
 
* Passphase for SSL Key
 
* Passphase for SSL Key
  Key: mailthai.key, mailthai.crt, mailthai.csr
+
  Key: mailthai.key, mailthai.crt
Pass: mailpass
 
 
* MySQL
 
* MySQL
User: root
 
Pass: rootpass
 
 
 
  DB: eaimail
 
  DB: eaimail
 
  User: dbuser
 
  User: dbuser
แถว 41: แถว 39:
 
  User: rcmail
 
  User: rcmail
 
  Pass: rcmailpass
 
  Pass: rcmailpass
 
 
* Roundcube
 
* Roundcube
 
  User: thai@mailthai<span style="color: green;>XX</span>.in.th
 
  User: thai@mailthai<span style="color: green;>XX</span>.in.th
แถว 63: แถว 60:
 
=== <span style="color:green;">กำหนดชื่อ hostname และตรวจสอบด้วยคำสั่ง </span> ===
 
=== <span style="color:green;">กำหนดชื่อ hostname และตรวจสอบด้วยคำสั่ง </span> ===
 
* กำหนดชื่อ hostname  
 
* กำหนดชื่อ hostname  
  '''hostnamectl set-hostname ''mail.mailthai<span style="color:green">99</span>.in.th'' '''
+
  '''hostnamectl set-hostname ''mail.mailthai<span style="color:green">XX</span>.in.th'' '''
 
''ตัวอย่าง เช่น <span style="color:green">mail.mailthai99.in.th</span>
 
''ตัวอย่าง เช่น <span style="color:green">mail.mailthai99.in.th</span>
 
* ตรวจสอบ hostname  
 
* ตรวจสอบ hostname  
 
  '''hostnamectl'''
 
  '''hostnamectl'''
 
''ตัวอย่าง''
 
''ตัวอย่าง''
  Static hostname: mail.mailthai99.in.th  
+
  Static hostname: mail.mailthai99.in.th
  
 
<!--T:11-->
 
<!--T:11-->
แถว 77: แถว 74:
 
<!--T:12-->
 
<!--T:12-->
 
''ตัวอย่างไฟล์ hosts''
 
''ตัวอย่างไฟล์ hosts''
  127.0.0.1   localhost mail.mailthai<span style="color:green">99</span>.in.th
+
  100.64.10.<span style="color:green">99</span>   localhost mail.mailthai<span style="color:green">99</span>.in.th
  
 
'' กด crtl+X และกด y เพื่อ save และออกจาก nano
 
'' กด crtl+X และกด y เพื่อ save และออกจาก nano
แถว 83: แถว 80:
 
=== ตั้งค่าเวลาของ Mail Server และตรวจสอบ ===
 
=== ตั้งค่าเวลาของ Mail Server และตรวจสอบ ===
 
* ตั้งค่าเวลาของ Mail Server
 
* ตั้งค่าเวลาของ Mail Server
  ''' timedatectl set-timezone "Asia/Bangkok"  
+
  '''timedatectl set-timezone "Asia/Bangkok"  
 
* ตรวจสอบเวลาของ Mail Server
 
* ตรวจสอบเวลาของ Mail Server
  ''' timedatectl status
+
  '''timedatectl status
 
''ตัวอย่าง''
 
''ตัวอย่าง''
 
  <span style="color:green">Local time: Fri 2022-01-14 12:06:03 +07</span>
 
  <span style="color:green">Local time: Fri 2022-01-14 12:06:03 +07</span>
แถว 99: แถว 96:
  
 
<!--T:17-->
 
<!--T:17-->
 +
* ติดตั้งโปรแกรม ufw
 +
'''apt -y install ufw'''
 +
 
* เปิด firewall service
 
* เปิด firewall service
 
  '''ufw enable'''
 
  '''ufw enable'''
แถว 111: แถว 111:
 
<!--T:20-->
 
<!--T:20-->
 
2. เปิด firewall services ของ email server  
 
2. เปิด firewall services ของ email server  
  '''ufw allow in ssh'''
+
  '''ufw allow ssh'''
 
  '''ufw allow http'''
 
  '''ufw allow http'''
 
  '''ufw allow https'''
 
  '''ufw allow https'''
แถว 118: แถว 118:
 
  '''ufw allow imap'''
 
  '''ufw allow imap'''
 
  '''ufw allow imaps'''
 
  '''ufw allow imaps'''
'''ufw allow mysql'''
 
  
 
''ตัวอย่าง''
 
''ตัวอย่าง''
แถว 141: แถว 140:
 
  465/tcp                    ALLOW      Anywhere                   
 
  465/tcp                    ALLOW      Anywhere                   
 
  143/tcp                    ALLOW      Anywhere                   
 
  143/tcp                    ALLOW      Anywhere                   
  993/tcp                    ALLOW      Anywhere                
+
  993/tcp                    ALLOW      Anywhere                          
3306/tcp                  ALLOW      Anywhere             
 
 
  22/tcp (v6)                ALLOW      Anywhere (v6)             
 
  22/tcp (v6)                ALLOW      Anywhere (v6)             
 
  80/tcp (v6)                ALLOW      Anywhere (v6)             
 
  80/tcp (v6)                ALLOW      Anywhere (v6)             
แถว 150: แถว 148:
 
  143/tcp (v6)              ALLOW      Anywhere (v6)             
 
  143/tcp (v6)              ALLOW      Anywhere (v6)             
 
  993/tcp (v6)              ALLOW      Anywhere (v6)
 
  993/tcp (v6)              ALLOW      Anywhere (v6)
3306/tcp (v6)              ALLOW      Anywhere (v6) 
 
 
<!--T:31-->
 
''*ref: configure firewall services for mail server (https://linuxconfig.org/ubuntu-20-04-open-http-port-80-and-https-port-443-with-ufw)''
 
  
 
== สร้าง SSL Cert == <!--T:32-->
 
== สร้าง SSL Cert == <!--T:32-->
 
* เป็นขั้นตอนการสร้าง SSL cert/key เตรียมไว้ใช้งานกับ postfix และ dovecot  
 
* เป็นขั้นตอนการสร้าง SSL cert/key เตรียมไว้ใช้งานกับ postfix และ dovecot  
* ในเครื่อง workshop ได้เตรียม cert mailthai.crt, mailthai.key, mailthai.csr ไว้แล้ว
+
* ในเครื่อง workshop ได้เตรียม cert mailthai.crt, mailthai.key ไว้แล้ว
  
 
<span style='color:green'>1. สร้าง private key</span>
 
<span style='color:green'>1. สร้าง private key</span>
 
  '''cd /etc/ssl/private'''
 
  '''cd /etc/ssl/private'''
  '''openssl genrsa -aes128 2048 > mailthai<span style='color:green'>XX</span>.key'''
+
  '''openssl req -new -x509 -days 365 -nodes -newkey rsa:2048 -keyout mailthai<span style='color:green'>XX</span>.key -out mailthai<span style='color:green'>XX</span>.crt -subj "/C=TH/ST=Bangkok/L=Dusit/O=EAI/OU=IT/CN=mail.mailthai<span style='color:green'>XX</span>.in.th" '''
 
 
<!--T:33-->
 
'' ตัวอย่าง เช่น mailthai99.key ''
 
Generating RSA private key, 2048 bit long modulus (2 primes)
 
........+++++
 
..+++++
 
e is 65537 (0x010001)
 
Enter pass phrase:                      <span style='color:green'># mailpass</span>
 
Verifying - Enter pass phrase:          <span style='color:green'># mailpass</span>
 
 
 
<!--T:34-->
 
<span style='color:green'>2. ถอด Passphase ออกจาก private key ที่สร้างขึ้น</span>
 
'''openssl rsa -in mailthai<span style='color:green'>XX</span>.key -out mailthai<span style='color:green'>XX</span>.key'''
 
 
 
<!--T:35-->
 
'' ตัวอย่าง เช่น mailthai99.key ''
 
 
 
<!--T:36-->
 
Enter pass phrase for mailthai99.key:  <span style='color:green'># mailpass</span>
 
writing RSA key
 
 
 
<!--T:37-->
 
<span style='color:green'>3. สร้าง csr</span>
 
'''openssl req -utf8 -new -key mailthai<span style='color:green'>XX</span>.key -out mailthai<span style='color:green'>XX</span>.csr'''
 
 
 
<!--T:38-->
 
'' ตัวอย่างเช่น mailthai99.key, mailthai99.csr ''
 
Country Name (2 letter code) [AU]:<span style='color:green'>TH</span>
 
State or Province Name (full name) [Some-State]:<span style='color:green'>Bangkok</span>
 
Locality Name (eg, city) []:<span style='color:green'>Dusit</span>
 
Organization Name (eg, company) [Internet Widgits Pty Ltd]:<span style='color:green'>EAI</span>
 
Organizational Unit Name (eg, section) []:<span style='color:green'>IT</span>
 
Common Name (e.g. server FQDN or YOUR name) []:<span style='color:green'>mail.mailthai99.in.th</span>
 
Email Address []:<span style='color:green'>postmaster@mailthai99.in.th</span>
 
 
Please enter the following 'extra' attributes
 
to be sent with your certificate request
 
A challenge password []: # Enter
 
An optional company name []: # Enter
 
 
 
 
 
<!--T:39-->
 
<span style='color:green'>4. ทำการ generate key</span>
 
'''openssl x509 -in mailthai<span style='color:green'>XX</span>.csr -out mailthai<span style='color:green'>XX</span>.crt -req -signkey mailthai<span style='color:green'>XX</span>.key -days 365'''
 
 
 
<!--T:40-->
 
'' ตัวอย่างเช่น mailthai99.key, mailthai99.csr, mailthai99.crt''
 
  
<!--T:41-->
 
Signature ok
 
subject=C = TH, ST = Bangkok, L = Dusit, O = EAI, OU = IT, CN = mail.mailthaiXX.in.th, emailAddress = postmaster@mailthai99.in.th
 
Getting Private key
 
  
<span style='color:green'>5. ตรวจสอบ key ที่สร้างขึ้น</span>
+
<span style='color:green'>2. ตรวจสอบ key ที่สร้างขึ้น</span>
 
  '''ls'''
 
  '''ls'''
 
'' ตัวอย่าง ''
 
'' ตัวอย่าง ''
  mailthai99.crt mailthai99.csr mailthai99.key
+
  mailthai99.crt  mailthai99.key
  
 
== ติดตั้ง MySQL, Postfix, Dovecot == <!--T:42-->
 
== ติดตั้ง MySQL, Postfix, Dovecot == <!--T:42-->
 
1. ติดตั้ง MySQL, Postfix , Dovecot และ packet ที่จำเป็นสำหรับ email sever ด้วยคำสั่ง
 
1. ติดตั้ง MySQL, Postfix , Dovecot และ packet ที่จำเป็นสำหรับ email sever ด้วยคำสั่ง
 
  '''apt -y install postfix postfix-mysql dovecot-core dovecot-mysql dovecot-imapd dovecot-pop3d dovecot-lmtpd  mysql-server'''
 
  '''apt -y install postfix postfix-mysql dovecot-core dovecot-mysql dovecot-imapd dovecot-pop3d dovecot-lmtpd  mysql-server'''
 +
 +
2. ตัวเลือกระหว่างติดตั้ง Postfix ให้เลือก Internet Site พิมพ์ 2 และ พิมพ์ชื่อโดเมนเนม mailthai99.in.th
 +
General mail configuration type: <span style="color:green">2</span>
 +
System mail name: mailthai<span style="color:green">XX</span>.in.th
  
 
<!--T:43-->
 
<!--T:43-->
2. สั่ง start service ของ MySQL, Postfix, Dovecot ด้วยคำสั่ง
+
3. สั่ง start service ของ MySQL, Postfix, Dovecot ด้วยคำสั่ง
 
  '''systemctl start mysql && systemctl start postfix && systemctl start dovecot'''
 
  '''systemctl start mysql && systemctl start postfix && systemctl start dovecot'''
  
 
<!--T:44-->
 
<!--T:44-->
3. ดูสถานะการทำงานของ MySQL, Postfix, Dovecot
+
4. ดูสถานะการทำงานของ MySQL, Postfix, Dovecot
 
  '''systemctl status mysql'''
 
  '''systemctl status mysql'''
 
  '''systemctl status postfix'''
 
  '''systemctl status postfix'''
แถว 246: แถว 193:
 
   
 
   
 
  [mysqld]
 
  [mysqld]
  <span style='color:green'>character-set-server = utf8</span>
+
  <span style='color:green'>character-set-server = utf8mb4</span>
  <span style='color:green'>collation-server = utf8_general_ci</span>
+
  <span style='color:green'>collation-server = utf8mb4_0900_ai_ci</span>
 
  <span style='color:green'>skip-character-set-client-handshake</span>
 
  <span style='color:green'>skip-character-set-client-handshake</span>
<span style='color:green'>bind-address=127.0.0.1</span>
 
 
  #   
 
  #   
 
  # * Basic Settings
 
  # * Basic Settings
แถว 255: แถว 201:
 
  user            = mysql
 
  user            = mysql
  
<!--T:47-->
 
 
=== สั่ง restart MySQL ===  
 
=== สั่ง restart MySQL ===  
 
  '''systemctl restart mysql'''
 
  '''systemctl restart mysql'''
 
<!--T:48-->
 
=== ตั้งค่าความปลอดภัยการเข้าใช้งาน MySQL โดยจะมีการตั้งค่า password ของ user root เพื่อ login เข้าใช้งาน (* กำหนดเพียง password ใหม่ ในส่วนอื่นๆ ให้ enter ผ่านได้เลย) ===
 
'''mysql_secure_installation'''
 
''ตัวอย่าง ''
 
Please set the password for root here.
 
 
New password:                    <span style='color:green'># rootpass</span>
 
 
Re-enter new password:          <span style='color:green'># rootpass</span>
 
  
 
<!--T:49-->
 
<!--T:49-->
 
===  Login เข้าใช้งาน MySQL โดยใช้ password ของ user root ที่ได้ตั้งค่าไว้ ===
 
===  Login เข้าใช้งาน MySQL โดยใช้ password ของ user root ที่ได้ตั้งค่าไว้ ===
  '''mysql -u root -p'''
+
  '''mysql -u root -p           <span style='color:green'># enter</span>'''
''รหัสผ่าน <span style='color:green'>rootpass</span>''
 
  
<!--T:50-->
 
 
=== สร้าง Database เพื่อใช้เก็บข้อมูลของการใช้งาน Email Server ===
 
=== สร้าง Database เพื่อใช้เก็บข้อมูลของการใช้งาน Email Server ===
 
*สร้าง Database  
 
*สร้าง Database  
  '''CREATE DATABASE eaimail;'''
+
  '''CREATE DATABASE eaimail CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;'''
 
''ตัวอย่าง''
 
''ตัวอย่าง''
 
  Query OK, 1 row affected (0.02 sec)
 
  Query OK, 1 row affected (0.02 sec)
แถว 313: แถว 246:
 
  '''INSERT INTO domains (domain) VALUES ('mailthai<span style='color:green'>XX</span>.in.th');'''
 
  '''INSERT INTO domains (domain) VALUES ('mailthai<span style='color:green'>XX</span>.in.th');'''
 
  '''INSERT INTO domains (domain) VALUES ('จดหมาย<span style='color:green'>XX</span>.ไทย');'''
 
  '''INSERT INTO domains (domain) VALUES ('จดหมาย<span style='color:green'>XX</span>.ไทย');'''
 +
'''INSERT INTO domains (domain) VALUES ('xn--<span style='color:green'>XX</span>-6qi0c9cg5dxc.xn--o3cw4h');'''
 +
 
  '''INSERT INTO users (email, password) VALUES ('thai@mailthai<span style='color:green'>XX</span>.in.th', '$6$7GQtdsDwSjzB7EAm$0.W6ZBcGEylrQMHKv1j7PZd/6EPoXAYClNhxxs3V2mG/NrHKDsycOTWwETniwI9O/OUeQkqBT5KPfNkDUb8hk/');'''
 
  '''INSERT INTO users (email, password) VALUES ('thai@mailthai<span style='color:green'>XX</span>.in.th', '$6$7GQtdsDwSjzB7EAm$0.W6ZBcGEylrQMHKv1j7PZd/6EPoXAYClNhxxs3V2mG/NrHKDsycOTWwETniwI9O/OUeQkqBT5KPfNkDUb8hk/');'''
 
  '''INSERT INTO users (email, password) VALUES ('ไทย@จดหมาย<span style='color:green'>XX</span>.ไทย', '$6$7GQtdsDwSjzB7EAm$0.W6ZBcGEylrQMHKv1j7PZd/6EPoXAYClNhxxs3V2mG/NrHKDsycOTWwETniwI9O/OUeQkqBT5KPfNkDUb8hk/');'''
 
  '''INSERT INTO users (email, password) VALUES ('ไทย@จดหมาย<span style='color:green'>XX</span>.ไทย', '$6$7GQtdsDwSjzB7EAm$0.W6ZBcGEylrQMHKv1j7PZd/6EPoXAYClNhxxs3V2mG/NrHKDsycOTWwETniwI9O/OUeQkqBT5KPfNkDUb8hk/');'''
 +
'''INSERT INTO users (email, password) VALUES ('ไทย@xn--<span style='color:green'>XX</span>-6qi0c9cg5dxc.xn--o3cw4h', '$6$7GQtdsDwSjzB7EAm$0.W6ZBcGEylrQMHKv1j7PZd/6EPoXAYClNhxxs3V2mG/NrHKDsycOTWwETniwI9O/OUeQkqBT5KPfNkDUb8hk/');'''
 +
 
''ตัวอย่าง เช่น mailthai99.in.th, จดหมาย99.ไทย, thai@mailthai99.in.th, ไทย@จดหมาย99.ไทย''  
 
''ตัวอย่าง เช่น mailthai99.in.th, จดหมาย99.ไทย, thai@mailthai99.in.th, ไทย@จดหมาย99.ไทย''  
  
 
''หมายเหตุ สร้างรหัสผ่านด้วยคำสั่ง doveadm pw -s SHA512-CRYPT ''
 
''หมายเหตุ สร้างรหัสผ่านด้วยคำสั่ง doveadm pw -s SHA512-CRYPT ''
  
<!--T:55-->
 
 
=== <span style='color:green'> กำหนด Email ที่เข้ามายัง Email Account ภาษาไทย ให้ forward เข้า Email-Account ภาษาอังกฤษ เนื่องจากระบบไม่สามารถสร้าง mailbox เป็น ภาษาไทยได้</span> ===
 
=== <span style='color:green'> กำหนด Email ที่เข้ามายัง Email Account ภาษาไทย ให้ forward เข้า Email-Account ภาษาอังกฤษ เนื่องจากระบบไม่สามารถสร้าง mailbox เป็น ภาษาไทยได้</span> ===
 
  '''INSERT INTO forwardings (source,destination) VALUES ('ไทย@จดหมาย<span style='color:green'>XX</span>.ไทย','thai@mailthai<span style='color:green'>XX</span>.in.th');'''
 
  '''INSERT INTO forwardings (source,destination) VALUES ('ไทย@จดหมาย<span style='color:green'>XX</span>.ไทย','thai@mailthai<span style='color:green'>XX</span>.in.th');'''
 +
'''INSERT INTO forwardings (source,destination) VALUES ('ไทย@xn--<span style='color:green'>XX</span>-6qi0c9cg5dxc.xn--o3cw4h','thai@mailthai<span style='color:green'>XX</span>.in.th');'''
 +
 
  '''quit;'''
 
  '''quit;'''
  
แถว 391: แถว 329:
 
  '''postconf "myhostname=mail.mailthai<span style='color:green;'>XX</span>.in.th" && \
 
  '''postconf "myhostname=mail.mailthai<span style='color:green;'>XX</span>.in.th" && \
 
  '''postconf "mydomain=mailthai<span style='color:green;'>XX</span>.in.th" && \  
 
  '''postconf "mydomain=mailthai<span style='color:green;'>XX</span>.in.th" && \  
'''postconf "virtual_alias_domains=จดหมาย<span style='color:green;'>XX</span>.ไทย" && \
 
 
  '''postconf "smtpd_tls_cert_file=/etc/ssl/private/mailthai<span style='color:green;'>XX</span>.crt" && \
 
  '''postconf "smtpd_tls_cert_file=/etc/ssl/private/mailthai<span style='color:green;'>XX</span>.crt" && \
 
  '''postconf "smtpd_tls_key_file=/etc/ssl/private/mailthai<span style='color:green;'>XX</span>.key" && \
 
  '''postconf "smtpd_tls_key_file=/etc/ssl/private/mailthai<span style='color:green;'>XX</span>.key" && \
แถว 397: แถว 334:
 
  '''postconf "inet_interfaces=all" && \
 
  '''postconf "inet_interfaces=all" && \
 
  '''postconf "inet_protocols=ipv4" && \
 
  '''postconf "inet_protocols=ipv4" && \
  '''postconf "mydestination=localhost, localhost.localdomain" && \
+
  '''postconf "mydestination=mail.\$mydomain" && \
  '''postconf "mynetworks=127.0.0.1" && \
+
  '''postconf "mynetworks=100.64.10.0/24 127.0.0.0/8" && \
'''postconf "readme_directory=no" && \
 
'''postconf "shlib_directory=no" && \
 
 
  '''postconf "smtpd_sasl_auth_enable=yes" && \
 
  '''postconf "smtpd_sasl_auth_enable=yes" && \
 
  '''postconf "smtpd_sasl_type=dovecot" && \
 
  '''postconf "smtpd_sasl_type=dovecot" && \
แถว 411: แถว 346:
 
  '''postconf "smtpd_tls_loglevel=1" && \
 
  '''postconf "smtpd_tls_loglevel=1" && \
 
  '''postconf "virtual_mailbox_base=/home/vmail" && \
 
  '''postconf "virtual_mailbox_base=/home/vmail" && \
  '''postconf "virtual_mailbox_maps=proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf" && \
+
  '''postconf "virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual_mailboxes.cf" && \
  '''postconf "virtual_mailbox_domains=proxy:mysql:/etc/postfix/mysql-virtual_domains.cf" && \
+
  '''postconf "virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual_domains.cf" && \
  '''postconf "virtual_alias_maps=proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf" && \
+
  '''postconf "virtual_alias_maps=mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf" && \
 
  '''postconf "virtual_uid_maps=static:5000" && \
 
  '''postconf "virtual_uid_maps=static:5000" && \
 
  '''postconf "virtual_gid_maps=static:5000" && \
 
  '''postconf "virtual_gid_maps=static:5000" && \
แถว 419: แถว 354:
 
  '''postconf "proxy_read_maps=\$local_recipient_maps \$mydestination \$virtual_alias_maps \$virtual_alias_domains \$virtual_mailbox_maps \$virtual_mailbox_domains \$relay_recipient_maps \$relay_domains \$canonical_maps \$sender_canonical_maps \$recipient_canonical_maps \$relocated_maps \$transport_maps \$mynetworks" && \
 
  '''postconf "proxy_read_maps=\$local_recipient_maps \$mydestination \$virtual_alias_maps \$virtual_alias_domains \$virtual_mailbox_maps \$virtual_mailbox_domains \$relay_recipient_maps \$relay_domains \$canonical_maps \$sender_canonical_maps \$recipient_canonical_maps \$relocated_maps \$transport_maps \$mynetworks" && \
 
  '''postconf "smtputf8_enable=yes" && \
 
  '''postconf "smtputf8_enable=yes" && \
  '''postconf "newaliases_path=null" && \
+
  '''postconf "maillog_file=/var/log/mail.log"
'''postconf "mailq_path=null" && \
 
'''postconf "setgid_group=postdrop" && \
 
'''postconf "html_directory=null" && \
 
'''postconf "manpage_directory = null" &&  \
 
'''postconf "sample_directory = null" && \
 
'''postconf "sendmail_path=null"
 
  
 
=== ตรวจสอบการ config postfix ด้วยคำสั่ง ===
 
=== ตรวจสอบการ config postfix ด้วยคำสั่ง ===
แถว 432: แถว 361:
 
<!--T:67-->
 
<!--T:67-->
 
* ตัวอย่างไฟล์
 
* ตัวอย่างไฟล์
 +
alias_database = hash:/etc/aliases
 +
alias_maps = hash:/etc/aliases
 +
append_dot_mydomain = no
 +
biff = no
 
  broken_sasl_auth_clients = yes
 
  broken_sasl_auth_clients = yes
command_directory = /usr/sbin
+
  compatibility_level = 3.6
  compatibility_level = 2
 
daemon_directory = /usr/lib/postfix/sbin
 
data_directory = /var/lib/postfix
 
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
 
html_directory = null
 
 
  inet_interfaces = all
 
  inet_interfaces = all
  inet_protocols = ipv4  
+
  inet_protocols = ipv4
  mailq_path = null
+
  mailbox_size_limit = 0
manpage_directory = null
 
 
  mydestination = localhost, localhost.localdomain
 
  mydestination = localhost, localhost.localdomain
  mydomain = <span style='color:green;'>mailthai99.in.th</span>
+
  mydomain = mailthai99.in.th  
  myhostname = <span style='color:green;'>mail.mailthai99.in.th</span>
+
  myhostname = mail.mailthai99.in.th  
 
  mynetworks = 127.0.0.1
 
  mynetworks = 127.0.0.1
  myorigin = $mydomain
+
  myorigin = $mydomain  
newaliases_path = null
+
  proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps
  proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks
+
$relocated_maps $transport_maps $mynetworks
 
  readme_directory = no
 
  readme_directory = no
  sample_directory = null
+
  recipient_delimiter = +
  sendmail_path = null
+
  relayhost =
  setgid_group = postdrop
+
  smtp_tls_CApath = /etc/ssl/certs
  shlib_directory = no
+
  smtp_tls_security_level = may
 +
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
 
  smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
 
  smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
 
  smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
 
  smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
 +
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
 
  smtpd_sasl_auth_enable = yes
 
  smtpd_sasl_auth_enable = yes
 
  smtpd_sasl_authenticated_header = yes
 
  smtpd_sasl_authenticated_header = yes
แถว 462: แถว 391:
 
  smtpd_sasl_type = dovecot
 
  smtpd_sasl_type = dovecot
 
  smtpd_tls_auth_only = yes
 
  smtpd_tls_auth_only = yes
  smtpd_tls_cert_file = <span style='color:green;'>/etc/ssl/private/mailthai99.crt</span>
+
  smtpd_tls_cert_file = /etc/ssl/private/mailthai99.crt
  smtpd_tls_key_file = <span style='color:green;'>/etc/ssl/private/mailthai99.key</span>
+
  smtpd_tls_key_file = /etc/ssl/private/mailthai99.key
 
  smtpd_tls_loglevel = 1
 
  smtpd_tls_loglevel = 1
 +
smtpd_tls_security_level = may
 
  smtpd_use_tls = yes
 
  smtpd_use_tls = yes
 
  smtputf8_enable = yes
 
  smtputf8_enable = yes
unknown_local_recipient_reject_code = 550
+
  virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf
virtual_alias_domains = <span style='color:green;'>จดหมาย99.ไทย</span>
 
  virtual_alias_maps = <span style='color:green;'>proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf</span>
 
 
  virtual_gid_maps = static:5000
 
  virtual_gid_maps = static:5000
 
  virtual_mailbox_base = /home/vmail
 
  virtual_mailbox_base = /home/vmail
  virtual_mailbox_domains = <span style='color:green;'>proxy:mysql:/etc/postfix/mysql-virtual_domains.cf</span>
+
  virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
  virtual_mailbox_maps = <span style='color:green;'>proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf</span>
+
  virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
 
  virtual_transport = dovecot
 
  virtual_transport = dovecot
 
  virtual_uid_maps = static:5000
 
  virtual_uid_maps = static:5000
แถว 485: แถว 413:
 
  '''postconf -P "smtps/inet/smtpd_relay_restrictions=permit_sasl_authenticated,reject" && \
 
  '''postconf -P "smtps/inet/smtpd_relay_restrictions=permit_sasl_authenticated,reject" && \
 
  '''postconf -P "smtps/inet/milter_macro_daemon_name=ORIGINATING" && \
 
  '''postconf -P "smtps/inet/milter_macro_daemon_name=ORIGINATING" && \
  '''postconf -vM dovecot/unix="dovecot  unix  -      n      n      -      -      pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f \${sender} -d \${recipient}"
+
  '''postconf -M dovecot/unix="dovecot  unix  -      n      n      -      -      pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f \${sender} -d \${recipient}"
  
 
=== ตรวจสอบการ config postfix ด้วยคำสั่ง ===
 
=== ตรวจสอบการ config postfix ด้วยคำสั่ง ===
แถว 512: แถว 440:
 
== ตั้งค่า dovecot == <!--T:71-->
 
== ตั้งค่า dovecot == <!--T:71-->
 
=== <span style='color:green'>สร้างไฟล์เชื่อมต่อระหว่าง dovecot และ MySQL</span> ===
 
=== <span style='color:green'>สร้างไฟล์เชื่อมต่อระหว่าง dovecot และ MySQL</span> ===
 +
'''cd /etc/dovecot/'''
 
* สร้าง script เพื่อให้ dovecot ใช้งานกับ SQL ที่เราได้กำหนดก่อนหน้านี้
 
* สร้าง script เพื่อให้ dovecot ใช้งานกับ SQL ที่เราได้กำหนดก่อนหน้านี้
 
  '''nano /etc/dovecot/dovecot-sql.conf.ext'''
 
  '''nano /etc/dovecot/dovecot-sql.conf.ext'''
แถว 601: แถว 530:
  
 
== ทดสอบการทำงานของ Email Server == <!--T:78-->
 
== ทดสอบการทำงานของ Email Server == <!--T:78-->
 +
=== ติดตั้งโปรแกรม telnet เพื่อทดสอบอีเมลเซิร์ฟเวอร์ ===
 +
'''apt -y install telnet'''
 +
 
=== ทดสอบ imap ด้วยคำสั่ง telnet ===
 
=== ทดสอบ imap ด้วยคำสั่ง telnet ===
 
  ''' telnet localhost imap'''
 
  ''' telnet localhost imap'''
แถว 689: แถว 621:
  
 
<!--T:96-->
 
<!--T:96-->
 +
* config phpmyadmin
 +
'''Configure database for phpmyadmin with dbconfig-common? [yes/no] yes'''
 +
'''MySQL application password for phpmyadmin:  # enter'''
 +
'''Web server to reconfigure automatically: 1'''
 +
 +
 
* ใช้คำสั่ง start service apache และ php  
 
* ใช้คำสั่ง start service apache และ php  
 
  '''systemctl start apache2'''
 
  '''systemctl start apache2'''
แถว 698: แถว 636:
 
=== ตั้งค่า php (เราจะตั้งค่าเฉพาะส่วนที่จำเป็นต่อการใช้งาน roundcube) === <!--T:98-->
 
=== ตั้งค่า php (เราจะตั้งค่าเฉพาะส่วนที่จำเป็นต่อการใช้งาน roundcube) === <!--T:98-->
 
* ตั้งค่า timezone
 
* ตั้งค่า timezone
  '''nano /etc/php/7.4/apache2/php.ini'''
+
  '''nano /etc/php/8.1/apache2/php.ini'''
  
 
<!--T:99-->
 
<!--T:99-->
แถว 712: แถว 650:
  
 
<!--T:101-->  
 
<!--T:101-->  
  CREATE DATABASE roundcubemail CHARACTER SET utf8 COLLATE utf8_general_ci;
+
  CREATE DATABASE roundcubemail CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
 
  CREATE USER rcmail@localhost IDENTIFIED BY 'rcmailpass' ;
 
  CREATE USER rcmail@localhost IDENTIFIED BY 'rcmailpass' ;
 
  GRANT ALL PRIVILEGES ON roundcubemail.* TO rcmail@localhost;
 
  GRANT ALL PRIVILEGES ON roundcubemail.* TO rcmail@localhost;
แถว 720: แถว 658:
 
=== ตั้งค่า roundcube === <!--T:102-->
 
=== ตั้งค่า roundcube === <!--T:102-->
 
  '''cd /var/www/html/
 
  '''cd /var/www/html/
  '''wget https://github.com/roundcube/roundcubemail/releases/download/1.4.4/roundcubemail-1.4.4-complete.tar.gz
+
  '''wget https://github.com/roundcube/roundcubemail/releases/download/1.6.5/roundcubemail-1.6.5-complete.tar.gz
  '''tar zvfx /var/www/html/roundcubemail-1.4.4-complete.tar.gz  
+
  '''tar zvfx /var/www/html/roundcubemail-1.6.5-complete.tar.gz  
  '''mv /var/www/html/roundcubemail-1.4.4 /var/www/html/roundcubemail
+
  '''mv /var/www/html/roundcubemail-1.6.5 /var/www/html/roundcubemail
  '''cp /var/www/html/roundcubemail/config/config.inc.php.sample /var/www/html/roundcubemail/config/config.inc.php
+
  '''ll /var/www/html/roundcubemail/config/
 
  '''chown -R www-data:www-data /var/www/html/roundcubemail
 
  '''chown -R www-data:www-data /var/www/html/roundcubemail
  
 
=== สร้าง virtualhost === <!--T:103-->
 
=== สร้าง virtualhost === <!--T:103-->
  '''rm /etc/apache2/sites-enabled/000-default.conf'''
+
  '''cd /etc/apache2/sites-available/'''
 
  '''nano /etc/apache2/sites-available/rcmail.conf'''
 
  '''nano /etc/apache2/sites-available/rcmail.conf'''
  
แถว 739: แถว 677:
 
  AllowOverride All
 
  AllowOverride All
 
  </Directory>
 
  </Directory>
  ErrorLog /var/log/apache2/mail.mailthai01.th-error.log
+
  ErrorLog /var/log/apache2/mailthai99-in-th-th-error.log
  CustomLog /var/log/apache2/mail.mailthai01.th-access.log combined
+
  CustomLog /var/log/apache2/mailthai99-in-th-th-access.log combined
 
  </VirtualHost>
 
  </VirtualHost>
  
 
<!--T:105-->
 
<!--T:105-->
  '''ln -s /etc/apache2/sites-available/rcmail.conf /etc/apache2/sites-enabled/rcmail.conf'''
+
  '''a2ensite rcmail.conf'''
 
  '''systemctl restart apache2'''
 
  '''systemctl restart apache2'''
  
แถว 755: แถว 693:
  
 
=== <span style='color:green'>เข้าหน้า config roundcube</span> === <!--T:106-->
 
=== <span style='color:green'>เข้าหน้า config roundcube</span> === <!--T:106-->
 +
*เข้าหน้าเว็บ config
 +
'''https://eai-lab.bknix.co.th/mailXX/installer/'''
 +
 +
=== <span style='color:green'>ตั้งค่าเชื่อมต่อ database</span>  === <!--T:107-->
 +
host = localhost
 +
dbname = roundcubemail
 +
user = rcmail
 +
password = rcmailpass
 +
db_prefix = rc_
 +
 +
=== <span style='color:green'>ตั้งค่า IMAP/SMTP</span>  === <!--T:109-->
 +
* ตั้งค่า IMAP
 +
'''ssl://mail.mailthaiXX.in.th:993'''
 +
 +
<!--T:110-->
 +
* ตั้งค่า SMTP
 +
'''ssl://mail.mailthaiXX.in.th:465'''
 +
''หมายเหตุ user: thai@mailthaiXX.in.th และ ไทย@จดหมายXX.ไทย, pass: thaipass
 +
 +
 
*แก้ไขไฟล์ config.inc.php
 
*แก้ไขไฟล์ config.inc.php
 
  '''nano /var/www/html/roundcubemail/config/config.inc.php'''
 
  '''nano /var/www/html/roundcubemail/config/config.inc.php'''
 
''ตัวอย่าง''
 
''ตัวอย่าง''
  $config['enable_installer'] = true;
+
  $config['request_path'] = 'https://eai-lab.bknix.co.th/mailXX/';
  
 
*การใช้ ssl แบบ self-sign อาจจะทำให้ roundcube ไม่สามารถเชื่อมต่อ mail server ได้ แก้ปัญหาโดยการ config เพิ่มเติม ดังนี้
 
*การใช้ ssl แบบ self-sign อาจจะทำให้ roundcube ไม่สามารถเชื่อมต่อ mail server ได้ แก้ปัญหาโดยการ config เพิ่มเติม ดังนี้
แถว 764: แถว 722:
  
 
''ตัวอย่าง''
 
''ตัวอย่าง''
 +
$config['enable_installer'] = true;
 
  $config['imap_conn_options'] = array(
 
  $config['imap_conn_options'] = array(
 
   'ssl'        => array(
 
   'ssl'        => array(
แถว 777: แถว 736:
 
   ),
 
   ),
 
  );
 
  );
 
*เข้าหน้าเว็บ config
 
'''https://eai-lab.bknix.co.th/mailXX/installer/'''
 
 
=== <span style='color:green'>ตั้งค่าเชื่อมต่อ database</span>  === <!--T:107-->
 
host = localhost
 
dbname =roundcubemail
 
user = rcmail
 
password = rcmailpass
 
db_prefix = rc_
 
 
=== <span style='color:green'>ตั้งค่า IMAP/SMTP</span>  === <!--T:109-->
 
* ตั้งค่า IMAP
 
'''ssl://mail.mailthaiXX.in.th'''
 
'''993'''
 
 
<!--T:110-->
 
* ตั้งค่า SMTP
 
'''ssl://mail.mailthaiXX.in.th'''
 
'''465'''
 
''หมายเหตุ user: thai@mailthaiXX.in.th และ ไทย@จดหมายXX.ไทย, pass: thaipass
 
  
 
</translate>
 
</translate>
  
 
[[Category: EAI]]
 
[[Category: EAI]]

รุ่นแก้ไขปัจจุบันเมื่อ 23:21, 22 เมษายน 2567

เนื้อหา

EAI Email Server

คู่มือนี้ได้จัดทำขึ้นมาเพื่อทดสอบและเป็นแนวทางการติดตั้ง Email Server ให้สามารถรับส่ง email address ภาษาไทย หรือ Email Address Internationalization (EAI) โดยใช้ Opensource Software เพื่อหาวิธีการที่สามารถใช้งานได้ และสามารถนำไปพัฒนาต่อยอดได้

Software ที่นำมาทดสอบ

  1. Ubuntu 22.04.3 LTS [workshop virtualbox image ]
  2. Postfix 3.6.4
  3. Dovecot 2.3.16
  4. MySQL 8.0.30
  5. Roundcube 1.6.5 [ดาวน์โหลด] [tar]

เอกสารที่เกี่ยวข้อง

  1. Workshop Slide [ดาวน์โหลด]
  2. แบบสอบถาม [แบบสอบถาม]

แบบสอบถาม.jpeg

EAI Workshop Authentication

user: eai
pass: eaiws@2022
  • โดเมนที่ใช้เป็นตัวอย่างใน workshop
English : mailthai99.in.th
ภาษาไทย : จดหมาย99.ไทย
(Punycode) : xn--15-6qi0c9cg5dxc.xn--o3cw4h
  • Ubuntu Server:
User: user
Pass: userpass
  • Passphase for SSL Key
Key: mailthai.key, mailthai.crt
  • MySQL
DB: eaimail
User: dbuser
Pass: dbuserpass

DB: roundcubemail
User: rcmail
Pass: rcmailpass
  • Roundcube
User: thai@mailthaiXX.in.th
Pass: thaipass
User: ไทย@จดหมายXX.ไทย
Pass: thaipass

การติดตั้ง EAI Email Server

ตั้งค่า hostname

เข้าใช้งานเครื่องด้วย สิทธิ์ root

sudo su

รหัสผ่าน : userpass

อัพเดตแพคเกจของ mail serverให้เป็นเวอร์ชั่นล่าสุด ด้วยคำสั่ง

apt update && apt -y upgrade

กำหนดชื่อ hostname และตรวจสอบด้วยคำสั่ง

  • กำหนดชื่อ hostname
hostnamectl set-hostname mail.mailthaiXX.in.th 

ตัวอย่าง เช่น mail.mailthai99.in.th

  • ตรวจสอบ hostname
hostnamectl

ตัวอย่าง

Static hostname: mail.mailthai99.in.th

เพิ่มค่า hostname ชื่อเดียวกับชื่อที่กำหนดข้างต้นในไฟล์ hosts

nano /etc/hosts

ตัวอย่าง เช่น mail.mailthai99.in.th

ตัวอย่างไฟล์ hosts

100.64.10.99   	localhost mail.mailthai99.in.th

กด crtl+X และกด y เพื่อ save และออกจาก nano

ตั้งค่าเวลาของ Mail Server และตรวจสอบ

  • ตั้งค่าเวลาของ Mail Server
timedatectl set-timezone "Asia/Bangkok" 
  • ตรวจสอบเวลาของ Mail Server
timedatectl status

ตัวอย่าง

Local time: Fri 2022-01-14 12:06:03 +07
Universal time: Fri 2022-01-14 05:06:03 UTC
RTC time: Fri 2022-01-14 05:06:03    
Time zone: Asia/Bangkok (+07, +0700)
System clock synchronized: yes                        
NTP service: active                     
RTC in local TZ: no

ตั้งค่า firewall

1. เปิด firewall service และตรวจสอบสถานะ ด้วยคำสั่ง

  • ติดตั้งโปรแกรม ufw
apt -y install ufw
  • เปิด firewall service
ufw enable

ตัวอย่าง

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y # ให้ตอบ y
Firewall is active and enabled on system startup

2. เปิด firewall services ของ email server

ufw allow ssh
ufw allow http
ufw allow https
ufw allow smtp
ufw allow smtps
ufw allow imap
ufw allow imaps

ตัวอย่าง

Rule added
Rule added (v6)

3. ตรวจสอบ firewall services ที่เปิดอยู่

ufw status

ตัวอย่าง

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
25/tcp                     ALLOW       Anywhere                  
465/tcp                    ALLOW       Anywhere                  
143/tcp                    ALLOW       Anywhere                  
993/tcp                    ALLOW       Anywhere                           
22/tcp (v6)                ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             
25/tcp (v6)                ALLOW       Anywhere (v6)             
465/tcp (v6)               ALLOW       Anywhere (v6)             
143/tcp (v6)               ALLOW       Anywhere (v6)             
993/tcp (v6)               ALLOW       Anywhere (v6)

สร้าง SSL Cert

  • เป็นขั้นตอนการสร้าง SSL cert/key เตรียมไว้ใช้งานกับ postfix และ dovecot
  • ในเครื่อง workshop ได้เตรียม cert mailthai.crt, mailthai.key ไว้แล้ว

1. สร้าง private key

cd /etc/ssl/private
openssl req -new -x509 -days 365 -nodes -newkey rsa:2048 -keyout mailthaiXX.key -out mailthaiXX.crt -subj "/C=TH/ST=Bangkok/L=Dusit/O=EAI/OU=IT/CN=mail.mailthaiXX.in.th" 


2. ตรวจสอบ key ที่สร้างขึ้น

ls

ตัวอย่าง

mailthai99.crt  mailthai99.key

ติดตั้ง MySQL, Postfix, Dovecot

1. ติดตั้ง MySQL, Postfix , Dovecot และ packet ที่จำเป็นสำหรับ email sever ด้วยคำสั่ง

apt -y install postfix postfix-mysql dovecot-core dovecot-mysql dovecot-imapd dovecot-pop3d dovecot-lmtpd  mysql-server

2. ตัวเลือกระหว่างติดตั้ง Postfix ให้เลือก Internet Site พิมพ์ 2 และ พิมพ์ชื่อโดเมนเนม mailthai99.in.th

General mail configuration type: 2 
System mail name: mailthaiXX.in.th 

3. สั่ง start service ของ MySQL, Postfix, Dovecot ด้วยคำสั่ง

systemctl start mysql && systemctl start postfix && systemctl start dovecot

4. ดูสถานะการทำงานของ MySQL, Postfix, Dovecot

systemctl status mysql
systemctl status postfix
systemctl status dovecot

ตัวอย่าง

Active: active (running) since Wed 2022-01-05 14:42:29 +07; 33min ago

ตั้งค่า MySQL

ตั้งค่า UTF8 ให้กับ mysql เพื่อให้รองรับภาษาไทย โดยเพิ่มคำสั่งด้านล่างลงในไฟล์ mysqld.cnf ใต้ [mysqld]

nano /etc/mysql/mysql.conf.d/mysqld.cnf

ตัวอย่าง ไฟล์ mysqld.cnf

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
skip-character-set-client-handshake
#  
# * Basic Settings
#
user            = mysql

สั่ง restart MySQL

systemctl restart mysql

Login เข้าใช้งาน MySQL โดยใช้ password ของ user root ที่ได้ตั้งค่าไว้

mysql -u root -p           # enter

สร้าง Database เพื่อใช้เก็บข้อมูลของการใช้งาน Email Server

  • สร้าง Database
CREATE DATABASE eaimail CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

ตัวอย่าง

Query OK, 1 row affected (0.02 sec)

*เลือกใช้งาน Database eaimail

USE eaimail;

ตัวอย่าง

Database changed

สร้าง user พร้อมกำหนดสิทธิ์การใช้งานให้กับ eaimail database ที่สร้างขึ้นมา

CREATE USER dbuser@localhost IDENTIFIED BY 'dbuserpass';
GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO dbuser@localhost;
FLUSH PRIVILEGES;

ตรวจสอบ user ที่สร้างขึ้นใหม่โดย

SHOW GRANTS FOR dbuser@localhost;

ตัวอย่าง

+----------------------------------------------------------------------------------------------------------------+
| Grants for dbuser@localhost                                                 			|
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `dbuser`@`localhost`                                  		|
| GRANT SELECT, INSERT, UPDATE, DELETE ON `eaimail`.* TO `dbuser`@`localhost` |
+----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

สร้างตารางใช้เก็บค่า domains, forwardings สำหรับ forward อีเมลภาษาไทยไปภาษาอังกฤษ, users เพื่อใช้สร้าง mailbox

CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain));
CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source));
CREATE TABLE users (email varchar(80) NOT NULL, password varchar(256) NOT NULL, PRIMARY KEY (email));

เพิ่มข้อมูล Domain และ Email Account ทั้งภาษาอังกฤษ และภาษาไทย เพื่อเริ่มใช้งาน

INSERT INTO domains (domain) VALUES ('mailthaiXX.in.th');
INSERT INTO domains (domain) VALUES ('จดหมายXX.ไทย');
INSERT INTO domains (domain) VALUES ('xn--XX-6qi0c9cg5dxc.xn--o3cw4h');
INSERT INTO users (email, password) VALUES ('thai@mailthaiXX.in.th', '$6$7GQtdsDwSjzB7EAm$0.W6ZBcGEylrQMHKv1j7PZd/6EPoXAYClNhxxs3V2mG/NrHKDsycOTWwETniwI9O/OUeQkqBT5KPfNkDUb8hk/');
INSERT INTO users (email, password) VALUES ('ไทย@จดหมายXX.ไทย', '$6$7GQtdsDwSjzB7EAm$0.W6ZBcGEylrQMHKv1j7PZd/6EPoXAYClNhxxs3V2mG/NrHKDsycOTWwETniwI9O/OUeQkqBT5KPfNkDUb8hk/');
INSERT INTO users (email, password) VALUES ('ไทย@xn--XX-6qi0c9cg5dxc.xn--o3cw4h', '$6$7GQtdsDwSjzB7EAm$0.W6ZBcGEylrQMHKv1j7PZd/6EPoXAYClNhxxs3V2mG/NrHKDsycOTWwETniwI9O/OUeQkqBT5KPfNkDUb8hk/');

ตัวอย่าง เช่น mailthai99.in.th, จดหมาย99.ไทย, thai@mailthai99.in.th, ไทย@จดหมาย99.ไทย

หมายเหตุ สร้างรหัสผ่านด้วยคำสั่ง doveadm pw -s SHA512-CRYPT

กำหนด Email ที่เข้ามายัง Email Account ภาษาไทย ให้ forward เข้า Email-Account ภาษาอังกฤษ เนื่องจากระบบไม่สามารถสร้าง mailbox เป็น ภาษาไทยได้

INSERT INTO forwardings (source,destination) VALUES ('ไทย@จดหมายXX.ไทย','thai@mailthaiXX.in.th');
INSERT INTO forwardings (source,destination) VALUES ('ไทย@xn--XX-6qi0c9cg5dxc.xn--o3cw4h','thai@mailthaiXX.in.th');
quit;

ตั้งค่า postfix

สร้างไฟล์เชื่อมต่อระหว่าง Postfix และ MySQL

cd /etc/postfix/
  • สร้างไฟล์ script เพื่อใช้สำหรับเรียกค่า domain จาก Database
nano /etc/postfix/mysql-virtual_domains.cf

ตัวอย่างไฟล์

user = dbuser
password = dbuserpass
dbname = eaimail
query = SELECT domain FROM domains WHERE domain='%s'
hosts = 127.0.0.1
  • สร้างไฟล์ script เพื่อใช้สำหรับ forward email
nano /etc/postfix/mysql-virtual_forwardings.cf

ตัวอย่างไฟล์

user = dbuser
password = dbuserpass
dbname = eaimail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
  • สร้างไฟล์ script เพื่อใช้สำหรับ สร้าง mailbox และใช้ login
nano /etc/postfix/mysql-virtual_mailboxes.cf

ตัวอย่างไฟล์

user = dbuser 
password = dbuserpass
dbname = eaimail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1
  • สร้างไฟล์ script เพื่อใช้สำหรับ ส่งต่อ email ทั้งหมด ไปยัง smtp server อื่น ซึ่งใช้ในกรณีที่ host เป็น IP Address
nano /etc/postfix/mysql-virtual_email2email.cf

ตัวอย่างไฟล์

user = dbuser
password = dbuserpass
dbname = eaimail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1
  • กำหนดสิทธิ์ให้กับ script ที่สร้างขึ้น
chmod 640 /etc/postfix/mysql-virtual_*.cf && chgrp postfix /etc/postfix/mysql-virtual_*.cf

ตัวอย่าง

-rw-r-----   1 root postfix   124 Jan  7 23:36 mysql-virtual_domains.cf
-rw-r-----   1 root postfix   120 Jan  7 23:39 mysql-virtual_email2email.cf
-rw-r-----   1 root postfix   133 Jan  7 23:37 mysql-virtual_forwardings.cf
-rw-r-----   1 root postfix   190 Jan  7 23:38 mysql-virtual_mailboxes.cf

สร้าง user vmail สำหรับอ่าน/เขียน mailbox

  • สร้าง group เพื่อใช้กับ mailbox
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

config การทำงานของ postfix ด้วยคำสั่ง postconf (คำสั่งนี้จะไปแก้ไขไฟล์ "/etc/postfix/main.cf")

postconf "myhostname=mail.mailthaiXX.in.th" && \
postconf "mydomain=mailthaiXX.in.th" && \ 
postconf "smtpd_tls_cert_file=/etc/ssl/private/mailthaiXX.crt" && \
postconf "smtpd_tls_key_file=/etc/ssl/private/mailthaiXX.key" && \
postconf "myorigin=\$mydomain" && \
postconf "inet_interfaces=all" && \
postconf "inet_protocols=ipv4" && \
postconf "mydestination=mail.\$mydomain" && \
postconf "mynetworks=100.64.10.0/24 127.0.0.0/8" && \
postconf "smtpd_sasl_auth_enable=yes" && \
postconf "smtpd_sasl_type=dovecot" && \
postconf "smtpd_sasl_path=private/auth" && \
postconf "smtpd_sasl_authenticated_header=yes" && \
postconf "broken_sasl_auth_clients=yes" && \
postconf "smtpd_use_tls=yes" && \
postconf "smtpd_recipient_restrictions=permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination" && \
postconf "smtpd_tls_auth_only=yes" && \
postconf "smtpd_tls_loglevel=1" && \
postconf "virtual_mailbox_base=/home/vmail" && \
postconf "virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual_mailboxes.cf" && \
postconf "virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual_domains.cf" && \
postconf "virtual_alias_maps=mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf" && \
postconf "virtual_uid_maps=static:5000" && \
postconf "virtual_gid_maps=static:5000" && \
postconf "virtual_transport=dovecot" && \
postconf "proxy_read_maps=\$local_recipient_maps \$mydestination \$virtual_alias_maps \$virtual_alias_domains \$virtual_mailbox_maps \$virtual_mailbox_domains \$relay_recipient_maps \$relay_domains \$canonical_maps \$sender_canonical_maps \$recipient_canonical_maps \$relocated_maps \$transport_maps \$mynetworks" && \
postconf "smtputf8_enable=yes" && \
postconf "maillog_file=/var/log/mail.log"

ตรวจสอบการ config postfix ด้วยคำสั่ง

 postconf -n
  • ตัวอย่างไฟล์
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
compatibility_level = 3.6
inet_interfaces = all
inet_protocols = ipv4
mailbox_size_limit = 0 
mydestination = localhost, localhost.localdomain
mydomain = mailthai99.in.th 
myhostname = mail.mailthai99.in.th 
mynetworks = 127.0.0.1
myorigin = $mydomain 
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps  
$relocated_maps $transport_maps $mynetworks
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/ssl/private/mailthai99.crt
smtpd_tls_key_file = /etc/ssl/private/mailthai99.key
smtpd_tls_loglevel = 1
smtpd_tls_security_level = may
smtpd_use_tls = yes
smtputf8_enable = yes
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf
virtual_gid_maps = static:5000
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_transport = dovecot
virtual_uid_maps = static:5000

config การทำงานของ postfix ด้วยคำสั่ง postconf (คำสั่งนี้จะไปแก้ไขไฟล์ "/etc/postfix/master.cf")

postconf -M smtps/inet="smtps inet n - - - - smtpd" && \
postconf -P "smtps/inet/syslog_name=postfix/smtps" && \
postconf -P "smtps/inet/smtpd_tls_wrappermode=yes" && \
postconf -P "smtps/inet/smtpd_sasl_auth_enable=yes" && \
postconf -P "smtps/inet/smtpd_client_restrictions=permit_sasl_authenticated,reject" && \
postconf -P "smtps/inet/smtpd_relay_restrictions=permit_sasl_authenticated,reject" && \
postconf -P "smtps/inet/milter_macro_daemon_name=ORIGINATING" && \
postconf -M dovecot/unix="dovecot   unix  -       n       n       -       -       pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f \${sender} -d \${recipient}"

ตรวจสอบการ config postfix ด้วยคำสั่ง

postconf -M
  • ตัวอย่างไฟล์
smtps inet n - - - - smtpd
   -o syslog_name=postfix/smtps
   -o smtpd_tls_wrappermode=yes 
   -o smtpd_sasl_auth_enable=yes 
   -o smtpd_client_restrictions=permit_sasl_authenticated,reject 
   -o smtpd_relay_restrictions=permit_sasl_authenticated,reject 
   -o milter_macro_daemon_name=ORIGINATING
dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}

ตั้งค่า mysql postfix driver

nano /etc/postfix/dynamicmaps.cf

ตัวอย่าง

mysql   /usr/lib/postfix/postfix-mysql.so       dict_mysql_open

สั่ง restart postfix

systemctl restart postfix

ตั้งค่า dovecot

สร้างไฟล์เชื่อมต่อระหว่าง dovecot และ MySQL

cd /etc/dovecot/
  • สร้าง script เพื่อให้ dovecot ใช้งานกับ SQL ที่เราได้กำหนดก่อนหน้านี้
nano /etc/dovecot/dovecot-sql.conf.ext

ตัวอย่างไฟล์

driver = mysql
connect = host=127.0.0.1 dbname=eaimail user=dbuser password=dbuserpass
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM users WHERE email='%u';
  • กำหนดสิทธิ์อนุญาตให้ user ที่อยู่ใน dovecot group ใช้งาน
chmod 640 /etc/dovecot/dovecot-sql.conf.ext && chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext

ตัวอย่าง

-rw-r-----   1 root dovecot 6023 Jan  7 23:54 dovecot-sql.conf.ext

Backup ไฟล์ dovecot.conf เดิมไว้ก่อน

mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup

ตัวอย่าง

-rw-r--r--   1 root root    4401 Apr 12  2021 dovecot.conf-backup

สร้างไฟล์ "/etc/dovecot/dovecot.conf” และแก้ไขไฟล์ "/etc/dovecot/dovecot.conf" ด้วยการใส่คำสั่งตามด้านล่าง

nano /etc/dovecot/dovecot.conf

ตัวอย่าง

protocols = imap pop3 lmtp
log_timestamp = "%Y-%m-%d %H:%M:%S"
mail_location = maildir:/home/vmail/%d/%n/Maildir
ssl_cert = </etc/ssl/private/mailthaiXX.crt
ssl_key = </etc/ssl/private/mailthaiXX.key
ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL
auth_mechanisms = plain login
namespace {
	type = private
	separator = .
	prefix = INBOX.
	inbox = yes
}
service auth {
	unix_listener auth-master {
		mode = 0600
		user = vmail
	}
	unix_listener /var/spool/postfix/private/auth {
		mode = 0666
		user = postfix
		group = postfix
	}
	user = root
}
service auth-worker {
	user = root
}
protocol lda {
	log_path = /home/vmail/dovecot-deliver.log
	auth_socket_path = /var/run/dovecot/auth-master
	postmaster_address = postmaster@mailthaiXX.in.th
}
protocol pop3 {
	pop3_uidl_format = %08Xu%08Xv
	pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
passdb {
	driver = sql
	args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
	driver = static
	args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
}
service stats {
	unix_listener stats-reader {
		user =  vmail
		group = vmail
		mode = 0660
	}
	unix_listener stats-writer {
		user = vmail
		group = vmail
		mode = 0660
	}
}

สั่ง restart dovecot

systemctl restart dovecot

ทดสอบการทำงานของ Email Server

ติดตั้งโปรแกรม telnet เพื่อทดสอบอีเมลเซิร์ฟเวอร์

apt -y install telnet

ทดสอบ imap ด้วยคำสั่ง telnet

 telnet localhost imap

ตัวอย่าง

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot (Ubuntu) ready.

หมายเหตุ กด Ctrl+] และตามด้วย q เพื่อออก

ทดสอบ smtp ด้วยคำสั่ง telnet

telnet localhost smtp
ehlo localhost

ตัวอย่าง

250-mail.mailthai99.in.th
250-PIPELINING
250-SIZE 30720000
250-VRFY
250-ETRN
250-STARTTLS 
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8

หมายเหตุ กด Ctrl+] และตามด้วย q เพื่อออก

ทดสอบการส่ง email ด้วย telnet

telnet localhost smtp
ehlo localhost
MAIL FROM: thai@mailthaiXX.in.th
RCPT TO: thai@mailthai99.in.th
data
Subject: test mailthaiXX.in.th to mailthai99.in.th
test 
 . 			ใช้เครื่องหมาย “.” เพื่อจบข้อความและส่งข้อความ

หมายเหตุ กด Ctrl+] และตามด้วย q เพื่อออก

telnet localhost smtp
ehlo localhost
MAIL FROM: ไทย@จดหมายXX.ไทย SMTPUTF8
RCPT TO: ไทย@จดหมาย99.ไทย
data
Subject: test mailthaiXX.in.th to mailthai99.in.th
test 
 . 			ใช้เครื่องหมาย “.” เพื่อจบข้อความและส่งข้อความ

หมายเหตุ กด Ctrl+] และตามด้วย q เพื่อออก

ตรวจสอบ log ของการส่ง Email : /var/log/mail.log ซึ้งจะได้ผลตามด้านล่าง

Nov 13 15:19:07 mail postfix/pickup[31954]: E9AB020199E5: uid=0 from=<root>
Nov 13 15:19:07 mail postfix/cleanup[1938]: E9AB020199E5: message-id=<20171113081907.E9AB020199E5@mail.mailthai99.in.th>
Nov 13 15:19:07 mail postfix/qmgr[21141]: E9AB020199E5: from=<root@mailthai99.in.th>, size=434, nrcpt=1 (queue active)
Nov 13 15:19:08 mail postfix/pipe[1946]: E9AB020199E5: to=<thai@mailthai99.in.th>, relay=dovecot, delay=0.09, delays=0.04/0.01/0/0.03, dsn=2.0.0, status=sent (delivered via dovecot service)
Nov 13 15:19:08 mail postfix/qmgr[21141]: E9AB020199E5: removed

ตรวจสอบ log ของ dovecot : /home/vmail/dovecot-deliver.log ซึ่งจะได้ผลตามด้านล่าง

2017-11-13 15:19:08 lda(thai@mailthai99.in.th): Info: msgid=<20171113081907.E9AB020199E5@mail.eai.in.th>: saved mail to INBOX

ตรวจสอบ mailbox เมื่อมีการรับส่ง-ส่ง Email จะสร้างขึ้นโดย dovecot ซึ่งจะได้ผลตามตัวอย่าง

cd /home/vmail/mailthaiXX.in.th/Maildir
find

ตัวอย่างเช่น mailthai99.in.th"

.
./dovecot-uidlist
./cur
./new
./new/1285609582.P6115Q0M368794.li172-137
./dovecot.index
./dovecot.index.log
./tmp

ติดตั้ง roundcube webmail

ติดตั้ง apache php

  • ใช้คำสั่ง apt ติดตั้ง php, php library และ apache web server
apt -y install apache2 php php-imap php-imagick php-json php-xml php-mbstring php-pear php-intl php-ldap php-gd php-zip php-mysql php-curl php-bz2 php-gmp phpmyadmin
  • config phpmyadmin
Configure database for phpmyadmin with dbconfig-common? [yes/no] yes
MySQL application password for phpmyadmin:  # enter
Web server to reconfigure automatically: 1


  • ใช้คำสั่ง start service apache และ php
systemctl start apache2
  • ตรวจสอบสถานะการทำงานของ apache
systemctl status apache2

ตั้งค่า php (เราจะตั้งค่าเฉพาะส่วนที่จำเป็นต่อการใช้งาน roundcube)

  • ตั้งค่า timezone
nano /etc/php/8.1/apache2/php.ini

ตัวอย่าง [Date]

; Defines the default timezone used by the date functions
; http://php.net/date.timezone 
date.timezone = Asia/Bangkok

ตั้งค่า MySQL Database

  • สร้าง database roundcubemail โดยกำหนด username=rcmail, password=rcmailpass
mysql -u root -p


CREATE DATABASE roundcubemail CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
CREATE USER rcmail@localhost IDENTIFIED BY 'rcmailpass' ;
GRANT ALL PRIVILEGES ON roundcubemail.* TO rcmail@localhost;
FLUSH PRIVILEGES;
quit;

ตั้งค่า roundcube

cd /var/www/html/
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.5/roundcubemail-1.6.5-complete.tar.gz
tar zvfx /var/www/html/roundcubemail-1.6.5-complete.tar.gz 
mv /var/www/html/roundcubemail-1.6.5 /var/www/html/roundcubemail
ll /var/www/html/roundcubemail/config/
chown -R www-data:www-data /var/www/html/roundcubemail

สร้าง virtualhost

cd /etc/apache2/sites-available/
nano /etc/apache2/sites-available/rcmail.conf
 <VirtualHost *:80>
	ServerName mail.mailthai99.in.th
	ServerAdmin webmaster@mailtha99.in.th
	DocumentRoot /var/www/html/roundcubemail
	<Directory /var/www/html/roundcubemail>
		Options -Indexes +FollowSymLinks
		AllowOverride All
	</Directory>
	ErrorLog /var/log/apache2/mailthai99-in-th-th-error.log
	CustomLog /var/log/apache2/mailthai99-in-th-th-access.log combined
</VirtualHost>
a2ensite rcmail.conf
systemctl restart apache2

ทดสอบเข้าเว็บโซต์

https://eai-lab.bknix.co.th/mailXX/

ตัวอย่าง

DATABASE ERROR: CONNECTION FAILED!
Unable to connect to the database!
Please contact your server-administrator.

เข้าหน้า config roundcube

  • เข้าหน้าเว็บ config
https://eai-lab.bknix.co.th/mailXX/installer/

ตั้งค่าเชื่อมต่อ database

host = localhost
dbname = roundcubemail
user = rcmail
password = rcmailpass
db_prefix = rc_

ตั้งค่า IMAP/SMTP

  • ตั้งค่า IMAP
ssl://mail.mailthaiXX.in.th:993
  • ตั้งค่า SMTP
ssl://mail.mailthaiXX.in.th:465

หมายเหตุ user: thai@mailthaiXX.in.th และ ไทย@จดหมายXX.ไทย, pass: thaipass


  • แก้ไขไฟล์ config.inc.php
nano /var/www/html/roundcubemail/config/config.inc.php

ตัวอย่าง

$config['request_path'] = 'https://eai-lab.bknix.co.th/mailXX/';
  • การใช้ ssl แบบ self-sign อาจจะทำให้ roundcube ไม่สามารถเชื่อมต่อ mail server ได้ แก้ปัญหาโดยการ config เพิ่มเติม ดังนี้
nano /var/www/html/roundcubemail/config/defaults.inc.php

ตัวอย่าง

$config['enable_installer'] = true;
$config['imap_conn_options'] = array(
  'ssl'         => array(
     'verify_peer'      => false,
     'verify_peer_name' => false,
  ),
);
 
$config['smtp_conn_options'] = array(
  'ssl'         => array(
     'verify_peer'      => false,
     'verify_peer_name' => false,
  ),
);