ติดตั้ง postfix บน ubuntu 16.04 server

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 6-03-2560
ดูแลโดย WIBOON

  • เป็นการติดตั้ง mail service สำหรับรับส่งภายใน server เอง
  • ใช้ส่งอีเมลจาก service อื่น ๆ เช่น crontab เป็นต้น


1.ติดตั้ง postfix ด้วยคำสั่ง sudo apt-get install postfix
ระบบจะมีหน้าต่าง Postfix Configuration ขึ้นมา ให้กด TAB ไปเลือกแถบ <Ok>
จะได้อีกหน้าต่างให้เลื่อนไปเลือกแถบ No configuration แล้วกด TAB ไปเลือกแถบ <Ok>
เป็นอันว่าติดตั้งเสร็จ ค่อยมาปรับแต่งเพิ่มต่อไป

2.จัดการให้ postfix ทำงานแบบ local คือส่งอีเมลกันภายใน server นี้ ด้วยคำสั่ง
sudo dpkg-reconfigure postfix
ระบบจะมีหน้าต่าง Postfix Configuration ขึ้นมา ให้กด TAB ไปเลือกแถบ <Ok>
จะได้อีกหน้าต่างให้เลื่อนไปเลือกแถบ Local only แล้วกด TAB ไปเลือกแถบ <Ok>
ที่ช่อง System mail name : ให้ป้อนชื่อ server (เช่น localhost.mail.net เป็นต้น)
ที่ช่อง Root and postmaster mail recipient: ให้ข้ามไปเลย
ที่ช่อง Other destinations to accept mail for (blank for none): ให้ข้ามไปเลย
ที่คำถาม Force synchronous updates on mail queue? ให้เลือกตอบ NO
ที่ช่อง Local networks: ให้ข้ามไปเลย
ที่ช่อง Mailbox size limit (bytes): ให้ใส่เลข 0
ที่ช่อง Local address extension character: ปล่อยตามเดิมเป็นเครื่องหมาย +
ที่คำถาม Internet protocols to use: ให้เลือก all
ที่คำถาม Use procmail for local delivery? ให้ตอบ No

3.เสร็จแล้วพร้อมใช้งานได้เลย

4.ตัวอย่างข้อมูลในแฟ้ม /etc/postfix/main.cf สำหรับ local mail server ที่เพิ่งถูกสร้าง

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = ubuntu.DOMAIN
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost.DOMAIN, $myhostname, ubuntu, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = all
default_transport = error
relay_transport = error


5.หากต้องการปรับปรุงให้ local mail server สามารถส่งอีเมลออกได้ ให้ใช้คำสั่ง dpkg-reconfigure อีกครั้ง
sudo dpkg-reconfigure postfix
ระบบจะมีหน้าต่าง Postfix Configuration ขึ้นมา ให้กด TAB ไปเลือกแถบ <Ok>
จะได้อีกหน้าต่างให้เลื่อนไปเลือกแถบ Internet with smarthost แล้วกด TAB ไปเลือกแถบ <Ok>
ที่ช่อง System mail name : ให้ป้อนชื่อ server (เช่น localhost.mail.net เป็นต้น)
ที่ช่อง SMTP relay host (blank for none): ให้ป้อนชื่อ server ที่เป็น relay mail (เช่น other.mail.net เป็นต้น)
ส่วนคำถามอื่น ๆ ก็ให้ตอบเหมือนเดิม

ผลลัพธ์คือในแฟ้ม /etc/postfix/main.cf มีปรับปรุงค่าตัวแปรดังนี้คือ
default_transport = smtp
relay_transport = smtp
relayhost =

หากมีการระบุชื่อ SMTP relay host เพื่อจัดการ relay mail ไปให้ server อื่นส่งแทน
ในแฟ้ม /etc/postfix/main.cf จะมีการปรับปรุงค่าตัวแปรดังนี้คือ
relayhost = other.mail.net

6.เสร็จแล้วให้ postfix ทำงานใหม่ ด้วยคำสั่ง sudo /etc/init.d/postfix restart หรือ
sudo systemctl restart postfix.service

7.ทดสอบส่งอีเมลด้วยคำสั่ง sendmail
echo "Test" | sendmail อีเมลแอดเดรสผู้รับ
หรือ
หากได้ติดตั้ง mailutils ไว้ ก็สามารถทดสอบส่งอีเมลด้วยคำสั่ง mail
echo "Test" | mail -s "test" -r อีเมลแอดเดรสผู้ส่ง -t อีเมลแอดเดรสผู้รับ

8.(หากต้องการใช้งานเรื่อง aliases) ให้แก้ไขที่แฟ้ม /etc/aliases
เสร็จแล้วสั่งให้ postfix เรียนรู้ข้อมูลใหม่ด้วยคำสั่ง sudo newaliases

การตรวจสอบว่าอีเมลถูกส่งออกไปยัง SMTP Relay host
tail /var/log/syslog
จะเห็นบรรทัดที่มีข้อความ

Aug 18 13:23:45 ubuntu postfix/smtp[7829]: BD7E3C3CC5: to=<emailaddress>, relay=smtp.mail.net[192.168.XX.XX]:25, 
delay=0.18, delays=0.13/0.02/0.01/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as C1A492C015B)

การตรวจสอบว่าอีเมลถูกส่งไปเก็บไว้ภายใน server
tail /var/log/syslog
จะเห็นบรรทัดที่มีข้อความ

Aug 18 13:17:30 ubuntu postfix/local[7699]: 00EC0C3CC8: to=<mama@ubuntu>, relay=local,
delay=0.04, delays=0.02/0.01/0/0, dsn=2.0.0, status=sent (delivered to mailbox)