使用 PHP cURL 连接到 outlook.com 邮件服务器
Connect to outlook.com mail server with PHP cURL
我正在尝试使用 php 和 curl 从实时邮件服务器获得完整的答复。我尝试使用 pop3 协议连接,但它不起作用。
code-listing 1:
<?php
// create curl resource
$curl = curl_init();
if($curl) {
/* Set username and password */
curl_setopt($curl, CURLOPT_USERNAME, "example@outlook.com");
curl_setopt($curl, CURLOPT_PASSWORD, "password");
curl_setopt($curl, CURLOPT_URL, "pop3://pop3.live.com");
curl_setopt($curl, CURLOPT_PORT, 995);
curl_setopt($curl, CURLOPT_USE_SSL,CURLUSESSL_ALL);
curl_setopt($curl, CURLOPT_CAINFO, "./certificate.pem");
curl_setopt($curl, CURLOPT_VERBOSE, true);
//return the transfer as a string
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
// $output contains the output string
$output = curl_exec($curl);
}
echo $output;
curl_close($curl);
?>
当我使用此代码时(使用 pop3 协议)。标准输出告诉我客户端在端口 995 上连接成功。但无法读取响应。
response reading failed
Closing connection 0
但是当我使用 https 协议而不是 pop3 (在同一代码上)时,我得到了部分响应。它看起来像整个响应 header,至少看起来是这样,因为它在最后一个文本后输出了两个新行。
Accept: */*
cURL 具有不同的协议标识符,用于基于 SSL 的安全 POP。
而不是 pop3://
试试 pop3s://
,你应该会得到回复。
* Rebuilt URL to: pop3s://pop3.live.com/
* Hostname was NOT found in DNS cache
* Trying 134.170.170.231...
* Connected to pop3.live.com (134.170.170.231) port 995 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSL connection using ECDHE-RSA-AES256-SHA
* Server certificate:
* subject: C=US; ST=Washington; L=Redmond; O=Microsoft Corporation; CN=*.hotmail.com
* start date: 2015-12-15 22:26:11 GMT
* expire date: 2016-12-15 22:26:11 GMT
* subjectAltName: pop3.live.com matched
* issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign Organization Validation CA - SHA256 - G2
* SSL certificate verify ok.
< +OK DUB006-POP162 POP3 server ready
> CAPA
< -ERR unrecognized command
> USER me@xxx
< +OK password required
> PASS pass
< +OK Logged in.
> LIST
< +OK 5226 messages:
string(59927) "1 1830
2 69432
3 2751
4 2726
5 18506
6 2868
7 4636
8 1955
9 2242
10 3697
我正在尝试使用 php 和 curl 从实时邮件服务器获得完整的答复。我尝试使用 pop3 协议连接,但它不起作用。
code-listing 1:
<?php
// create curl resource
$curl = curl_init();
if($curl) {
/* Set username and password */
curl_setopt($curl, CURLOPT_USERNAME, "example@outlook.com");
curl_setopt($curl, CURLOPT_PASSWORD, "password");
curl_setopt($curl, CURLOPT_URL, "pop3://pop3.live.com");
curl_setopt($curl, CURLOPT_PORT, 995);
curl_setopt($curl, CURLOPT_USE_SSL,CURLUSESSL_ALL);
curl_setopt($curl, CURLOPT_CAINFO, "./certificate.pem");
curl_setopt($curl, CURLOPT_VERBOSE, true);
//return the transfer as a string
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
// $output contains the output string
$output = curl_exec($curl);
}
echo $output;
curl_close($curl);
?>
当我使用此代码时(使用 pop3 协议)。标准输出告诉我客户端在端口 995 上连接成功。但无法读取响应。
response reading failed
Closing connection 0
但是当我使用 https 协议而不是 pop3 (在同一代码上)时,我得到了部分响应。它看起来像整个响应 header,至少看起来是这样,因为它在最后一个文本后输出了两个新行。
Accept: */*
cURL 具有不同的协议标识符,用于基于 SSL 的安全 POP。
而不是 pop3://
试试 pop3s://
,你应该会得到回复。
* Rebuilt URL to: pop3s://pop3.live.com/
* Hostname was NOT found in DNS cache
* Trying 134.170.170.231...
* Connected to pop3.live.com (134.170.170.231) port 995 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSL connection using ECDHE-RSA-AES256-SHA
* Server certificate:
* subject: C=US; ST=Washington; L=Redmond; O=Microsoft Corporation; CN=*.hotmail.com
* start date: 2015-12-15 22:26:11 GMT
* expire date: 2016-12-15 22:26:11 GMT
* subjectAltName: pop3.live.com matched
* issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign Organization Validation CA - SHA256 - G2
* SSL certificate verify ok.
< +OK DUB006-POP162 POP3 server ready
> CAPA
< -ERR unrecognized command
> USER me@xxx
< +OK password required
> PASS pass
< +OK Logged in.
> LIST
< +OK 5226 messages:
string(59927) "1 1830
2 69432
3 2751
4 2726
5 18506
6 2868
7 4636
8 1955
9 2242
10 3697