使用 /etc/aliases 處理傳入和傳出郵件的中繼後綴
我正在嘗試
postfix
在 Linux 機器上進行設置(Debian 8 with Postfix 2.11)。/etc/aliases
但是我在正常工作時遇到了一些麻煩。設置如下: MS Exchange 伺服器是實際的郵件伺服器——它接收郵件並發送郵件,它與 Linux 機器位於同一本地網路中。Linux 機器上的 Postfix 確實使用這台 Exchange 機器作為中繼主機來發送郵件。這行得通,所以例如
mail external@gmail.com
到達。現在在 Exchange 上存在一個轉發到 Linux 機器的郵件地址。在
/etc/aliases
我有一個別名,它是一個程序的管道,因為發送到這個地址的郵件包含一些應該由程序解析的程式碼。為了完成這項工作,我必須更改
mydestination
.main.cf
但是一旦我這樣做,Postfix 就會在/etc/aliases
使用別名時停止中繼郵件。只有輸入長名稱才有效。這是我的配置(我從零開始):# main.cf # our internet domain name (the thing after the "@") mydomain = example.com # this is the critical setting mydestination = linuxmachine, 192.168.1.200, $mydomain # IP of Exchange relayhost = 192.168.1.100 # so that addresses look correct masquerade_domains = $mydomain # in order to make the pipe programm work with correct permission default_privs = myuser
使用此配置,傳入郵件的管道工作,但將郵件發送到別名不起作用:
# /etc/alias # none of the entries are actual users on the linux machine! #works when mail to parser@example.com comes from external through Exchange to Linux parser: |/home/user/programname # command "mail external" does not work! It sends to external@linuxmachine" external: externalmail@gmail.com
如果我註釋掉該行
mydestination
然後main.cf
發送mail external
一封郵件到externalmail@gmail.com
(它到達),但傳入的郵件parser@example.com
不是通過管道發送的。所以,恰恰相反。我必須輸入什麼
main.cf
或/etc/aliases
能夠使用短名稱從我的 Linux 機器發送郵件,同時能夠將郵件接收到管道?我想要的是在 linux 機器上解析一個特殊的地址,並且 linux 使用者能夠使用短名稱作為“luxory”將郵件發送到選定的地址(而不必輸入完整的電子郵件地址)。更新:
postconf -n
輸出:config_directory = /etc/postfix default_privs = myuser masquerade_domains = $mydomain mydestination = linuxmachine, 192.168.1.200, $mydomain mydomain = example.com relayhost = 192.168.1.100
更新 2:使用上述設置(郵件到別名)
/var/log/mail.info
時的輸出:mail external``mydestination
Jun 19 10:45:27 linuxmachine postfix/smtp[26425]: 6DFE02003AD: to=<external@linuxmachine.example.com>, orig_to=<external>, relay=192.168.1.100[192.168.1.100]:25, delay=0.24, delays=0/0/0/0.24, dsn=2.6.0, status=sent (250 2.6.0 <20150619084527.6DFE02003AD@linuxmachine.example.com> [InternalId=162319] Queued mail for delivery)
更新3,
mydestination
根據建議的答案進行更改後,mail.info
日誌在執行時顯示以下行mail external
:Jun 19 16:07:31 linuxmachine postfix/smtp[2299]: B562720039C: to=<externalmail@gmail.com>, orig_to=<external>, relay=192.168.1.100[192.168.1.100]:25, delay=2.6, delays=0/0/0/2.5, dsn=2.6.0, status=sent (250 2.6.0 <20150619140728.B359620039E@linuxmachine.example.com> [InternalId=162971] Queued mail for delivery)
顯而易見的解決方案是在參數中放入
$myhostname
或 linuxmachine.example.com 。mydestination
解釋
在配置修改之前,這裡是您發送電子郵件後的後台事件
mail external
- Postfix 通過取件服務接收電子郵件。
- 因為收件人沒有域部分並且(預設情況下)參數
append_at_myorigin
有 valueyes
,所以 postfix 會將收件人地址重寫為 external@linuxmachine.example.com (您可以在上面的 mail.log 中看到它)- 預設情況下,參數
mydestination
有值$myhostname
或 linuxmachine.example.com,所以後綴在/etc/aliases
.- 後綴別名 external@linuxmachine.example.com 到 external@gmail.com 然後發送到 gmail 主機
現在在配置修改後,這就是發生的事情
- Postfix 通過取件服務接收電子郵件。
- 因為收件人沒有域部分並且(預設情況下)參數
append_at_myorigin
有 valueyes
,所以 postfix 會將收件人地址重寫為 external@linuxmachine.example.com (您可以在上面的 mail.log 中看到它)- 現在
mydestination
不包含$myhostname
或 linuxmachine.example.com,所以 postfix 不會應用別名/etc/aliases