1 <?php2 $array_values[‘host‘] = "host";3 $array_values[‘port‘] = 110;4 $array_values[‘user‘] = ‘用户名‘;5 $array_values[‘password‘] = ‘密码‘;6 $array_values[‘checkmail‘] = [email protected];7
8 ganji_get_test_mail($array_values);9
10 function ganji_get_test_mail($array_values)11 {12 $host = $array_values[‘host‘];13 $port = $array_values[‘port‘];14 $user = $array_values[‘user‘];15 $password = $array_values[‘password‘];16 $checkmail = $array_values[‘checkmail‘];17 $msg = ‘‘;18 $return_msg = ‘‘;19 //ini_set(‘memory_limit‘, ‘80M‘);
20 if (! ($sock = fsockopen(gethostbyname($host), $port, $errno, $errstr))) {21 exit($errno . ‘: ‘ . $errstr);22 }23
24 set_socket_blocking($sock, true);25
26 $command = "USER " . $user . "\r\n";27 fwrite($sock, $command);28 $msg = fgets($sock);29 $command = "PASS " . $password . "\r\n";30 fwrite($sock, $command);31 $msg = fgets($sock);32
33 $command = "stat\r\n";34 fwrite($sock, $command);35 $return_msg = fgets($sock);36
37 $msg = fgets($sock);38
39 $command = "LIST\r\n";40 fwrite($sock, $command);41 $all_mails = array();42 while (true) {43 $msg = fgets($sock);44 if (! preg_match(‘/^\+OK/‘, $msg) && ! preg_match(‘/^\./‘, $msg)) {45 $msg = preg_replace(‘/\ .*\r\n/‘, ‘‘, $msg);46 array_push($all_mails, $msg);47 }48 if (preg_match(‘/^\./‘, $msg))49 break;50 }51
52 //获取邮件列表
53 $ganji_mails = array();54 foreach ($all_mails as $item) {55 fwrite($sock, "TOP $item 0\r\n");56 while (true) {57 $msg = fgets($sock);58 //echo $msg . "
";
59 if (preg_match(‘/^\./‘, $msg)) {60 array_push($ganji_mails, $item);61 break;62 }63 }64 continue;65 }66
67 $mail_content = ‘‘;68 $array_ganji_mails = array();69
70 //逐行遍历
71 foreach ($ganji_mails as $item) {72 fwrite($sock, "RETR $item\r\n");73 while (true) {74 $msg = fgets($sock);75 $mail_content .= $msg;76 if (preg_match(‘/^\./‘, $msg)) {77 array_push($array_ganji_mails, iconv_mime_decode_headers($mail_content, 0, "UTF-8"));78 $mail_content = ‘‘;79 break;80 }81 }82 }83
84 //直接获取第一封邮件全部信息 9999长度
85 fwrite($sock, "RETR 1\r\n");86 $mail_contents = fread($sock, 9999); //直接获取全部
87
88 echo "
";89 var_dump($mail_contents);90 echo "
";91
92 $command = "QUIT\r\n";93 fwrite($sock, $command);94 $msg = fgets($sock);95
96 return $mail_contents;97 }
常用的POP3命令介绍 :
命令 参数 状态 描述
------------------------------------------
USER username 认可 此命令与下面的pass命令若成功,将导致状态转换
PASS password 认可
APOP Name,Digest 认可 Digest是MD5消息摘要
------------------------------------------
STAT None 处理 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
UIDL [Msg#] 处理 返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的
LIST [Msg#] 处理 返回邮件数量和每个邮件的大小
RETR [Msg#] 处理 返回由参数标识的邮件的全部文本
DELE [Msg#] 处理 服务器将由参数标识的邮件标记为删除,由quit命令执行
RSET None 处理 服务器将重置所有标记为删除的邮件,用于撤消DELE命令
TOP [Msg#] 处理 服务器将返回由参数标识的邮件前n行内容,n必须是正整数
NOOP None 处理 服务器返回一个肯定的响应,不做任何操作。
------------------------------------------
QUIT None 更新 退出
————————————————
原文:https://www.cnblogs.com/crxis/p/12844850.html