大家好
今天我的客戶有自己的mail server跟domain name權限
web server跟廠商租用,而廠商有提供mail server
環境為Linux + PHP + MySQL
今天遇到的問題是,網站有類似contact us的功能
form送出去以後會用mail()來通知某個客戶自己設定的Email
但客戶mail一直收不到,詢問web server的廠商後得知結果如下
您好:
他要使用非本公司提供的mail server, 所授權的DNS name server必須將mail server的指向指到非本公司提供的mail server.
使用web server的mail()函式發信一定先找同機台的網站. 然後才到網路上找.
這個矛盾一定存在.
要讓web server看到的mail server跟外界看到的是同一台, 唯一的方法是要外界遷就web server, 也就是說所授權的DNS name server必須將mail server的指向指到本公司提供的mail server.
這封信看起的意思似乎是web與mail server不同台的話,不能用mail()否則會收不到,請問是這樣嗎?有什麼解決方式嗎?
客戶mail收不到,要看一下 web server 上的 mail log 被拒的記錄。
不大同意 web server 廠商的做法。
分兩部份來看,Web Server上的 Mail Daemon的設定,及PHP的送信函式。
一般而言,*nix 平臺的 Mail Daemon 通常是應會接受 localhost 的轉寄,
如果 Mail Daemon 不去特別額外設定 From:、To: 必須符合什麼條件的話,
基本上從 web 介面往本身的 Mail Daemon 送信件,
只要 From, To 都是可查得到的話,
應該必須寄得成。
如果該 Web Server 非 *nix 就另當別論了。
要看上面裝的是哪一家的 windows 環境的 Mail Server。
所授權的DNS name server必須將mail server的指向指到非本公司提供的mail server.
如果這樣做的話,不就你們公司的電腦都要向 webserver 廠商的 mail server 收信?
除非 webserver 廠商的 mail server 會再把你們信件轉到你們公司 mail server 的IP,
或 在 webserver 廠商的 mail server 開你們公司每個人帳號才收得到信。
使用web server的mail()函式發信一定先找同機台的網站. 然後才到網路上找
PHP 內建的送信函式,的確並沒有以 SMTP 的參數及寄信模式,
所以只會往 localhost 來送。
若是用 Pear::Mail 就可以指定 SMTP server 為何,
而不需一定要用本機的 Mail Daemon 來送。
所以最關鍵的問題是在於,
該 web server 本身的 Mail Daemon ,必須允 localhost 所寄的信。
至於為何又會與 web server 廠商的 mail server ?
推測不曉得是不是 web server 本身的 Mail Daemon ,
是又透過廠商的 mail server 來傳送?
那就要應讓 廠商的 mail server 允許 web server 這 IP 所寄的任何信件,
才不會擋到有 To 到你們公司的信件。
建議改用phpmailer來寄,然後寄信的主機改成客戶的mail伺服器,但是要開放讓他的web伺服器可以relay,並且用帳號/密碼驗證,避免成為垃圾信跳板。