Office 365 IMAP访问 - PHP

时间:2018-03-21 09:15:32

标签: php email imap

我有一个基本上通过IMAP访问电子邮件的脚本,然后查找所有.wav音频并将其下载到服务器本地的文件夹中。

我正努力让它通过IMAP访问Office 365。

继续说不能打开流{outlook.office365.com:993/imap/ssl/novalidate-cert}Inbox。

&安培;

无法连接至{outlook.office365.com:993/imap/ssl/novalidate-cert}INBOX:登录失败次数过多

请参阅下面的完整脚本;

<?php

    $MSG_DIR = "D:/Voicemail/Messages/";

    $USER = "xx";

    $PASS = "xx";



    // connect to JARVIS


    echo "<div style ='font:11px/21px Arial,tahoma,sans-serif;font-weight: bold;color:#2471b6'>Connecting to J.A.R.V.I.S.</div>\n<br/>";


    $host = "{outlook.office365.com:993/imap/ssl/novalidate-cert}Inbox";

    $mbox=imap_open($host,$USER,$PASS, NULL, 1, array('DISABLE_AUTHENTICATOR' => 'GSSAPI')) or die("Can't connect: " . imap_last_error());



    // Look over mailbox

    echo "<div style ='font:11px/21px Arial,tahoma,sans-serif;font-weight: bold;color:#2471b6'>Connection Complete...</div>\n<br/>";

    $MC = imap_check($mbox) or die("Can't check for messages");



    $overview = imap_fetch_overview( $mbox, "1:".$MC->Nmsgs, 0 ) or die( "Can't get headers");

    $countThis = 0;

    foreach ( $overview as $email )

    {       

        $subject = $email->subject;

        $udate = $email->udate;

        if( preg_match('/Voice Message from ([0-9]+)/', $subject, $groups) ||
        preg_match('/Voice Message from ([a-zA-Z]\w+)/', $subject, $groups) )

        {

            $filename = $MSG_DIR."/".$groups[1].date(" d-m H-i-s", $udate).".wav";



            if( file_exists( $filename ) )

            {

                echo "<div style ='font:11px/21px Arial,tahoma,sans-serif;color:#000000'>Skipping $filename...</div>\n";

            }

            else

            {

                echo "<div style ='font:11px/21px Arial,tahoma,sans-serif;color:#000000'>Extracting $filename...</div>\n";

                 $structure = imap_fetchstructure($mbox,$email->uid, FT_UID) or die( "could not fetch structure");



                 foreach ( $structure->parts as $part )


                 {

                    if( $part->subtype == "X-WAV" || $part->subtype=="WAV" || $part->subtype=="OCTET-STREAM")


                    {

                        // found it!

                        $body = imap_base64( imap_fetchbody( $mbox, $email->uid, 2, FT_UID ) ) or die( "Could not fetch part");

                        file_put_contents( $filename, $body );

                    }

                    else

                    {

                    }

                 }

            }

            $countThis++;

        }

    }

    echo "<div style ='font:11px/21px Arial,tahoma,sans-serif;font-weight: bold;color:#2471b6'></br>Found $countThis Voicemails\r\n</div>";

    echo "<div style ='font:11px/21px Arial,tahoma,sans-serif;font-weight: bold;color:#ff0000'></br>Disconnecting from J.A.R.V.I.S.\r\n</div>";



    imap_close($mbox);  

?>

以前在Exchange 2010上使用过。

希望有人可以提供帮助。

谢谢!

2 个答案:

答案 0 :(得分:1)

固定!

这是密码。

PHP在密码看起来并不像$。

答案 1 :(得分:1)

问题是在PHP中,变量是用符号$声明的。 PHP解释用双引号&#34;&#34;声明的字符串的内容。如果你有:

$foo = "var";

你做了:

echo "$foo";

您将获得 var 。但是,如果您使用单引号&#39;&#39;,PHP将不会解释内容:

$foo = "var";
echo '$foo';

它会逐字地返回 $ foo 。 作为一个小注释,我补充一点,在执行时使用单引号更快,因为PHP不必解释它,但在这种情况下,您将无法使用链中的变量。 问候。