PHP使用POP3读取邮箱接收邮件的示例代码
作者:crxis 发布时间:2024-06-05 09:44:48
标签:php,POP3,读取邮箱,接收邮件
直接上代码:
<?php
$array_values['host'] = "host";
$array_values['port'] = 110;
$array_values['user'] = '用户名';
$array_values['password'] = '密码';
$array_values['checkmail'] = 'xxx@xxx.xxx';
ganji_get_test_mail($array_values);
function ganji_get_test_mail($array_values)
{
$host = $array_values['host'];
$port = $array_values['port'];
$user = $array_values['user'];
$password = $array_values['password'];
$checkmail = $array_values['checkmail'];
$msg = '';
$return_msg = '';
// ini_set('memory_limit', '80M');
if (! ($sock = fsockopen(gethostbyname($host), $port, $errno, $errstr))) {
exit($errno . ': ' . $errstr);
}
set_socket_blocking($sock, true);
$command = "USER " . $user . "\r\n";
fwrite($sock, $command);
$msg = fgets($sock);
$command = "PASS " . $password . "\r\n";
fwrite($sock, $command);
$msg = fgets($sock);
$command = "stat\r\n";
fwrite($sock, $command);
$return_msg = fgets($sock);
$msg = fgets($sock);
$command = "LIST\r\n";
fwrite($sock, $command);
$all_mails = array();
while (true) {
$msg = fgets($sock);
if (! preg_match('/^\+OK/', $msg) && ! preg_match('/^\./', $msg)) {
$msg = preg_replace('/\ .*\r\n/', '', $msg);
array_push($all_mails, $msg);
}
if (preg_match('/^\./', $msg))
break;
}
// 获取邮件列表
$ganji_mails = array();
foreach ($all_mails as $item) {
fwrite($sock, "TOP $item 0\r\n");
while (true) {
$msg = fgets($sock);
// echo $msg . "<Br><Br>";
if (preg_match('/^\./', $msg)) {
array_push($ganji_mails, $item);
break;
}
}
continue;
}
$mail_content = '';
$array_ganji_mails = array();
//逐行遍历
foreach ($ganji_mails as $item) {
fwrite($sock, "RETR $item\r\n");
while (true) {
$msg = fgets($sock);
$mail_content .= $msg;
if (preg_match('/^\./', $msg)) {
array_push($array_ganji_mails, iconv_mime_decode_headers($mail_content, 0, "UTF-8"));
$mail_content = '';
break;
}
}
}
// 直接获取第一封邮件全部信息 9999长度
fwrite($sock, "RETR 1\r\n");
$mail_contents = fread($sock, 9999); // 直接获取全部
echo "<br>";
var_dump($mail_contents);
echo "<br>";
$command = "QUIT\r\n";
fwrite($sock, $command);
$msg = fgets($sock);
return $mail_contents;
}
常用的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


猜你喜欢
- 废话不多说了直接给大家贴代码了,具体代码如下所示:$('#myModal').on('shown', fun
- 案例一 导入图片思路: 1.导入库 2.加载图片 3.创建窗口 4.显示图片 5.暂停窗口 6.关闭窗口# 1.导入库import cv2#
- 本文实例讲述了PHP abstract 抽象类定义与用法。分享给大家供大家参考,具体如下:PHP抽象类应用要点:1.定义一些方法,子类必须完
- 关于php,最近学了好多,老师跟我们说,现在学的都是php的核心部分,所以我比较注意了一下,也多练习了几遍,相对来说理解起来嗨算轻松,没有刚
- 在进行PHP编程时,需要对服务器某个目录下面的文件进行浏览,通常成为遍历目录。取得一个目录下的文件和子目录,就需要用到opendir()函数
- 1.将ipynd编译成tex建议将其放在桌面处理ipython nbconvert —to latex pdf.ipynb2.修改tex双击
- 本文实例讲述了Django框架静态文件处理、中间件、上传文件操作。分享给大家供大家参考,具体如下:Django静态文件处理、中间件、上传文件
- 不管是一名学生,亦或是一名员工,我们都需要时刻注意学校或公司网站的通知,尽量做到即时获取最新消息。大部分博客或数据资源网站都会有自己的RSS
- 1.简介celery(芹菜)是一个异步任务队列/基于分布式消息传递的作业队列。它侧重于实时操作,但对调度支持也很好。celery用于生产系统
- 内存溢出问题是参加kaggle比赛或者做大数据量实验的第一个拦路虎。以前做的练手小项目导致新手产生一个惯性思维——读取训练集图片的时候把所有
- 今天来聊一下 Go 如何使用 set,本文将会涉及 set 和 bitset 两种数据结构。Go 的数据结构Go 内置的数据结构并不多。工作
- 成员运算符Python 提供了两个成员运算符来检查或验证值的成员资格。它测试序列中的成员资格,例如字符串、列表或元组。 in 运算
- 这篇文章记录一个采样器都随机地从原始的数据集中抽样数据。抽样数据采用permutation。 生成任意一个下标重排,从而利用下标来提取dat
- 本文实例讲述了Python3的urllib.parse常用函数。分享给大家供大家参考,具体如下:1、获取url参数>>>
- 概述Rollup, 和 Webpack, Parcel 都是模块打包工具(module bundler tool), 但是侧重点不同, 我们
- 在学习python的时候,被推荐了使用PyCharm这款IDE,但是在import包的时候却发生了问题- -无法引入,但是明明通过了pip进
- MySQL数据库线程缓冲池的相关知识是本文我们主要要介绍的内容,MySQL数据库支持线程缓存,在多线程连接模式下,如果连接断开后,将这个线程
- PyTorch与PyTorch Geometric的安装GPU与CUDA,Python,PyTorch的匹配1. 查看Linux系统中GPU
- 一,mnist数据集形如上图的数字手写体就是mnist数据集。二,GAN原理(生成对抗网络)GAN网络一共由两部分组成:一个是伪造器(Gen
- 如题:只需要给定输出特征图的大小就好,其中通道数前后不发生变化。具体如下:AdaptiveAvgPool2d CLASStorch.nn.A