有没有替代php imap扩展的方法



我的 godaddy 共享托管服务不会为 PHP 启用 IMAP 扩展。所以我在泡菜:

是否有PHP函数可以替换PHP中的IMAP功能?

这是错误:

Fatal error: Call to undefined function imap_last_error()

这是我遇到问题的示例代码:

$mbox = imap_open ('{'.$email_host.':'.$email_port.'/pop3/novalidate-cert}INBOX', $email_username, $email_password) or die(imap_last_error());

        if(!$mbox){
            // send email letting them know bounce checking failed?
            // meh. later.
            echo 'Failed to connect when checking bounces.';
        }else{
            $MC = imap_check($mbox);
            $result = imap_fetch_overview($mbox,"1:{$MC->Nmsgs}",0);
            foreach ($result as $overview) {
                $this_subject = (string)$overview->subject;
                //echo "#{$overview->msgno} ({$overview->date}) - From: {$overview->from} <br> {$this_subject} <br>n";
                $tmp_file = tempnam('/tmp/','newsletter_bounce');
                // TODO - tmp files for windows hosting.
                imap_savebody  ($mbox, $tmp_file, $overview->msgno);
                $body = file_get_contents($tmp_file);
                if(preg_match('/Message-ID:s*<?Newsletter-(d+)-(d+)-([A-Fa-f0-9]{32})/imsU',$body,$matches)){
                    // we have a newsletter message id, check the hash and mark a bounce.
                    //"message_id" => "Newsletter-$send_id-$member_id-".md5("bounce check for $member_id in send $send_id"),
                    $send_id = (int)$matches[1];
                    $member_id = (int)$matches[2];
                    $provided_hash = trim($matches[3]);
                    $real_hash = md5("bounce check for $member_id in send $send_id");
                    if($provided_hash == $real_hash){
                        $sql = "UPDATE "._DB_PREFIX."newsletter_member SET `status` = 4, bounce_time = '".time()."' WHERE `member_id` = '".$member_id."' AND send_id = '".$send_id."' AND `status` = 3 LIMIT 1";
                        query($sql);
                        imap_delete($mbox, $overview->msgno);
                    }else{
                        // bad hash, report.
                    }
                }
                unlink($tmp_file);
            }
            imap_expunge($mbox);
            imap_close($mbox);
        }
    }

提前感谢!!

没有 PECL 替代 imap 扩展。如果你敢,你可以用PHP写一个,但那将是相当无效的。另一种方法是(假设他们不受客户要求的影响)将"GoDaddy"变成"GoAwayDaddy",并将ISP更改为不阻止此扩展的ISP,这是非常基本的扩展。

这个适用于 godaddy 共享主机: http://www.phpclasses.org/package/4014-PHP-Retrieve-and-delete-messages-from-a-POP3-mailbox.html

这个也有效:http://framework.zend.com/manual/1.12/en/zend.mail.html

function __autoload($class_name) {
include $class_name . '.php';
}
 include_once 'Zend/Mail/Storage/AbstractStorage.php';
include_once 'Zend/Mail/Storage/Pop3.php';
$mail = new ZendMailStoragePop3(array('host'     => '$host',
                                     'user'     => '$user',
                                     'password' => '$password'));
echo $mail->countMessages() . " messages foundn";
foreach ($mail as $message) {
   echo "Mail from '{$message->from}': {$message->subject}n</br>";
   echo $message->getContent() . "</br>";
}

最新更新