2015-11-14 56 views
0

就在最近和意外,我發現我不能發送郵件到國外貨源超出了我的服務器(我一直在使用本地電子郵件地址安裝在同一臺服務器上進行測試)。這是我的代碼,我無法發送到(例如)Gmail或雅虎。郵件():SMTP服務器響應:503此郵件試圖發送到非本地電子郵件地址時,服務器需要身份驗證

$receiver = $emailadr; 
$subj  = 'Auth'; 
$msg  = 'Thank you!'; 
$header = 'From: [email protected]' . "\r\n" . 
'Reply-To: [email protected]' . "\r\n" . 
'X-Mailer: PHP/' . phpversion() . "\r\n" . 'Content-type: text/html; charset=iso-8859-1'; 
mail($receiver, $subj, $msg, $header); 

當(嘗試)發送,談到了這一點:

:電子郵件():SMTP服務器響應:嘗試發送到非本地電子時503此郵件服務器需要身份驗證-郵件地址。請檢查您的郵件客戶端設置,或與您的管理員聯繫,以驗證是否爲此服務器定義了域或地址。

我使用的Plesk 12.5

+0

所以,你知道是什麼問題。你如何期待我們幫助你? – Dai

+0

似乎對我來說不言自明。你想讓我們對此做些什麼? –

回答

0

看起來像郵件服務器的問題。您的代碼位於共享主機上?你提供的可能有一個反垃圾郵件配置(希望)。您必須確保您的發件人地址已存在。爲了進行測試,如果你發送消息給自己(如果你沒有的話)它也很有幫助,這有更多的機會來工作,然後你可以檢查郵件頭。

在一個平均配置的電子郵件服務器,有郵件通訊的四種方式:(我假設你的服務器運行somedomain.com並提供@ somedomain.com郵件)

  • 傳入:從郵件[email protected]到@ somedomain.com。這些郵件通常只是被接受。
  • 傳出:從郵件@ somedomain.com到[email protected]。如果源IP地址位於本地網絡(或網絡服務器)中,則接受郵件。 這就是你想要什麼
  • 內部:郵件從@ somedomain.com到@ somedomain.com。如果您將消息發送給自己,那麼這也是另一種選擇。在這裏,你有郵件到達
  • 接力的最高改變:從郵件到[email protected] [email protected]。這是你的服務器認爲你正在做的事情。中繼郵件通常被拒絕,除了已通過身份驗證的用戶,因爲它通常是垃圾郵件(並且這是它在錯誤消息中告訴您的內容)。不幸的是,標準的PHP sendmail函數不支持認證。因此,您需要將發件人地址添加到郵件服務器的白名單,或者(更簡單:)將其更改爲可接受的內部地址,該地址將您的郵件更改爲外發郵件或內發郵件,具體取決於接收者地址。
+0

所以這封電子郵件不存在? – MRXI

+1

@MRXI我不明白這個問題。PHP使用服務器上的sendmail命令發送郵件。該服務器有一個電子郵件服務器,並且該郵件服務器正在返回答案「503嘗試發送到非本地電子郵件地址時,此郵件服務器需要進行身份驗證」。該消息告訴您(自由翻譯)郵件不被接受,因爲發件人和/或收件人地址不被接受。這兩個地址都是你的PHP命令的一部分 –

+0

@DanielAlder:這是不正確的。該消息表示服務器需要身份驗證,這意味着服務器需要身份驗證。就這麼簡單。這是一個基本的常見安全措施,可以防止SMTP服務器被用作開放中繼來發送垃圾郵件。你必須經過身份驗證才能使用它。您必須是該系統上的用戶_authenticated_才能信任發送郵件。它與發件人地址無關。 –

相關問題