以下程式碼展示如何使用 fsockopen() 連接 163 POP3 伺服器(pop.163.com:110),進行認證、列出郵件、讀取第一封郵件內容並登出。
<?php
$host = 'pop.163.com';
$port = 110;
$user = '******'; // 替換為您的帳號
$password = '******'; // 替換為您的密碼
// 建立連線
if (!($sock = fsockopen(gethostbyname($host), $port, $errno, $errstr))) {
exit($errno . ': ' . $errstr);
}
set_socket_blocking($sock, true);
// 讀取歡迎訊息
$msg = fgets($sock);
echo $msg;
// 發送 USER 指令
$command = "user $user\r\n";
fwrite($sock, $command);
$msg = fgets($sock);
echo $msg;
// 發送 PASS 指令
$command = "pass $password\r\n";
fwrite($sock, $command);
$msg = fgets($sock);
echo $msg;
// 發送 STAT 指令獲取郵件統計
$command = "stat\r\n";
fwrite($sock, $command);
$msg = fgets($sock);
echo $msg;
// 發送 LIST 指令列出所有郵件
$command = "list\r\n";
fwrite($sock, $command);
while (true) {
$msg = fgets($sock);
echo $msg;
if (preg_match('/^\./', $msg)) break; // 以單獨一行 "." 結束
}
// 讀取第一封郵件 (RETR 1)
$command = "retr 1\r\n";
fwrite($sock, $command);
while (true) {
$msg = fgets($sock);
echo $msg;
if (preg_match('/^\.(\r\n)$/', $msg)) break; // 結束標記
}
// 發送 QUIT 指令登出
$command = "quit\r\n";
fwrite($sock, $command);
$msg = fgets($sock);
echo $msg;
?>