開發功能有時會需要使用到寄信功能,如果非使用第三方個郵件伺服器 (例如 gmail),就會需要自己架設電子郵件 MTA 伺服器 (Mail Transfer Agent),古老的 MTA 有 Sendmail,但是 Sendmail 操作起來比較複雜一點,後來有了 Postfix 能夠更簡單的設定與使用,本篇文章將教學如何在 ubuntu 安裝與使用 postfix。
安裝 postfix
輸入指令安裝 postfix
sudo apt update sudo DEBIAN_PRIORITY=low apt install postfix
安裝過程 (以下的設定都可以在 /etc/postfix/main.cf
中再做修改):
- General type of mail configuration?: Internet Site
選擇 mail server 的基本設定,直接選擇 Internet Site
- System mail name: mail.xenby.com
設定信箱伺服器名稱
- Root and postmaster mail recipient: xenby
設定接收到 root@
以及 postmaster@
的信會轉給哪個 linux account,可以選一個自己主要的帳號
- Other destinations to accept mail for: $myhostname, mail-demo.xenby.com, ubuntu-s-1vcpu-1gb-sgp1-01, localhost.localdomain, localhost
設定此伺服器會接收哪些 domain 的信並轉給 user
- Force synchronous updates on mail queue?:No
這邊直接選擇 No
- Local networks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
用於設定會處理哪些 IP 過來要幫忙遞送信的請求,如果有其他伺服器想要透過此 mail server 來寄信,可以一併加入
- Mailbox size limit: 0
信箱空間上限 (0表示無上限)
- Local address extension character: +
直接使用預設的 +
- Internet protocols to use: all
要使用 ipv4 還是使用 ipv6,這邊可選擇 all 兩個都使用
設定 DNS 紀錄
安裝完了 postfix,還需要設定 DNS 紀錄,共有三個紀錄要設定,分別為 A、MS 以及 TXT (SPF) 紀錄
※ A 與 MS 是收信功能需要新增,TXT (SPF) 紀錄是寄信的功能需要新增
- A 紀錄:用於設定 mail server 的IP,要指向 postfix server 的 IP
- MX 紀錄:用於設定哪些網域的信要丟給哪個 mail server 處理,例如如果要將 mail.xenby.com 的信交由 mailer.xenby.com 處理,則設定 mail.xenby.com 指向 mailer.xenby.com 的紀錄
- TXT (SPF) 紀錄:假如 postfix 有需要寄信的功能,需要設定此紀錄用來證明這個 IP 送出該 domain 的信是不是仿冒的,否則 gmail 或其他信箱伺服器可能會拒收該 IP 寄出的信
例如: mail server 159.65.129.16 會寄出 domain 為 mail.xenby.com 的信,那就需要設定一個 mail.xenby.com 的 TXT 紀錄,內容為 v=spf1 ip4:159.65.129.16 -all
postfix 一些檔案位置
主要設定檔位置:
/etc/postfix/main.cf
log 檔案位置:
/var/log/mail.err /var/log/mail.log
修改使用的 port
postfix 預設使用的 port 是 25,而如果要更換成其他 port 可以在以下的設定檔中修改
/etc/postfix/master.cf
會看到一行如下的設定
smtp inet n - y - - smtpd
假設要改成 8225 port 則將第一個 smtp 改成 8225
8225 inet n - y - - smtpd
這樣重新啟動 postfix 後就會變成使用 8225 port 了
設定 mailbox 儲存資料夾
預設收到的信件內容會放在 /var/mail/
資料夾下面
而假如要換信件存放位置可以輸入以下指令
sudo postconf -e 'home_mailbox= Maildir/'
這樣信就會存到使用者家目錄的 Maildir 資料夾中了
設定收件者別名
sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'
可以設定哪些收信者的信會丟給哪個使用者,修改 /etc/postfix/virtual
sudo vim /etc/postfix/virtual
內容如下,表示 contact@mail.xenby.com
、 admin@mail.xenby.com
、contact@localhost
與 admin@localhost
收信者的信會丟給使用者 xenby
contact@mail.xenby.com xenby admin@mail.xenby.com xenby contact@localhost xenby admin@localhost xenby
重新讀取更新 postmap
sudo postmap /etc/postfix/virtual
重啟 postfix
sudo systemctl restart postfix
測試寄送郵件
使用 telnet 指令 與 TCP 的 port 25 進行 TCP 連線
telnet localhost 25
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mailer.xenby.com ESMTP Postfix (Ubuntu)
在 telnet 中輸入以下指令,來設定寄件者與收件者信箱:
mail from: 寄件者信箱
rcpt to: 收件者信箱
範例:
mail from: user1@demo-mail.xenby.com
rcpt to: xenby29512-demo@gmail.com
接著輸入 data
指令,開始寫信件內容,訊息結束時要使用獨立一行的 .
符號表示,最後輸入 quit
結束 telnet:
mail from: user1@demo-mail.xenby.com 250 2.1.0 Ok rcpt to: xenby29512-demo@gmail.com 250 2.1.5 Ok data 354 End data with <CR><LF>.<CR><LF> From: "user1" <user1@demo-mail.xenby.com> To: "xenby29512 Demo" <xenby29512-demo@gmail.com> Subject: Test sent mail from telnet Hello, Xenby Server. . 250 2.0.0 Ok: queued as 7DD773F27E quit 221 2.0.0 Bye Connection closed by foreign host.
然後就能去信箱看有沒有成功收到信件了
※ 如果送給 gamil 的 data 中沒有 From
的資料可能會收到類似如下的錯誤訊息
Our system has detected that this message is 550-5.7.1 not RFC 5322 compliant: 550-5.7.1 'From' header is missing. 550-5.7.1 To reduce the amount of spam sent to Gmail, this message has been 550-5.7.1 blocked. Please visit 550-5.7.1 https://support.google.com/mail/?p=RfcMessageNonCompliant 550 5.7.1 and review RFC 5322 specifications for more information.
查看 queue
輸入指令可以查看 queue 中未執行的信
postqueue -p
刪除 queue 中指定的信
postsuper -d mail_queue_id
清除 queue 中所有信
postsuper -d ALL
很清楚的教學,近期正好需要架設mail server,謝謝!
感谢!找了一圈教程,您的blog写的最清楚!