我无法连接到Outlook服务器

时间:2017-07-07 09:27:54

标签: php outlook imap

我正在尝试创建一个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;

}

}

?>

1 个答案:

答案 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();
}