我正在尝试创建一个imap解析器,它连接到outlook服务器但是当我运行代码时,我遇到了这个错误:
警告:imap_open():无法打开流 {outlook.office365.com:143/STARTTLS }INBOX in 第49行的C:\ xampp \ htdocs \ Imap_parser1.php无法连接 kraken.im:无法打开邮箱 {outlook.office365.com:143/STARTTLS }INBOX:无效遥控器 规格说明:未知:无法打开邮箱 {outlook.office365.com:143/STARTTLS }INBOX:无效遥控器 第0行的未知中的规范(errflg = 2)
是否可以获得解决问题的解决方案?
<html>
<head>
<title>Kraken.im Email Parser</title>
</head>
<body>
<?php
//include Imap_parser class
include './Imap_parser1.php';
//$myfile = fopen("Imap_parser.php", "r");
//create Imap_parser Object
$email = new Imap_parser();
//data
$data = array
(
//email account
'email' => array
(
'hostname' => '{outlook.office365.com:143/STARTTLS}INBOX',
'username' => 'nathan.hanlon@kraken.im',
'password' => 'XXXXXXXXXX'
),
//inbox pagination
'pagination' => array
(
'sort' => 'DESC', // or ASC
'limit' => 3,
'offset' => (empty($_GET['offset']) ? 0 : $_GET['offset'])
)
);
//get inbox by pagination. Array
$result = $email->inbox($data);
//HTML
$html = '<table>';
$html .= '<tr><td>subject</td><td>form</td><td>email</td><td>date</td>
<td>message</td><td>image</td></tr>';
foreach($result['inbox'] as $r)
{
$html .= '<tr><td>'.$r['subject'].'</td><td>'.$r['form'].'</td>
<td>'.$r['email'].'</td><td>'.$r['date'].'</td><td>
<pre>'.$r['message'].'</pre></td><td>'.(!empty($r['image'])? '<img
src="'.$r['image'].'"/>' : '').'</td></tr>';
}
$html .= '</table>';
echo $html;
?>
</body>
</html>
class Imap_parser {
function inbox($data)
{
$result = array();
***$imap = imap_open($data['email']['hostname'], $data['email']
['username'], $data['email']['password']) or die ('Cannot connect to
kraken.im: ' . imap_last_error());***
array('DISABLE_AUTHENTICATOR' => 'GSSAPI');
array('DISABLE_AUTHENTICATOR' => 'PLAIN');
if ($imap)
{
$result['status'] = 'success';
$result['email'] = $data['email']['username'];
$read = imap_search($imap, 'ALL');
if($data['pagination']['sort'] == 'DESC')
{
rsort($read);
}
$num = count($read);
$result['count'] = $num;
$stop = $data['pagination']['limit'] + $data['pagination']
['offset'];
if($stop > $num)
{
$stop = $num;
}
for ($i = $data['pagination']['offset']; $i < $stop; $i++)
{
$overview = imap_fetch_overview($imap, $read[$i], 0);
$message = imap_body($imap, $read[$i], 0);
$header = imap_headerinfo($imap, $read[$i], 0);
$mail= $header->from[0]->mailbox . '@' . $header->from[0]->host;
$image = '';
$message = preg_replace('/--(.*)/i', '', $message);
$message = preg_replace('/X\-(.*)/i', '', $message);
$message = preg_replace('/Content\-ID\:/i', '', $message);
$msg = '';
if (preg_match('/Content-Type/', $message))
{
$message = strip_tags($message);
$content = explode('Content-Type: ', $message);
foreach ($content as $c) {
if (preg_match('/base64/', $c))
{
$b64 = explode('base64', $c);
if (preg_match('/==/', $b64[1]))
{
$str = explode('==', $b64[1]);
$dec = $str[0];
} else
{
$dec = $b64[1];
}
if (preg_match('/image\/(.*)\;/', $c, $mime))
{
$image = 'data:image/' . $mime[1] . ';base64,' .
trim($dec);
}
} else {
if (!empty($c))
{
$msg = $c;
}
}
}
} else
{
$msg = $message;
}
$msg = preg_replace('/text\/(.*)UTF\-8/', '', $msg);
$msg = preg_replace('/text\/(.*)\;/', '', $msg);
$msg = preg_replace('/charset\=(.*)\"/', '', $msg);
$msg = preg_replace('/Content\-Transfer\-Encoding\:(.*)/i', '',
$msg);
$result['inbox'][] = array
(
'id' => $read[$i],
'subject' => strip_tags($overview[0]->subject),
'from' => $overview[0]->from,
'email' => $mail,
'date' => $overview[0]->date,
'message' => trim($msg),
'image' => $image
);
$result['pagination'] = array
(
'sort' => $data['pagination']['sort'],
'limit' => $data['pagination']['limit'],
'offset' => array
(
'back' => ($data['pagination']['offset'] == 0 ? null :
$data['pagination']['offset'] - $data['pagination']
['limit']),
'next' => ($data['pagination']['offset'] < $num ?
$data['pagination']['offset'] + $data['pagination']
['limit'] : null)
)
);
}
imap_close($imap);
} else
{
$result['status'] = 'error';
}
return $result;
}
}
?>
答案 0 :(得分:0)
尝试将连接的主机名部分更改为如下所示 - 它允许我连接并显示消息"connected"
〜但我建议您立即更改密码!!
$config =(object)array(
'hostname' => '{outlook.office365.com:993/imap/ssl}INBOX',
'username' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'password' => 'xxxxxxxxxxxxxx'
);
try{
$imap=imap_open( $config->hostname, $config->username, $config->password, OP_DEBUG|OP_READONLY );
echo $imap ? 'Connected' : 'Not connected!!!';
@imap_close( $imap );
}catch(Exception $e){
echo $e->getMessage();
}