Dovecot LMTP

[華語, cmn-Hant-TW]

花了不少時間測試,終於讓 Dovecot LMTP 能正常運作了。會用 lmtp 的原因是 sieve 會用到,對於 sieve 來講 dovecot 有支援 lda 跟 lmtp 這兩種方式,評估了一下 lmtp 在非 virtual user 的環境比較簡單,所以就採用 lmtp 方案,用到的 ports 主要有:

  • mail/postfix
  • mail/dovecot2
  • mail/dovecot2-pigeonhole

在之前的嘗試中,不斷的遇到像是這樣的錯誤:

auth: passwd(whsyu@pighead.cc): unknown user
550 5.1.1  User doesn't exist: whsyu@pighead.cc (in reply to RCPT TO command))

這篇這篇有提到,問題是因為從 postfix 傳到 dovecot lmtp 的使用者名稱帶 domain,不過系統用的使用者名稱當然是沒有帶,所以要告訴 lmtp 使用者名稱的格式,不過照那兩篇的改法怎麼改都還是會吃到一樣的錯誤,不管是 pam 或是 ldap 認證結果都一樣。不過第二篇有提到 auth_username_format 這個參數,查了一下說明文件後發現 n 會把 domain 去掉,然後 L 會把大寫通通變成小寫,所以其實只要加 %Ln 就不會再吃那個錯誤,而整個設定就會變成這樣: (只列出和 lmtp/sieve 有關的部份)

/usr/local/etc/dovecot/dovecot.conf
auth_username_format = %Ln
protocols = lmtp sieve
service managesieve-login {
}
 
service managesieve {
}
 
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0660
    user = postfix
  }
  client_limit = 1
}
 
protocol lmtp {
  mail_plugins = sieve
}
 
plugin {
   # Used by both the Sieve plugin and the ManageSieve protocol
   sieve = ~/.dovecot.sieve
   sieve_dir = ~/sieve
}

關於 sieve 的部份,其實沒啥好設的,client_limit = 1 則是因為我們的系統還有 mbox (當初會用 dovecot 就是因為要讓 mbox 跟 maildir 和樂相處),而 dovecot 要求在有 mbox 的環境下一定要下這個參數,所以就把他加上去。

/usr/local/etc/postfix/main.cf
mailbox_transport = lmtp:unix:/var/spool/postfix/private/dovecot-lmtp

非 virtual user 的模式要加的是這個,如果是 virtual user 的話要用 virtual_transport,後面的檔案位置要跟 dovecot.conf 裡面的設定一樣才會動,設定完重開 dovecot 跟 postfix 之後應該就 ok 了。

Leave a Reply

Your email address will not be published. Required fields are marked *