致命错误:调用未定义的函数imap_open()

时间:2014-01-28 13:03:04

标签: php email imap pop3

我正在尝试使用php阅读电子邮件,我正在使用下面的代码,但它的错误Fatal error: Call to undefined function imap_open() in /testpage2/testmail.php on line 18任何人都可以指导我。谢谢

<?php
$codes = array("7bit","8bit","binary","base64","quoted-printable","other");
$stt = array("Text","Multipart","Message","Application","Audio","Image","Video","Other");

$pictures = 0;
$html = "";

# Connect to the mail server and grab headers from the mailbox

$mail = imap_open('{mail.xxxxxxxx.com:110/pop3}', 'xxxxxx@xxxxxxxx.com', 'xxxxxxxxx');
$headers = imap_headers($mail);

# loop through each email

for ($n=1; $n<=count($headers); $n++) {
        $html .=  "<h3>".$headers[$n-1]."</h3><br />";

# Read the email structure and decide if it's multipart or not

        $st = imap_fetchstructure($mail, $n);
        $multi = $st->parts;
        $nparts = count($multi);
        if ($nparts == 0) {
                $html .=  "* SINGLE part email<br>";
        } else{
                $html .=  "* MULTI part email<br>";
        }

# look at the main part of the email, and subparts if they're present

        for ($p=0; $p<=$nparts; $p++) {
                $text =imap_fetchbody($mail,$n,$p);
                if ($p ==  0) {
                        $it = $stt[$st->type];
                        $is = ucfirst(strtolower($st->subtype));
                        $ie = $codes[$st->encoding];
                } else {
                        $it = $stt[$multi[$p-1]->type];
                        $is = ucfirst(strtolower($multi[$p-1]->subtype));
                        $ie = $codes[$multi[$p-1]->encoding];
                }

# Report on the mimetype

                $mimetype = "$it/$is";
                $html .=  "<br /><b>Part $p ... ";
                $html .=  "Encoding: $ie for $mimetype</b><br />";

# decode content if it's encoded (more types to add later!)

                if ($ie == "base64") {
                        $realdata = imap_base64($text);
                        }
                if ($ie == "quoted-printable") {
                        $realdata = imap_qprint($text);
                        }

# If it's a .jpg image, save it (more types to add later)

                if ($mimetype == "Image/Jpeg") {
                        $picture++;
                        $fho = fopen("imx/mp$picture.jpg","w");
                        fputs($fho,$realdata);
                        fclose($fho);
                        # And put the image in the report, limited in size
                        $html .= "<img src=/demo/imx/mp$picture.jpg width=150><br />";
                }

# Add the start of the text to the message

                $shorttext = substr($text,0,800);
                if (strlen($text) > 800) $horttext .= " ...\n";
                $html .=  nl2br(htmlspecialchars($shorttext))."<br>";
        }
}

# report results ...

?>
<html>
<head>
<title>Reading a Mailbox including multipart emails from within PHP</title>
</head>
<body>
<h1>Mailbox Summary ....</h1>
<?= $html ?>
</body>
</html>

6 个答案:

答案 0 :(得分:1)

您需要enable IMAP in PHP才能使用它。如果您执行phpinfo(),则可以确认是否已安装。

答案 1 :(得分:1)

正如其他人所说启用或安装imap扩展名(例如ubuntu / debian中的php5-imap)。顺便说一句。看看Fetch,这是一个很好的面向OOP的库,用于处理IMAP。

答案 2 :(得分:1)

如果您使用XAMPP启用php_imap.dll extension 转到XAMPP/php 更改php.ini file

;extension=php_imap.dll

 extension=php_imap.dll

答案 3 :(得分:0)

您的服务器上没有安装PHP的IMAP模块。  安装 php5-imap

参考:http://www.php.net/manual/en/imap.setup.php

答案 4 :(得分:0)

检查服务器中是否已启用天气imap,如果未启用则表示启用它。如果未安装imap扩展名意味着安装并启用它,请检查此链接http://www.php.net/manual/en/imap.setup.php

答案 5 :(得分:0)

如果您有 php 7+,请更新您的 php.ini 文件

取消注释

;extension=imap

extension=imap

如果您找不到 extension=imap,请手动将其添加到您的 php.ini 部分,只需搜索 ;extension

最后重启Apache