2008-11-27 30 views
2

這是一個問題,我相信很容易解決,但我一整天都在砸我的頭。當郵件服務器不在網絡主機上時,sendmail和MX記錄

我正在爲客戶開發一個新的網站。該網站駐留在(這是一個例子)website.com。我有一個PHP表單腳本來將訪問者的請求發送到[email protected]

當我在一個不同的域上的登臺服務器上編碼時,所有工作正常。當我將它移動到website.com時,郵件消息從未到達。 Web服務器位於具有主要ISP的虛擬主機上。

以下是我從那時起學到的:我的客戶的郵件服務器是Microsoft Exchange,位於辦公室的物理盒子中。每當外面的人發郵件給[email protected]時,郵件就會到達。 但是如果Web服務器發送到相同的電子郵件地址,則每次都會失敗。這是而不是的一個PHP問題。我將shell保護到web服務器,並使用sendmail和UNIX郵件應用程序進行了測試。我還通過電子郵件從shell中的各種電子郵件帳戶進行測試。例如,我可以給自己發電子郵件,沒有人在website.com域名。

總之,當我登錄到website.com時,發送到[email protected][email protected][email protected]都會失敗。所有其他地址工作正常。我發現,這些被丟棄的電子郵件會被路由到Web服務器的「catchall」帳戶,並放在收件箱中。

我在website.com上完成了MX查找。 MX記錄指向mailsec.website.com。我可以telnet到mailsec.website.com端口25並查看SMTP服務器。

在我看來,website.com在將郵件發送到[email protected]時沒有進行MX查找。我的理論是,它認爲域名是本地域名,它認爲沒有「請求」用戶帳戶要將它交付給它,並將郵件放入帳戶。我想要的是強制sendmail執行MX查找並將郵件發送到Exchange服務器。我在智慧的最後。我無法弄清楚如何做到這一點。

對於這個問題,我可能在這裏的基地,並完全誤診。互聯網郵件和MX一直對我來說似乎是一種黑色藝術,我的無知在這個問題上肯定表現出來。

+0

看在http://serverfault.com/questions/98283/sendmail-delivering-locally-instead-of-to-mta-in-mx-record討論。帕維爾的迴應爲我做了。 – 2012-02-01 17:35:18

回答

8

我認爲問題在於sendmail(您的進程)正在與本地sendmail守護進程交談。本地的sendmail守護進程認爲,因爲它是website.com,它應該知道如何發送郵件。不幸的是,to域中的實際地址並不存在於Web服務器上,因此它將其轉儲到「catchall」郵箱中。您應該與您的ISP通話並讓他們更新其sendmail配置,以便發送到... @ website.com的郵件可以轉發到郵件交換器,而不是在本地處理。

1

tvanfosson基本上有它,但作爲臨時的解決方法,你應該能夠改變你的腳本,以便郵件'[email protected]',然後郵件將被傳遞到實際的郵件服務器。

0

編輯tsm.cf文件(在/ etc /郵件/或類似的),以包括

FEATURE(relay_entire_domain) 
的DOMAIN()和MAILER()線之間

。由於您正在編輯文件,因此您可能還希望通過

define(`confPRIVACY_FLAGS',``noexpn,novrfy'') 

更改tsm後。cf文件(或任意 sendmail配置文件),重新啓動或SIGHUP sendmail進程。

此更改是必需的,因爲域的WWW和MX服務器不存在於相同的進程空間中;這個FEATURE觸發sendmail使用它的外部傳遞機制來處理域的消息。

的tsm.cf文件的編輯部分應類似於此:

DOMAIN(website.com)dnl 
FEATURE(relay_entire_domain)dnl 
define(`confPRIVACY_FLAGS',``noexpn,novrfy'')dnl 
MAILER(smtp)dnl 
MAILER(procmail)dnl 
0

什麼工作對我來說是對託管網站的網絡服務器添加MX記錄,它指向的主機分配的上原來的域名服務器。在這裏介紹的情況下將是一個mx記錄指向:mailsec.website.com

3

Sendmail默認猜測本地電子郵件域的列表。 它可以使用下面的行放在sendmail.mc文件被關閉:

define(`confDONT_PROBE_INTERFACES',`True') 

由於根目錄本地電子郵件域前後的變化之後。

echo '$=w' | sendmail -Am -bt 

你會看到哪些領域應該是「手動」加入到(通常)在/ etc /郵件/本地主機名禁用自動猜測後文件。

P.S.對於sendmail問題,您可以使用news:comp.mail.sendmail

0

我是新來的。想要延長RB_CWI的答案,但我不允許評論。 他的解決方案效果很好。

您是而不是需要定義DOMAIN()。

但是,在我的系統中,我需要安裝sendmail-cf軟件包。

下面的說明是在的CentOS 6.5完成

首先,安裝的sendmail-CF

sudo yum install sendmail-cf 

然後,編輯senmail.mc

sudo vi /etc/mail/sendmail.mc 

在的底部文件添加FEATURE(relay_entire_domain)dnl,所以它看起來像:

... 
FEATURE(relay_entire_domain)dnl 
MAILER(smtp)dnl  # right above this line 
MAILER(procmail)dnl 
dnl MAILER(cyrusv2)dnl 

保存該文件,然後重新啓動sendmail。

sudo service sendmail restart 
相關問題