Linux

使用 /etc/aliases 處理傳入和傳出郵件的中繼後綴

  • June 19, 2015

我正在嘗試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有 value yes,所以 postfix 會將收件人地址重寫為 external@linuxmachine.example.com (您可以在上面的 mail.log 中看到它)
  • 現在mydestination不包含$myhostname或 linuxmachine.example.com,所以 postfix 不會應用別名/etc/aliases

引用自:https://serverfault.com/questions/699703