PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】

PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】

前置条件

要获取邮箱联系人地址,需要掌握以下知识:

  1. 熟悉PHP语言;
  2. 熟悉邮箱联系人地址的获取方式;
  3. 了解邮箱的认证机制;
  4. 了解网络请求的相关知识。

获取163邮箱联系人地址

步骤一:登录163邮箱

使用curl库,向163发起登录请求,获取登录后的cookie。代码如下:

$url = 'https://mail.163.com/';
$username = 'your_username';
$password = 'your_password';
$postdata = array('username' => $username, 'password' => $password);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $postdata,
    CURLOPT_HEADER => true,
    CURLOPT_RETURNTRANSFER => true,
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error: ' . curl_error($ch);
}
curl_close($ch);
preg_match_all('/Set-Cookie:(.*);/iU', $response, $cookies);
foreach ($cookies[1] as $cookie) {
    $cookieArray = explode('=', $cookie);
    if ($cookieArray[0] == 'Coremail.sid') {
        $sid = $cookieArray[1];
    }
}

步骤二:获取联系人地址

使用上一步获取的cookie,向163发起获取联系人地址的请求,获取联系人地址列表,代码如下:

$url = 'https://mail.163.com/contacts/call.do;jsessionid=' . $sid;
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_COOKIE => 'Coremail.sid=' . $sid,
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error: ' . curl_error($ch);
}
curl_close($ch);
$matches = array();
preg_match_all('/\"email\":\"(.*?)\"/iU', $response, $matches);
$emailList = $matches[1];

获取gmail邮箱联系人地址

步骤一:登录Gmail邮箱

使用curl库,向Gmail发起登录请求,获取登录后的cookie。代码如下:

$url = 'https://accounts.google.com/ServiceLoginAuth';
$username = 'your_username';
$password = 'your_password';
$postdata = array(
    'Email' => $username,
    'Passwd' => $password,
    'continue' => 'https://www.google.com',
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $postdata,
    CURLOPT_HEADER => true,
    CURLOPT_RETURNTRANSFER => true,
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error: ' . curl_error($ch);
}
curl_close($ch);
preg_match_all('/Set-Cookie:(.*);/iU', $response, $cookies);
$cookieStr = '';
foreach ($cookies[1] as $cookie) {
    $cookieArray = explode('=', $cookie);
    $name = trim($cookieArray[0]);
    $value = trim($cookieArray[1]);
    $cookieStr .= $name . '=' . $value . ';';
}

步骤二:获取联系人地址

使用上一步获取的cookie,向Gmail发起获取联系人地址的请求,获取联系人地址列表,代码如下:

$url = 'https://www.google.com/m8/feeds/contacts/default/full?max-results=10000';
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_COOKIE => $cookieStr,
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error: ' . curl_error($ch);
}
curl_close($ch);
$xml = simplexml_load_string($response);
$ns = $xml->getDocNamespaces();
$ns_gd = isset($ns['gd']) ? $ns['gd'] : '';
$ns_gd_prefix = $xml->getDocNamespaces(true)[$ns_gd];
$data = $xml->children($ns_gd_prefix)->entry;
$emailList = array();
foreach ($data as $contact) {
    $emailList[] = (string) $contact->email[0]['address'];
}

结语

以上就是获取163、gmail邮箱联系人地址的完整攻略,需要注意的是,要获取联系人地址需要模拟登录邮箱并通过网络请求获取数据,同时需要处理对应邮件服务商的认证机制。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】 - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • 归并算法之有序数组合并算法实现

    下面是“归并算法之有序数组合并算法实现”的完整攻略。 什么是归并算法? 归并排序(Merge Sort)是一种基于归并操作的排序算法。将一个数组拆分成两个数组,对每个子数组分别进行排序,最后将排序好的两个子数组合并成一个有序的数组。 有序数组合并算法的实现 基本思路: 先比较两个数组的第一个元素,将较小的元素放入结果数组 然后继续比较较小元素所在数组的下一个…

    Java 2023年5月19日
    00
  • JAVA多线程之实现用户任务排队并预估排队时长

    JAVA多线程之实现用户任务排队并预估排队时长 问题描述 我们在开发一个应用程序时,可能需要实现任务排队功能,以确保多个用户提交的任务可以依次执行,并预估排队时长,方便用户等待。本文将介绍如何使用Java多线程技术实现用户任务排队并预估排队时长。 方案概述 我们可以使用Java的线程池技术实现任务排队功能。Java线程池是一种机制,它可以维护一组线程,以便在…

    Java 2023年5月18日
    00
  • java 格式化时间的示例代码

    下面是“java格式化时间的示例代码”的完整攻略。 格式化时间的方法 在Java中,可以使用SimpleDateFormat类中的format方法对时间进行格式化。 代码演示 下面给出一个示例,假设有如下需要格式化的时间: Date date = new Date(); 要把这个时间格式化为“yyyy-MM-dd HH:mm:ss”的形式,可以使用以下代码:…

    Java 2023年6月1日
    00
  • java实现简易聊天功能

    Java实现简易聊天功能攻略 1. 确定技术栈 要实现简易聊天功能,需要选择合适的技术栈。Java语言比较适合网络编程,因此可以先选择Java语言作为开发语言。 对于通信协议,可以选择TCP或UDP。TCP是一种可靠传输协议,通过三次握手建立连接,确保数据的可靠性。UDP则是一种不可靠传输协议,不进行连接建立,发送数据时没有确认机制。 对于GUI界面,可以使…

    Java 2023年5月19日
    00
  • 详解Spring Boot 异步执行方法

    下面是详解SpringBoot异步执行方法的完整攻略。 1. 什么是异步执行? 在程序执行中,如果某个方法耗时比较长,会阻塞当前线程,导致整个程序变得缓慢。为了解决这个问题,我们可以采用异步执行的方式,将耗时操作交给另一个线程去执行,这样就不会阻塞当前线程,提高程序执行效率。 2. SpringBoot异步执行方法的实现方式 SpringBoot提供了一种简…

    Java 2023年5月15日
    00
  • Java设计模式之java组合模式详解

    Java组合模式详解 什么是组合模式? 组合模式是一种结构型设计模式,其主要思想是将对象组合成树形结构以表示“部分整体”的层次结构。组合模式中包含两种基本的组件: 叶节点(Leaf): 叶节点代表树的最底层的节点,即无子节点的节点。 复合节点(Composite): 复合节点代表树的非叶子节点,它可能包含子节点,也可能不包含。 组合模式的优点 可以更方便地扩…

    Java 2023年5月26日
    00
  • SpringBoot 返回Json实体类属性大小写的解决

    针对“SpringBoot 返回Json实体类属性大小写的解决”,可以采用以下两种方式: 1.使用Jackson的配置 在SpringBoot中,通常会使用Jackson作为JSON序列化、反序列化的工具,所以我们可以使用Jackson的配置来解决大小写问题。 1.1 配置方式 使用Jackson的@JsonProperty注解,指定属性名,然后加上相应的配…

    Java 2023年5月26日
    00
  • java通过MySQL驱动拦截器实现执行sql耗时计算

    首先让我解释一下MySQL驱动拦截器。MySQL驱动拦截器是通过JDBC驱动程序提供的一种扩展机制,以拦截JDBC API调用,从而可以在执行JDBC操作之前和之后添加自定义逻辑。使用MySQL驱动拦截器,我们可以实现一些非常有用的功能,例如,计算SQL执行时间、SQL量级统计、检测SQL注入等。 接下来,我将详细描述如何使用Java和MySQL驱动拦截器来…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部