2012-03-07 176 views
0

好吧,我只是不知道使用PHP腳本從本地主機發送電子郵件的方式和工具的數量。從php本地主機發送電子郵件

你們能幫我清理一些東西嗎?

這是我的操作類型:在php.ini

  1. 我啓用了Gmail SMTP,設置端口465
  2. 我已經下載PHPMailer的,按照指令進行測試沒有成功。
  3. 我有遠程服務器郵件配置(我的網站以前託管)。
  4. 此外,我有一個從互聯網下載的PHP腳本應該發送電子郵件。

究竟需要從本地主機使用PHP腳本發送電子郵件?

+0

Gmail要求加密連接,它(假設的Windows,因爲你已經在php.ini配置這)是不會發生,除非你已經包括了OpenSSL的當你安裝PHP的擴展。你做了這個了嗎? – DaveRandom 2012-03-07 15:42:43

+0

php.ini中的郵件選項僅適用於Windows主機。 Unix/Linux系統有自己的本地郵件系統,PHP將直接使用。 – 2012-03-07 15:47:47

回答

0

您需要本地SMTP服務器,如this one。或者,爲了讓您的生活變得更加輕鬆,請下載WAMP,其中包含本地PHP項目所需的所有內容。

0

正如我所看到的,你使用Gmail作爲smtp 那麼你需要配置php郵件程序腳本......如果你編輯你的答案並把代碼放在那裏,這將很好。

之後,你需要檢查的權限,文件權限/服務器的權限/ Gmail的權限

0

你需要從DNS MX主機名得到你想要發送電子郵件 ([email protected]域 - >域噓聲。 XX):

function getMX($hostname = "boo.xx", $show = 0){ 
    if(dns_get_mx($hostname, $mxhosts, $weights)) { 
     $i = 0; 
     $mxList = NULL; 
     foreach($mxhosts as $key => $host) { 
      if($show == 1) echo "Hostname: $host (Weight: {$weights[$key]}) <br>"; 
      $ip = gethostbyname($host); 
      if($show == 1) echo "IP " . $ip . "\n<br>"; 
      if($show == 1) echo "IP " . gethostbyaddr($ip) . "\n<br>"; 
      $mxList[$i]['host'] = $host; 
      $mxList[$i]['ip'] = $ip; 
      $mxList[$i]['weight'] = $weights[$key]; 
      $i++; 
     } 
     return $mxList; 
    } else { 
     echo "Could not find any MX records for $hostname\n"; 
    } 
} 

現在你有一個MX主機列表中,那麼你需要:

將電子郵件發送到端口25這個主機(總是端口25和無認證)與PHPMailer的或套接字客戶端(例如使用SSL/tls支持和au用戶鑑定):

<?php 
// Send with smtp ssl 
// ini_set("SMTP","ssl://smtp.gmail.com"); 
// ini_set("smtp_port","465"); 

// Login email and password 
$login = "[email protected]"; 
$pass = "123456"; 

ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'verify_peer', false); 
stream_context_set_option($ctx, 'ssl', 'verify_peer_name', false); 
try{ 
    // echo $socket = stream_socket_client('ssl://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); 
    echo $socket = stream_socket_client('tcp://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); 
    if (!$socket) { 
     print "Failed to connect $err $errstr\n"; 
     return; 
    }else{ 
     // Http 
     // fwrite($socket, "GET/HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n"); 
     // Smtp 
     echo fread($socket,8192); 
     echo fwrite($socket, "EHLO cool.xx\r\n"); 
     echo fread($socket,8192); 

     // Start tls connection 
     echo fwrite($socket, "STARTTLS\r\n"); 
     echo fread($socket,8192); 

     echo stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT); 

     // Send ehlo 
     echo fwrite($socket, "EHLO cool.xx\r\n"); 
     echo fread($socket,8192); 

     // echo fwrite($socket, "MAIL FROM: <[email protected]>\r\n"); 
     // echo fread($socket,8192); 

     echo fwrite($socket, "AUTH LOGIN\r\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, base64_encode($login)."\r\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, base64_encode($pass)."\r\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, "rcpt to: <[email protected]>\r\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, "DATA\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, "Date: ".time()."\r\nTo: <[email protected]>\r\nFrom:<[email protected]\r\nSubject:Hello from php socket tls\r\n.\r\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, "quit \n"); 
     echo fread($socket,8192); 

     /* Turn off encryption for the rest */ 
     // stream_socket_enable_crypto($fp, false); 

     fclose($socket); 
    } 
}catch(Exception $e){ 
    echo $e; 
} 

,無認證

ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'verify_peer', false); 
stream_context_set_option($ctx, 'ssl', 'verify_peer_name', false); 
try{ 
    // echo $socket = stream_socket_client('ssl://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); 
    echo $socket = stream_socket_client('tcp://mxhost.boo.xx:25', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); 
    if (!$socket) { 
     print "Failed to connect $err $errstr\n"; 
     return; 
    }else{ 
     // Http 
     // fwrite($socket, "GET/HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n"); 
     // Smtp 
     echo fread($socket,8192); 
     echo fwrite($socket, "EHLO cool.xx\r\n"); 
     echo fread($socket,8192); 

     // Start tls connection 
     echo fwrite($socket, "STARTTLS\r\n"); 
     echo fread($socket,8192); 

     echo stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT); 

     // Send ehlo 
     echo fwrite($socket, "EHLO cool.xx\r\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, "MAIL FROM: <[email protected]>\r\n"); 
     echo fread($socket,8192); 

     //echo fwrite($socket, "AUTH LOGIN\r\n"); 
     //echo fread($socket,8192); 

     //echo fwrite($socket, base64_encode($login)."\r\n"); 
     //echo fread($socket,8192); 

     //echo fwrite($socket, base64_encode($pass)."\r\n"); 
     //echo fread($socket,8192); 

     echo fwrite($socket, "rcpt to: <[email protected]>\r\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, "DATA\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, "Date: ".time()."\r\nTo: <[email protected]>\r\nFrom:<[email protected]\r\nSubject:Hello from php socket tls\r\n.\r\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, "quit \n"); 
     echo fread($socket,8192); 

     /* Turn off encryption for the rest */ 
     // stream_socket_enable_crypto($fp, false); 

     fclose($socket); 
    } 
}catch(Exception $e){ 
    echo $e; 
}