2014-11-01 129 views
0

我試圖發送smtp請求到freebsd中安裝的smtp服務器並讀取成功或失敗響應? 這是我的代碼:如何發送SMTP請求並使用php curl讀取響應?

$url = '192.168.1.227:25/'; 
    $user = 'admin'; 
    $pass = '123'; 

    $params = array(
     'User'  => $user, 
     'passwor' => $pass, 
     'to'  => '[email protected]', 
     'subject' => 'test', 
     'html'  => 'body', 
     'text'  => 'text', 
     'from'  => '[email protected]', 
    ); 


    $session = curl_init($url); 
    curl_setopt ($session, CURLOPT_POST, true); 
    curl_setopt ($session, CURLOPT_POSTFIELDS, $params); 
    curl_setopt($session, CURLOPT_HEADER, 1); 
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true); 
    $response = curl_exec($session); 
    $info = curl_getinfo($session); 
    curl_close($session); 
    echo $response; 
    print_r($info); 

回答

1

cURL不是正確的工具。雖然它支持simple SMTP connections,但它通常不適用於更高級的用例。

捲曲設計用於HTTP,在這裏通常有一堆參數的一個請求(HTTP請求頭)和一個response.¹然而

SMTP通信都更喜歡「乒乓」。要實現SMTP客戶端,您必須在原始TCP套接字上工作:在套接字上寫入SMTP命令,讀取/處理響應,寫入下一個命令等等。

此外,SMTP目前已經實施,它在服務器和客戶端中存在許多怪癖和奇怪的方面。例如,基於PHP/cURL的方法將無法支持灰名單,除非您將自己的隊列管理爲暫時拒絕的郵件。

除非你有一個很好的理由這樣做(和大量的時間,以及高挫折容忍力),你應該連同發出電子郵件真正的MTA使用客戶端庫像Swiftmailer。

另一方面,如果您只是想玩一個與郵件服務器的原始連接,請使用命令行中的工具netcat,並通過howto of such a scenario工作。

..

¹如果你離開保持活動等一會兒。