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

yizhihongxing

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日

相关文章

  • 在Java编程中定义方法

    在Java编程中定义方法,可以方便地对代码进行模块化,同时也可以提高代码的可读性和可维护性。下面,我将详细讲解Java编程中定义方法的完整攻略。 什么是方法? 在Java中,方法(Method)是一个独立的代码块,用于封装一些指令。它可以接受参数,处理数据以及返回值。我们可以在代码中通过调用方法来执行其中的指令。方法可以用于多处调用,提高了代码的复用性。 方…

    Java 2023年5月26日
    00
  • jsp中调用java代码小结

    下面我会给出一个完整的“jsp中调用java代码”的攻略,分为以下几个步骤: 一、创建Java类及方法在Java中创建一个类,并在其中定义一个或多个方法,以便供JSP调用。类及方法应当按照Java语法规范编写,并尽量遵循业内最佳实践的要求。 二、打包Java类为jar包将Java类打包成jar包,然后将jar包放置到WEB-INF/lib目录下。这样JSP页…

    Java 2023年5月23日
    00
  • Spring Data环境搭建实现过程解析

    下面是 “Spring Data环境搭建实现过程解析”的详细攻略。 1. 前置条件 在开始搭建Spring Data环境之前,需要对以下内容进行准备: 安装JDK(Java Development Kit),并设置JAVA_HOME环境变量。 安装Maven,确保Maven能够正常运行。 2. 创建Maven项目 使用Maven创建一个新项目,可以使用如下命…

    Java 2023年5月20日
    00
  • java中封装JDBC工具类的实例分析

    我来为你详细讲解“Java中封装JDBC工具类的实例分析”的完整攻略。 什么是JDBC工具类 在Java中使用JDBC技术与数据库进行连接时,需要编写一些重复性较高的代码,如加载驱动、获取连接、关闭连接等。为了避免重复代码的编写,可以将这些代码封装在一个工具类中。这个工具类我们称之为JDBC工具类。 JDBC工具类的编写 加载驱动 在编写JDBC工具类的时候…

    Java 2023年6月16日
    00
  • java 多线程实现在线咨询(udp)

    Java 多线程实现在线咨询(UDP) 什么是在线咨询? 在线咨询是一种通过网络实现客户和客服之间咨询、沟通的服务形式。通过在线咨询,客户可以直接向客服提出问题,获取解决方案。在线咨询分为基于 Web 和基于客户端的两种形式。 UDP协议简介 UDP是一种无连接的协议,它基于 IP 协议。UDP 报文不需要建立连接,所以它轻巧快速,但是它无法保证数据传输的可…

    Java 2023年5月18日
    00
  • Spring Security认证器实现过程详解

    Spring Security认证器实现过程详解 什么是Spring Security认证器 Spring Security是一个基于安全框架的安全性认证和授权框架,也是Spring框架中的一个子项目。它负责管理我们应用程序中的用户、角色和权限,并为它们提供安全访问。 Spring Security身份认证的实现过程主要涉及到AuthenticationMa…

    Java 2023年5月20日
    00
  • mysql 海量数据的存储和访问解决方案

    MySQL 是一种流行的关系型数据库,通常被用于存储和管理各种规模大小的数据。针对海量数据的存储和访问问题,有以下几种解决方案: 1. 数据分区 概述 数据分区是指把数据库表中的数据分散到不同的存储设备上,以提高对大量数据的查询和处理性能。MySQL 支持两种分区方式:根据范围分区和根据哈希值分区。根据范围分区是指把表的每个分区按照指定的范围划分,而根据哈希…

    Java 2023年6月16日
    00
  • Spring Boot常用注解(经典干货)

    下面是对应的攻略: Spring Boot常用注解(经典干货) Spring Boot 是一个非常流行的 Java 后端框架,使用注解可以让我们更加方便快捷地进行开发。在这篇文章中,我们将详细讲解 Spring Boot 中常用的注解。 @RestController 在 Spring Boot 中,我们可以通过 @RestController 注解来标记一…

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