2014-11-01 3 views
0

freebsd에 설치된 smtp 요청을 내 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 요청 헤더)와

SMTP 통신은 그러나 더 "핑퐁"같이가는 하나 response.¹가 HTTP, 위해 설계되었습니다. SMTP 클라이언트를 구현하려면 원시 TCP 소켓에서 작업해야합니다. 소켓에 SMTP 명령을 작성하고 응답을 읽고 처리하며 다음 명령을 작성하는 등의 작업을 수행해야합니다.

또한 SMTP는 현재 구현되어 있기 때문에 서버와 클라이언트에서 많은 단점과 측면이 있습니다. 예를 들어 PHP/cURL 기반 접근 방식은 일시적으로 거부 된 메일에 대한 자체 큐를 관리하지 않는 한 greylisting을 지원할 수 없습니다.

그렇게해야 할 충분한 이유가 없다면 (그리고 많은 좌절감과 함께), Swiftmailer와 같은 클라이언트 라이브러리를 보내는 메일의 실제 MTA와 함께 사용해야합니다.

메일 서버에 대한 원시 연결로 재생하는 것이 궁금하다면 netcat 같은 도구를 사용하여 명령 줄에서 howto of such a scenario을 통해 작업하십시오. 당신은 유지 (keep-alive) 등을 제외하고 잠시두면

..

는 ¹.

관련 문제