2012-09-13 73 views

回答

3

如果您使用PHPMailer,則可以在發送之前使用Connect()方法,並在連接不正確時檢查錯誤。

/** 
    * Connect to the server specified on the port specified. 
    * If the port is not specified use the default SMTP_PORT. 
    * If tval is specified then a connection will try and be 
    * established with the server for that number of seconds. 
    * If tval is not specified the default is 30 seconds to 
    * try on the connection. 
    * 
    * SMTP CODE SUCCESS: 220 
    * SMTP CODE FAILURE: 421 
    * @access public 
    * @return bool 
    */ 
    public function Connect($host, $port = 0, $tval = 30) { 
    // set the error val to null so there is no confusion 
    $this->error = null; 

    // make sure we are __not__ connected 
    if($this->connected()) { 
     // already connected, generate error 
     $this->error = array("error" => "Already connected to a server"); 
     return false; 
    } 

    if(empty($port)) { 
     $port = $this->SMTP_PORT; 
    } 

    // connect to the smtp server 
    $this->smtp_conn = @fsockopen($host, // the host of the server 
            $port, // the port to use 
            $errno, // error number if any 
            $errstr, // error message if any 
            $tval); // give up after ? secs 
    // verify we connected properly 
    if(empty($this->smtp_conn)) { 
     $this->error = array("error" => "Failed to connect to server", 
          "errno" => $errno, 
          "errstr" => $errstr); 
     if($this->do_debug >= 1) { 
     echo "SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF . '<br />'; 
     } 
     return false; 
    } 

    // SMTP server can take longer to respond, give longer timeout for first read 
    // Windows does not have support for this timeout function 
    if(substr(PHP_OS, 0, 3) != "WIN") 
     socket_set_timeout($this->smtp_conn, $tval, 0); 

    // get any announcement 
    $announce = $this->get_lines(); 

    if($this->do_debug >= 2) { 
     echo "SMTP -> FROM SERVER:" . $announce . $this->CRLF . '<br />'; 
    } 

    return true; 
    } 

(從PHPMailer SVN

+0

有沒有一種辦法,以確保他們的用戶名/密碼是否有效呢?不只是主機:端口? –

+0

使用Connect()方法後,您應該執行Hello()和Authenticate($ username,$ password)。如果成功通過驗證,此方法將返回true(來自相同源) – Lupuz