好吧,我只是不知道使用PHP腳本從本地主機發送電子郵件的方式和工具的數量。從php本地主機發送電子郵件
你們能幫我清理一些東西嗎?
這是我的操作類型:在php.ini
- 我啓用了Gmail SMTP,設置端口465
- 我已經下載PHPMailer的,按照指令進行測試沒有成功。
- 我有遠程服務器郵件配置(我的網站以前託管)。
- 此外,我有一個從互聯網下載的PHP腳本應該發送電子郵件。
究竟需要從本地主機使用PHP腳本發送電子郵件?
好吧,我只是不知道使用PHP腳本從本地主機發送電子郵件的方式和工具的數量。從php本地主機發送電子郵件
你們能幫我清理一些東西嗎?
這是我的操作類型:在php.ini
究竟需要從本地主機使用PHP腳本發送電子郵件?
正如我所看到的,你使用Gmail作爲smtp 那麼你需要配置php郵件程序腳本......如果你編輯你的答案並把代碼放在那裏,這將很好。
之後,你需要檢查的權限,文件權限/服務器的權限/ Gmail的權限
你需要從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;
}
Gmail要求加密連接,它(假設的Windows,因爲你已經在php.ini配置這)是不會發生,除非你已經包括了OpenSSL的當你安裝PHP的擴展。你做了這個了嗎? – DaveRandom 2012-03-07 15:42:43
php.ini中的郵件選項僅適用於Windows主機。 Unix/Linux系統有自己的本地郵件系統,PHP將直接使用。 – 2012-03-07 15:47:47